需求:两个矢量文件,当A与B有重叠(包括相交和包含)面积时,赋予B某些A的字段。
要点:用到了arcpy的几何模块。
坑点:
- 写arcgis脚本的编码方式最好为ASCII(因为编码问题,在代码中有中文时必须转换为ASCII,可使用notepad++转换)。
- 中文使用
XX.decode('utf-8')
转换。 - 使用
arcpy.da.UpdateCursor
、arcpy.da.InsertCursor
、arcpy.da.SearchCursor
三个函数时,注意:许多次遍历时,注意重新使用arcpy.da.XXXXXCursor
再次打开数据。
"""
Created on Fri Aug 14 17:34:37 2020
@author: zonggongban HGH
"""
import arcpy
"""
接收脚本输入
"""
ds0 = arcpy.GetParameterAsText(0)
ds0 = u'{}'.format(ds0)
fields0 = arcpy.GetParameterAsText(1)
ds1 = arcpy.GetParameterAsText(2)
ds1 = u'{}'.format(ds1)
fields1 = arcpy.GetParameterAsText(3)
with arcpy.da.UpdateCursor(ds0, ['SHAPE@', fields0]) as cursor0:
for row0 in cursor0:
temp = ''
with arcpy.da.SearchCursor(ds1, ['SHAPE@', fields1]) as cursor1:
for row1 in cursor1:
if row0[0].contains(row1[0]):
temp += row1[1] + '、'.decode('utf-8')
elif row0[0].overlaps(row1[0]):
temp += row1[1] + '、'.decode('utf-8')
else:
pass
row0[1] = temp[0:len(temp)-1]
cursor0.updateRow(row0)
脚本设定:
备注:
- 要素类1、2设定一致,字段1、2设定一致。
- 在spyder里面使用arcpy
import sys arcpy_path = [r'C:\Python27\ArcGIS10.6\Lib\site-packages', r'C:\Program Files (x86)\ArcGIS\Desktop10.6\arcpy', r'C:\Program Files (x86)\ArcGIS\Desktop10.6\bin', r'C:\Program Files (x86)\ArcGIS\Desktop10.6\ArcToolbox\Scripts'] sys.path.extend(arcpy_path)