Как перебирать список, делать выбор атрибутов и пространственных объектов, а также заполнять поля с помощью курсоров с помощью ArcPy - PullRequest
0 голосов
/ 01 июля 2019

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

...