我有两个shapefile,一个是点,另一个多边形,它们共享一个公共属性字段Field_Name
,该属性字段仅填充在点shapefile中。我想创建一个Python / ArcPy脚本来完成以下任务:
到目前为止,这就是我所拥有的,任何人都知道如何使它工作?
import arcpy
arcpy.env.workspace = r"C:\Users\*****\Desktop\GIS_test\shapefiles"
Point = r'C:\Users\*****\Desktop\GIS_test\shapefiles\Point.shp'
field = 'Field_Name'
Polygons = r'C:\Users\*****\Desktop\GIS_test\shapefiles\Polygons.shp'
# Use SearchCursor to return a unique set of values in the specified field and create set.
values = [row[0] for row in arcpy.da.SearchCursor(Point, field)]
uniqueValues = set(values)
# Convert the set to a list.
unique_list = (list(uniqueValues))
#Loop through list of unique values.
for x in unique_list:
#SelectLayerByAttribute(in_layer_or_view, {selection_type}, {where_clause}, {invert_where_clause})
arcpy.SelectLayerByAttribute_management(Point, 'NEW_SELECTION', [Field_Name] = '{0}'.format(x))
#SelectLayerByLocation_management (in_layer, {overlap_type}, {select_features}, {search_distance},
#{selection_type},{invert_spatial_relationship})
arcpy.SelectLayerByLocation_management(Polygons, 'CONTAINS', Point)
#Update Field_Name attribute value in Polygon attribute table with name in unique list from Point.shp
with arcpy.da.UpdateCursor(Polygons, 'Field_Name') as cursor:
for row in cursor:
row[0] = x
cursor.updateRow(row)
该脚本执行到第18行(第一个选择语句)。
答案 0 :(得分:0)
在我看来,您要执行的操作是空间连接。
空间连接from Arcmap documentation:根据空间关系将属性从一个要素连接到另一个要素。
文档将比我更好地解释如何使用它。
注1: 如果一个多边形中有多个具有不同值的点,则该多边形将仅具有一个点的字段。
注2:
空间联接功能将join_features
到target_feature
的所有字段联接在一起。因此,如果只希望添加一列,则必须隐藏其他字段。这是一个如何隐藏字段(必须创建一个新层)的示例:
input_layer = 'your_layer_name'
desired_fields = #['field1', 'field2', ...]
field_info = arcpy.Describe(input_layer).fieldInfo
for i in range(field_info.count):
if field_info.getfieldname(i) not in desired_fields:
field_info.setvisible(i, 'HIDDEN')
arcpy.MakeFeatureLayer_management(input_layer, 'new_layer_name', '', '', field_info)