ArcGIS Desktop

  • Документация
  • Поддержка

  • My Profile
  • Справка
  • Sign Out
ArcGIS Desktop

ArcGIS Online

Картографическая платформа вашей организации

ArcGIS Desktop

Полноценная профессиональная ГИС

ArcGIS Enterprise

ГИС предприятия

ArcGIS for Developers

Инструменты для встраивания приложений с местоположениями

ArcGIS Solutions

Бесплатные шаблоны карт и приложений для отрасли

ArcGIS Marketplace

Получение приложения и данных для вашей организации.

  • Документация
  • Поддержка
Esri
  • Войти
user
  • Мой профиль
  • Выход

ArcMap

  • На главную
  • Начало работы
  • Карта
  • Анализ
  • Управление данными
  • Инструменты
  • Дополнительные модули

Запись геометрии

Используя курсоры insert и update, скрипты могут создавать новые или изменять существующие пространственные объекты в классе пространственных объектов. Скрипт может определить пространственный объект, создав Точечный объект, заполнив его свойства и поместив его в массив. Затем массив можно использовать для задания геометрии пространственного объекта, используя классы геометрии Полигон (Polygon), Полилиния (Polyline), PointGeometry или Мультиточка (Multipoint).

import arcpy
fc = "c:/data/gdb.gdb/roads"
cursor = arcpy.da.InsertCursor(fc, ["SHAPE@"])
array = arcpy.Array([arcpy.Point(5997611.48964, 2069897.7022),
                     arcpy.Point(5997577.46097, 2069905.81145)])
polyline = arcpy.Polyline(array)

cursor.insertRow([polyline])

Как показано выше, простые участки геометрии определяются массивом точек. Аналогично, составной объект можно создать из массива массивов точек, как показано ниже, с помощью того же курсора.

firstPart = arcpy.Array([arcpy.Point(5997624.6225, 2069868.8208),
                         arcpy.Point(5997674.94199, 2069833.81741)])
secondPart = arcpy.Array([arcpy.Point(5997616.44497, 2069862.32774),
                          arcpy.Point(5997670.57373, 2069824.67456)])

array = arcpy.Array([firstPart, secondPart])
multipartFeature = arcpy.Polyline(array)

cursor.insertRow([multipartFeature])

При записи точечных объектов для задания геометрии точечного объекта используется только один объект точки. Легче (и эффективнее) точки могут быть созданы с помощью токена SHAPE@XY (и токенов SHAPE@M и SHAPE@Z, при необходимости).

import arcpy

# fc is a point feature class
#
fc = "c:/data/gdb.gdb/stops"
cursor = arcpy.da.InsertCursor(fc, ["SHAPE@XY"])
xy = (5997594.4753, 2069901.75682)

cursor.insertRow([xy])

Все геометрии перед записью в качестве класса пространственного объекта проверяются. При упрощении геометрии перед ее вставкой кроме всего прочего исправляются такие ошибки, как неправильная ориентация кольца и самопересекающиеся полигоны.

В следующем примере демонстрируется, как прочитать набор координат (определенный coordsList), содержащий набор линейных координат, и использовать его для создания нового класса пространственных объектов.

# Create a new line feature class using a text file of coordinates.
#   Each coordinate entry is semicolon delimited in the format of ID;X;Y
import arcpy
import os

# List of coordinates (ID, X, Y)
#
coordsList = [[1, -61845879.0968, 45047635.4861], 
              [1, -3976119.96791, 46073695.0451],
              [1, 1154177.8272, -25134838.3511],
              [1, -62051091.0086, -26160897.9101],
              [2, 17365918.8598, 44431999.7507],
              [2, 39939229.1582, 45252847.3979],
              [2, 41170500.6291, 27194199.1591],
              [2, 17981554.5952, 27809834.8945],
              [3, 15519011.6535, 11598093.8619],
              [3, 52046731.9547, 13034577.2446],
              [3, 52867579.6019, -16105514.2317],
              [3, 17160706.948, -16515938.0553]]

# The output feature class to be created
#
outFC = arcpy.GetParameterAsText(0)

# Get the template feature class
#
template = arcpy.GetParameterAsText(1)

cur = None
try:
    # Create the output feature class
    #
    arcpy.CreateFeatureclass_management(os.path.dirname(outFC),
                                        os.path.basename(outFC), 
                                        "POLYLINE", template)

    # Open an insert cursor for the new feature class
    #
    cur = arcpy.da.InsertCursor(outFC, ["SHAPE@"])

    # Create an array object needed to create features
    #
    array = arcpy.Array()

    # Initialize a variable for keeping track of a feature's ID.
    #
    ID = -1
    for coords in coordsList: 
        if ID == -1:
            ID = coords[0]

        # Add the point to the feature's array of points
        #   If the ID has changed, create a new feature
        #
        if ID != coords[0]:
            cur.insertRow([arcpy.Polyline(array)])
            array.removeAll()
        array.add(arcpy.Point(coords[1], coords[2], ID=coords[0]))
        ID = coords[0]

    # Add the last feature
    #
    cur.insertRow([arcpy.Polyline(array)])


except Exception as e:
   print(e)
finally:
    # Cleanup the cursor if necessary
    #
    if cur:
        del cur

Составные полигональные и полилинейные объекты, а также полигональные объекты с внутренними контурами, могут быть созданы путем создания массива массивов, а затем передачи его в классы Polygon и Polyline.

Связанные разделы

  • Доступ к данным с помощью курсоров
  • Определение запроса в Python
  • Считывание геометрии
  • Использование объектов геометрии с инструментами геообработки

ArcGIS Desktop

  • На главную
  • Документация
  • Поддержка

ArcGIS Platform

  • ArcGIS Online
  • ArcGIS Desktop
  • ArcGIS Enterprise
  • ArcGIS for Developers
  • ArcGIS Solutions
  • ArcGIS Marketplace

Об Esri

  • О нас
  • Карьера
  • Блог сотрудников
  • Конференция пользователей
  • Саммит разработчиков
Esri
Расскажите нам, что вы думаете.
Copyright © 2018 Esri. | Конфиденциальность | Правовая информация