liuwenliang的个人博客分享 http://blog.sciencenet.cn/u/liuwenliang

博文

[转载]【ArcPy】根据空间条件选择要素,与创建图层问题

已有 2518 次阅读 2021-3-18 12:14 |个人分类:python|系统分类:科研笔记|文章来源:转载


转自:https://blog.csdn.net/OldMonkeyYu_s/article/details/90372112

我的场景:有一个点要素集,我想知道距离每个点最近的几个点要素是什么


以前数据量不大的时候,这种情况我就直接暴力二层循环两两计算距离,但是随着自己对代码要求的提高,不能接受如此笨重的做法,遂查到空间选择SelectLayerByLocation_management。


这一方法输入的第一个参数(即查询对象)必须是图层,以往我都是要素集操作,不熟悉arcpy中的图层,因此也遇到了问题。


首先贴出正确结果:


#!/usr/bin/python

# -*- coding: UTF-8 -*-

 

import arcpy

shp='..\gridUTM.shp'

#首先需要从要素集创建图层对象

arcpy.MakeFeatureLayer_management(shp, "lyr")

rows=arcpy.UpdateCursor(shp)

for row in rows:

pg=row.getValue('SHAPE')

    #空间选择方法,这里用缓冲区是简化逻辑

arcpy.SelectLayerByLocation_management("lyr",'INTERSECT',pg.buffer(1000))

    #最后遍历选择

rows2 = arcpy.SearchCursor('lyr', ["Field1"])

for row2 in rows2:

print row2.getValue('Field1')

    #以第一个为例

exit()

关于空间选择方法和上面的代码逻辑就不赘述了,下面讲讲遇到的问题。


SelectLayerByLocation_management方法的第三个参数,是Feature Layer类型的对象,一开始出于担心,我想要不要把缓冲区也图层化再输入:


arcpy.MakeFeatureLayer_management(pg.buffer(1000), "lyr2")

arcpy.SelectLayerByLocation_management("lyr",'INTERSECT', "lyr2")

结果没有查询到任何东西。


然而我把相同的代码放入ArcMap的Python window中运行,则可顺利运行,两个图层也在TOC中添加上了。


 


问题来了,同样的代码,为何独立脚本不得运行,而ArcMap窗口可以运行呢?


进一步查看了一下:


arcpy.MakeFeatureLayer_management(pg.buffer(1000), "lyr2")

desc = arcpy.Describe("lyr2")

print("Name String:        " + desc.nameString)

print("Feature class type: " + desc.featureClass.featureType)

rows2=arcpy.UpdateCursor("lyr2")

for row2 in rows2:

print row2

'''

输出

Name String:        lyr2

Feature class type: Simple

'''

似乎说明了缓冲区图层其实并没有创建出来,其中没有内容,即使使用time.sleep等待也同样无结果。


我知道MakeFeatureLayer_management方法创建的是内存中的临时图层,只是为何lyr可用而lyr2不可用呢?我自己暂时不能解答,目前只做一记录,如有大佬知道原理,望不吝赐教。

————————————————

版权声明:本文为CSDN博主「OldMonkeYu」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/OldMonkeyYu_s/article/details/90372112




https://blog.sciencenet.cn/blog-3409972-1277407.html

上一篇:[转载]Arcpy中Geometry类与Array类转换的陷阱
下一篇:[转载]聊聊GIS中的坐标系|再版 识别各种数据的坐标系及代码中的坐标系
收藏 IP: 210.72.27.*| 热度|

0

该博文允许注册用户评论 请点击登录 评论 (0 个评论)

数据加载中...

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-10-20 04:59

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部