Polígono a línea (Administración de datos)

Resumen

Crea una clase de entidad que contiene líneas convertidas a partir de límites de polígonos con o sin consideración de los polígonos adyacentes.

Ilustración

Ilustración de Polígono a línea

Uso

  • Si la casilla de verificación Identificar y guardar la información de adyacencia de polígonos está activada (neighbor_option con el valor IDENTIFY_NEIGHBORS en Python), se analiza la relación de adyacencia de polígonos. Como se ilustra arriba, los límites se convierten en líneas, tomando en cuenta los segmentos comunes o que se cruzan; se agregan dos nuevos campos, LEFT_FID y RIGHT_FID, a la clase de entidad de salida y en ellos se almacenan los Id. de entidad de los polígonos de entrada existentes a la izquierda y la derecha de cada línea de salida. Los atributos de las entidades de entrada no se mantendrán en la clase de entidad de salida. Las siguientes situaciones le ayudarán a comprender con más detalle el proceso y la salida:

    • En una geometría de polígono, el límite exterior se almacena siempre en el sentido de las agujas del reloj. Si el polígono tiene un agujero, el límite del agujero (o interior) siempre se almacena en el sentido contrario a las agujas del reloj. Por tanto, para un polígono sin ningún vecino a la izquierda (fuera) de este límite exterior ni a la izquierda (dentro) del límite del orificio, las líneas resultantes tendrán el valor -1 para LEFT_FID y el Id. de entidad poligonal como RIGHT_FID.
    • Si un polígono contiene otro polígono, se genera una línea de salida en el sentido de las agujas del reloj para representar el límite compartido, su LEFT_FID contiene el Id. de la entidad poligonal exterior y RIGHT_FID contiene el Id. de la entidad poligonal interior.
    • Si dos polígonos comparten una parte de sus límites, se generará una línea de salida que representará el segmento compartido. El sentido de la línea será arbitrario; LEFT_FID y RIGHT_FID reciben los Id. de las entidades poligonales izquierda o derecha, según corresponda.
    • Si un polígono se superpone con otro polígono, se generan dos líneas de salida que representan dos veces a cada límite que se cruza: la primera línea representa el límite exterior de uno de los polígonos superpuestos; por tanto, su LEFT_FID es el Id. de entidad del polígono que cruza y su RIGHT_FID será su propio Id. de entidad poligonal; la segunda línea estará en el sentido opuesto, dividiendo así el otro polígono; por tanto, sus valores LEFT_FID y RIGHT_FID serán los mismos que los del otro Id. de entidad poligonal.
    • Los multipartes de los polígonos de entrada no se mantienen; todas las líneas de salida son de parte simple.

    En el caso de las entidades de entrada de curva paramétrica (verdadera), las líneas de salida siguen siendo curvas verdaderas, incluso si se dividen. Esto no se aplica a los datos de shapefile.

    Esta opción utiliza un proceso de ordenamiento en teselas para controlar datasets muy grandes, a fin de mejorar el rendimiento y la escalabilidad. Para más información, consulte Procesamiento en mosaico de datasets grandes.

  • Si la casilla de verificación Identificar y guardar la información de adyacencia de polígonos está desactivada (neighbor_option con el valor IGNORE_NEIGHBORS en Python), se omite la relación de adyacencia de polígonos. Cada límite de polígono de entrada se escribirá como una entidad de línea encerrada. Un polígono multiparte se convertirá en una línea multiparte en la salida. Los atributos de las entidades de entrada se mantendrán en la clase de entidad de salida. Se agrega a la salida un nuevo campo, ORIG_FID, que contiene los Id. de entidad de entrada de cada línea.

Sintaxis

arcpy.management.PolygonToLine(in_features, out_feature_class, {neighbor_option})
ParámetroExplicaciónTipo de datos
in_features

Las entidades de entrada que deben ser polígonos.

Feature Layer
out_feature_class

La clase de entidad de línea de salida.

Feature Class
neighbor_option
(Opcional)

Especifica si se debe identificar y almacenar la información de adyacencia del polígono.

  • IDENTIFY_NEIGHBORSLa relación de polígono adyacente se identificará y se almacenará en la salida. Si se comparten los límites entre los distintos segmentos de un polígono y otros polígonos distintos, el límite se dividirá de forma tal que cada segmento que esté compartido en forma única se convertirá en una línea con sus dos Id. de entidad (FID) de polígonos adyacentes almacenados en la salida. Esta es la opción predeterminada.
  • IGNORE_NEIGHBORSSe ignorarán las relaciones de polígonos adyacentes; cada límite de polígono se convertirá en una entidad de línea con el Id. de identidad de polígono original almacenado en la salida.
Boolean

Muestra de código

Ejemplo 1 de PolygonToLine (ventana de Python)

El siguiente script de la ventana de Python demuestra cómo utilizar la función PolygonToLine en modo inmediato.

import arcpy
arcpy.env.workspace = "C:/data"
arcpy.PolygonToLine_management("Habitat_Analysis.gdb/vegtype", 
                               "C:/output/Output.gdb/vegtype_lines",
                               "IGNORE_NEIGHBORS")
Ejemplo 2 de PolygonToLine (script independiente)

El siguiente script independiente es un ejemplo simple de cómo aplicar la función PolygonToLine en un entorno de scripts.

# 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]))

Información de licenciamiento

  • Basic: No
  • Standard: No
  • Advanced: Sí

Temas relacionados