我的场景:有一个点要素集,我想知道距离每个点最近的几个点要素是什么
以前数据量不大的时候,这种情况我就直接暴力二层循环两两计算距离,但是随着自己对代码要求的提高,不能接受如此笨重的做法,遂查到空间选择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类型的对象,一开始出于担心,我想要不要把缓冲区也图层化再输入:
<