Полигон в линию (Управление данными)

Краткая информация

Создает класс пространственных объектов, содержащий линии, которые конвертируются из границ полигонов с и без учета соседних полигонов.

Иллюстрация

Иллюстрация Полигон в линию

Использование

  • Если отмечено Идентифицировать и сохранять информацию о соседних полигонах (для опции neighbor_option в Python установлено IDENTIFY_NEIGHBORS), то будут анализироваться отношения между соседними полигонами. Как показано на иллюстрации выше, границы конвертируются в линии с учетом пересечений и общих сегментов; два новых поля, LEFT_FIDи RIGHT_FID, добавлены в выходной класс объектов и установлены в качестве идентификаторов объектов входных полигонов слева и справа от каждой выходной линии. Атрибуты входных объектов не будут поддерживаться в выходном классе объектов. Ниже детально проанализирован сам процесс и варианты выходных данных:

    • В полигональной геометрии, выходная граница всегда строится в направлении по часовой стрелке. Если полигон имеет отверстие, граница отверстия (или внутренняя граница) всегда сохраняется в направлении против часовой стрелки. Таким образом, для полигона, у которого нет соседей слева (с внешней стороны) от его внешней границы и слева (с внутренней стороны) от границы отверстия, результирующие линии будут иметь значение -1 для LEFT_FIDи идентификатор полигонального объекта как RIGHT_FID.
    • Если полигон содержит другой полигон, будет создана одна выходная линия в направлении по часовой стрелке, представляющая общую границу, где LEFT_FID установлен на идентификатор объекта внешнего полигона, а RIGHT_FID установлен на идентификатор объекта внутреннего полигона.
    • Если два полигона имеют общую часть границы, будет создана одна выходная линия, представляющая общий сегмент. Направление линии будет произвольным; LEFT_FID и RIGHT_FID будут установлены на идентификатор левого и правого полигональных объектов соответственно.
    • Если полигон перекрывает другой полигон, будут созданы две выходные линии, представляющие каждую границу пересечения дважды: первая линия представляет внешнюю границу одного из перекрывающихся полигонов, таким образом, LEFT_FID - это идентификатор объекта пересекаемого полигона, а RIGHT_FID будет ее собственным идентификатором полигона; вторая линия проходит в противоположном направлении, разбивая другой полигон, таким образом, LEFT_FID и RIGHT_FID будут такими же, как и другой идентификатор полигонального объекта.
    • Составные объекты во входных полигонах не поддерживаются; все выходные линии простые.

    Для входных объектов параметрических (истинных) кривых, выходные линии останутся истинными кривыми, даже если они разбиты. Не применяется к данным шейп-файла.

    Для обработки очень больших наборов данных используется разбивка на листы, для повышения производительности и масштабируемости. Для получения более подробной информации см. Тайловая обработка больших наборов данных.

  • Если отмечено Идентифицировать и сохранять информацию о соседних полигонах (для опции neighbor_option в Python установлено IGNORE_NEIGHBORS), то будут анализироваться отношения между соседними полигонами. Каждая граница входного полигона будет записана как отдельный линейный объект. Составной полигон станет составной линией в выходных данных. Атрибуты входных объектов будут скопированы в выходной класс объектов. Новое поле, ORIG_FID, будет добавлено к выходным данным и установлено на идентификатор входного объекта каждой линии.

Параметры

ПодписьОписаниеТип данных
Входные объекты

Входные объекты, которые должны быть полигонами.

Feature Layer
Выходной класс пространственных объектов

Выходной класс линейных объектов.

Feature Class
Идентифицирует и сохраняет информацию о соседних полигонах
(Дополнительный)

Устанавливает, нужно ли идентифицировать и хранить информацию о соседних полигонах.

  • Отмечено: отношения между соседними полигонами будут идентифицироваться и сохраняться в выходных данных. Если различные сегменты полигона имеют общую границу с другими полигонами, граница разбивается таким образом, что каждый общий уникальный сегмент становится линией с двумя FID-идентификаторами соседних полигонов, хранящихся в выходных данных, как показано на иллюстрации. Это значение по умолчанию.
  • Не отмечено: отношения между соседними полигонами будут игнорироваться; граница каждого полигона станет линейным объектом с исходным идентификатором полигонального объекта, хранящимся в выходных данных.

Boolean

arcpy.management.PolygonToLine(in_features, out_feature_class, {neighbor_option})
ИмяОписаниеТип данных
in_features

Входные объекты, которые должны быть полигонами.

Feature Layer
out_feature_class

Выходной класс линейных объектов.

Feature Class
neighbor_option
(Дополнительный)

Устанавливает, нужно ли идентифицировать и хранить информацию о соседних полигонах.

  • IDENTIFY_NEIGHBORSОтношения между соседними полигонами будут идентифицироваться и сохраняться в выходных данных. Если различные сегменты полигона имеют общую границу с другими полигонами, граница будет разбита, так чтобы каждый уникально хранящийся сегмент стал линией с двумя идентификаторами соседних полигонов, хранящихся в выходных данных. Это значение по умолчанию.
  • IGNORE_NEIGHBORSОтношения между соседними полигонами будут игнорироваться; граница каждого полигона станет линейным объектом с исходным идентификатором полигонального объекта, хранящимся в выходных данных.
Boolean

Пример кода

PolygonToLine, пример 1 (окно Python)

Пример скрипта окна Python для использования функции PolygonToLine в режиме прямого запуска.

import arcpy
arcpy.env.workspace = "C:/data"
arcpy.PolygonToLine_management("Habitat_Analysis.gdb/vegtype", 
                               "C:/output/Output.gdb/vegtype_lines",
                               "IGNORE_NEIGHBORS")
PolygonToLine, пример 2 (автономный скрипт)

Пример скрипта Python является простым примером выполнения функции PolygonToLine в автономном режиме.

# Name: PolygonToLine_Example2.py
# Description: Use PolygonToLine function to convert polygons to lines,
#              and report how many shared or overlapping boundary lines
#              were found.
# import system modules 
import arcpy
# Set environment settings
arcpy.env.workspace = "C:/data/landcovers.gdb"
 
# Create variables for the input and output feature classes
inFeatureClass = "bldgs"
outFeatureClass = "bldgs_lines"
 
# Run PolygonToLine to convert polygons to lines using default neighbor_option
arcpy.PolygonToLine_management(inFeatureClass, outFeatureClass)
# Select lines that have LEFT_FID values greater than -1
arcpy.MakeFeatureLayer_management(outFeatureClass, "selection_lyr", 
                                  "\"LEFT_FID\" > -1")
result = arcpy.GetCount_management("selection_lyr")
if result[0] == "0":
    print("No overlapping or shared boundary lines were found.")
else:
    print("{} overlapping or shared boundary lines were found.".format(result[0]))

Информация о лицензиях

  • Basic: Нет
  • Standard: Нет
  • Advanced: Да

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