13 votos

Consigue todos los puntos de una polilínea

Tengo algunos objetos con características de polilínea en pitón. Ahora quiero obtener todos los puntos de las polilíneas.

Por ejemplo, si una polilínea tiene un punto de inicio [0,0] punto final [5,5] . Resultado: [1,1];[2,2];[3,3];[4,4];[5,5] .

Quiero encontrar todos los puntos enteros de esa línea, incluyendo los puntos finales. Para la línea recta esto es muy simple, pero si la polilínea tiene los tipos de geometría de Curva de Beizer, Arco Circular, Arco Elíptico, entonces ¿cómo puedo hacerlo?

EDITAR:

Sólo puedo usar las herramientas que están disponibles en todas las versiones de ArcGIS, por ejemplo ArcView.

18voto

adwiv Puntos 146

Sé que esto es viejo, pero estaba buscando lo mismo que no tengo ArcInfo para el FeatureVerticesToPoints herramientas. Después de usar la solución del cursor de búsqueda de arriba, seguí adelante para simplificar el código y encontré que usando las matrices NumPy en el módulo de acceso a los datos se podía producir un guión simple y muy rápido. Estoy usando esto como una herramienta de guión.

Nota: La clave es la explode_to_points parámetro en arcpy.da.FeatureClassToNumPyArray

Espero que esto ayude a otros. Salud, Paul.

Aquí está el enlace a la ubicación del Repositorio ArcGIS: Clase de características a los puntos

# Feature Class to Points
# 
# Paul Smith (2012) paul@neoncs.com.au

# Imports
import arcpy
import numpy

#Inputs from user parameters
InFc  = arcpy.GetParameterAsText(0) # input feature class
OutFc = arcpy.GetParameterAsText(1) # output feature class

# Spatial reference of input feature class
SR = arcpy.Describe(InFc).spatialReference

# Create NumPy array from input feature class
array = arcpy.da.FeatureClassToNumPyArray(InFc,["SHAPE@XY"], spatial_reference=SR, explode_to_points=True)

# Check array and Exit if no features found
if array.size == 0:
    arcpy.AddError(InFc + " has no features.")

# Create a new points feature class
else:
    arcpy.da.NumPyArrayToFeatureClass(array, OutFc, ['SHAPE@XY'], SR)

5voto

Arda Xi Puntos 1099

Lo siguiente debería funcionar en polilíneas y polígonos:

import arcpy

infc = r"D:\Projects\GDBs\slowbutter.gdb\fc"

desc = arcpy.Describe(infc)
shapefieldname = desc.ShapeFieldName

rows = arcpy.SearchCursor(infc)
for row in rows:
    # Create the geometry object
    feat = row.getValue(shapefieldname)
    print "Feature %i: " % row.getValue(desc.OIDFieldName)
    partnum = 0
    # Step through each part of the feature
    for part in feat:
        print "Part %i: " % partnum
        part_list = []
        for pnt in feat.getPart(partnum):
            if pnt:
                # Add to list
                part_list.append([pnt.X, pnt.Y])
            else:
                # If pnt is None, this represents an interior ring
                print "Interior Ring:"
        partnum += 1  
        print part_list

Para algunos datos de carreteras del Reino Unido, tengo esto; una lista anidada de pares X,Y para cada vértice que compone la polilínea:

Feature 7: 
Part 0: 
[[-0.48053999999996222, 51.482510000000048], [-0.48032999999992398, 
51.482609000000082], [-0.48026999999996178, 51.48273800000004], 
[-0.48043999999993048, 51.482891000000052], [-0.48065999999994347, 51.482948000000079],
[-0.48123999999995704, 51.483009000000038]]

4voto

Simon Nickerson Puntos 17147

Según entendí, necesitas aumentar el número de vértices de tus características de polilínea. Y también transformar todos los segmentos de "Curva de Beizer, Arco Circular, Arco Elíptico" en varios segmentos de línea.

Para esta tarea en ArcGIS puedes usar Densificar (Editar) en ArcToolbox.

Entonces puedes convertir tus polilíneas vértices para señalar características como las sugeridas por Darren Cope y las obras de arte21.

Si prefieres hacerlo en ArcMap echa un vistazo a Creando nuevos puntos a lo largo de una línea tema de ayuda.

1voto

Hameno Puntos 129

Como ha sugerido Darren Cope, la conversión de su capa a vértices puntuales puede hacerse usando el Característica Vértices a los puntos herramienta.

Aquí está el código de la pitón recortado:

# import system modules 
import arcpy
from arcpy import env

# Set environment settings
env.workspace = "C:/data"

# Set local variables
inFeatures = "majorrds.shp"
outFeatureClass = "c:/output/output.gdb/majorrds_midpt"

# Execute FeatureVerticesToPoints
arcpy.FeatureVerticesToPoints_management(inFeatures, outFeatureClass, "MID")

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X