У меня есть два шейп-файла, один - это точки, а другие - многоугольники, и они имеют общее поле атрибута Field_Name
, которое заполняется только в шейп-файле точек.Я хочу создать скрипт 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 (первый оператор select).