¿Recuperar coordenadas de punto inicial y final con ArcPy? [cerrado]

9

¿Cómo recupero las coordenadas de inicio y fin con ArcPy para una clase de entidad de polilínea?

Espero pasar un identificador de segmento a una subrutina y hacer que devuelva las coordenadas de inicio y fin. El método de la Calculadora de campo no funciona para mí, porque necesito el valor para otros cálculos que no se pueden realizar dentro de él. (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 "centrado". El valor de la dirección depende de la distancia al "centro del condado".

Ivar Husa
fuente

Respuestas:

15

El proceso para esto parece haber cambiado entre ArcGIS 10.0 y 10.1. Incluiré una muestra para ambos.

Aquí está el documento de ayuda sobre la lectura de geometrías en 10.1 usando arcpy: Reading Geometries 10.1
Este documento discute los parámetros para un tipo de geometría de polilínea : Polyline (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: Reading Geometries 10.0
Este documento discute los parámetros para un objeto Geometry : Geometry

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 los dos radica básicamente en cómo acceder a la geometría de la entidad. Se han agregado algunos accesos directos en 10.1 para que sea más fácil llegar al objeto de geometría.

Consigue espacial
fuente
6

He hecho esto antes y prefiero usar un cursor de búsqueda y leer la geometría. Crea un bucle y le 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 ciclo le permite agregar algunos cálculos con él e ir forma por forma.

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

Cody Brown
fuente
1

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

dospeeder
fuente