3 votos

Obtener coordenada del penúltimo vértice para python ArcGIS

Necesito obtener los atributos x e y del penúltimo vértice de cada segmento y añadirlos a la tabla de atributos utilizando Arcpy (o algún otro módulo python).
Para obtener la coordenada Y del primer vértice puedo utilizar !Shape.FirstPoint.Y!

arcpy.CalculateField_management(Flow_Paths, "Y_Cord_A", "!Shape.FirstPoint.Y!", "PYTHON_9.3", "")

En QGiS puedo simplemente llamar a Xat(-2) e Yat(-2) para obtener la penúltima coordenada, ¿existe un comando equivalente para ArcPy?

5voto

auramo Puntos 161

Algo como esto debería funcionar para usted en 10.0. El enlace anterior es para 10.1 arcpy.da cursores que son un poco diferentes.

rows = arcpy.SearchCursor(lyr)
for row in rows:
    geom = row.SHAPE
    for part in geom.getPart():
        for i, pnt in enumerate(part):
            if i == part.count - 2:
                print pnt.X, pnt.Y

Les Trabajar con geometría en Python de la ayuda de ArcGIS 10.0.

Actualización: Si desea almacenar esta coordenada en campos de la clase de característica, sólo tiene que cambiarla por una coordenada UpdateCursor y utilícelo como se describe en Acceso a los datos mediante cursores . Ejemplo:

rows = arcpy.UpdateCursor(lyr)
for row in rows:
    geom = row.SHAPE
    for part in geom.getPart():
        for i, pnt in enumerate(part):
            if i == part.count - 2:
                row.X = pnt.X
                row.Y = pnt.Y
                rows.updateRow(row)

Tenga en cuenta que esto sólo tiene sentido con funciones de una sola parte. Si sus líneas tienen múltiples partes, sólo la última parte obtendrá los valores actualizados, por ejemplo, el último en victorias.

2voto

Hameno Puntos 129

Este fragmento le ayudará a obtener las coordenadas de los vértices:

Lectura de geometrías de polilíneas o polígonos Búsqueda del cursor en un polígono o clase de característica lineal

import arcpy

infc = arcpy.GetParameterAsText(0)

# Enter for loop for each feature
#
for row in arcpy.da.SearchCursor(infc, ["OID@", "SHAPE@"]):
    # Print the current multipoint's ID
    #
    print("Feature {0}:".format(row[0]))
    partnum = 0

    # Step through each part of the feature
    #
    for part in row[1]:
        # Print the part number
        #
        print("Part {0}:".format(partnum))

        # Step through each vertex in the feature
        #
        for pnt in part:
            if pnt:
                # Print x,y coordinates of current point
                #
                print("{0}, {1}".format(pnt.X, pnt.Y))
            else:
                # If pnt is None, this represents an interior ring
                #
                print("Interior Ring:")
        partnum += 1

http://resources.arcgis.com/en/help/main/10.1/index.html#//002z0000001t000000

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