9 votos

Recuperación de coordenadas de puntos iniciales y finales con ArcPy?

¿Cómo recupero las coordenadas del punto inicial y final con ArcPy para una clase de característica polilínea?

Espero pasar un identificador de segmento a una subrutina y que ésta me devuelva las coordenadas de inicio y fin. El método de la calculadora de campo no me sirve, porque necesito el valor para otros cálculos que no se pueden realizar dentro de ella. (También prefiero no cambiar los datos para almacenar estas coordenadas como atributos). Estoy intentando calcular el rango de direcciones para un esquema de direccionamiento "center out". El valor de la dirección depende de la distancia al "centro del condado".

15voto

Free Wildebeest Puntos 1548

El proceso para esto parece haber cambiado entre ArcGIS 10.0 y 10.1. Voy a incluir una muestra para ambos.

Aquí está el documento de ayuda sobre la lectura de geometrías en 10.1 usando arcpy: Lectura de geometrías 10.1
Este documento trata de los parámetros de un tipo de geometría Polilínea: Polilínea (arcpy)

10.1

import arcpy

infc = arcpy.GetParameterAsText(0)

# Enter for loop for each feature
#
for row in arcpy.da.SearchCursor(infc, ["OID@", "SHAPE@"]):
    # Print the current line ID

    print("Feature {0}:".format(row[0]))

    #Set start point
    startpt = row[1].firstPoint

    #Set Start coordinates
    startx = startpt.X
    starty = startpt.Y

    #Set end point
    endpt = row[1].lastPoint

    #Set End coordinates
    endx = endpt.X
    endy = endpt.Y

10.0

Aquí está el documento de ayuda sobre la lectura de geometrías en 10.0 usando arcpy: Lectura de geometrías 10.0
Este documento trata de los parámetros de un objeto Geometría: Geometría

import arcpy

infc = arcpy.GetParameterAsText(0)

# Identify the geometry field
#
desc = arcpy.Describe(infc)
shapefieldname = desc.ShapeFieldName

# Create search cursor
#
rows = arcpy.SearchCursor(infc)

# Enter for loop for each feature/row
#
for row in rows:
    # Create the geometry object
    #
    feat = row.getValue(shapefieldname)

    # Print the current line ID
    #
    print "Feature %i:" % row.getValue(desc.OIDFieldName)

    #Set start point
    startpt = feat.firstPoint

    #Set Start coordinates
    startx = startpt.X
    starty = startpt.Y

    #Set end point
    endpt = feat.lastPoint

    #Set End coordinates
    endx = endpt.X
    endy = endpt.Y

La diferencia entre ambos radica básicamente en cómo se accede a la geometría de la característica. Se han añadido algunos atajos en 10.1 para facilitar el acceso al objeto geométrico.

6voto

CesarB Puntos 908

He hecho esto antes y prefiero usar un Cursor de Búsqueda y leer la geometría. Crea un bucle y te permite hacer cálculos en cada forma.

inFeatures = "Feature"
shapeName = arcpy.Describe (inFeatures).shapeFieldName
rows = arcpy.SearchCursor(inFeatures)
for row in rows:
    feat = row.getValue(shapeName)
    xy1 = feat.firstPoint
    xy2 = feat.lastPoint

Ese bucle te permite añadir algunos cálculos con él e ir forma por forma.

Hay una ayuda extra en la Ayuda: Trabajar con geometría en Python

1voto

romkyns Puntos 290

Debería poder utilizar las propiedades firstPoint y lastPoint del Polilínea objeto.

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