3 votos

¿Cómo calcular la longitud de la trayectoria de cada punto desde el inicio utilizando arcpy?

Como se muestra en la imagen de abajo me gustaría calcular la longitud del camino de cada punto desde el inicio. Puede alguien darme ayuda para escribir esto en python para ArcGIS?

Example

4voto

Alex Tereshenkov Puntos 13433

Entonces, tienes una clase de característica de punto. Cada punto tiene un atributo único que representa la secuencia (por ejemplo, de 1 a 100).

Usted quiere obtener un punto con PointID = 1, encontrar una distancia al punto con PointID = 2, y escribir este valor de distancia en el campo Distancia en la clase de característica (el campo Distancia para la característica PointID2 contendrá la distancia desde PointID1 a PointID2).

Esta solución funcionaría para la licencia básica.

import arcpy

fc = r"C:\ArcGIS\Default.gdb\_PointDistanceFc"

features = [f for f in arcpy.da.SearchCursor(fc,("PointID","SHAPE@"),
                                             sql_clause=(None,"ORDER BY PointID"))]

index = 1
length = 0
update_values = [(0,0)]

for f in features:
    if index < len(features):
        length += f[1].distanceTo(features[index][1])
        index += 1
        update_values.append((f[0],length))
    else:
        pass

with arcpy.da.UpdateCursor(fc,("Distance","PointID"),sql_clause=(None,"ORDER BY PointID")) as upd_cur:
    index = 0
    for row in upd_cur:
        row[0] = update_values[index][1]
        upd_cur.updateRow(row)
        index += 1

El UpdateCursor escribirá el valor de la longitud en el campo. Es importante ordenar las características de los puntos en la secuencia con la que se quiere calcular la longitud (no se puede confiar en el OID ya que éste puede no coincidir con el orden de creación de las características). Aquí está el resultado de la muestra:

enter image description here

3voto

Muxa Puntos 2425

He creado una herramienta que realiza esta medición. Esta herramienta sólo necesita tres parámetros: Sólo tiene que descargar el Measure_Length.tbx y localizarlo en el ArcCatalog y ejecutarlo. script

  1. Característica del punto de entrada
  2. Único (en la tabla de atributos)
  3. Un campo que será rellenado por este script, el tipo de datos para este campo debe ser doble

Por favor, encuentre la herramienta en el github en aquí .

OH SÍ LOS CRÉDITOS VAN PARA ALEX

0voto

user53412 Puntos 1

Gracias ->SIslam, Su código es muy útil. Entonces traté de revisar el código para que se ajuste a mi proceso, la revisión como a continuación: import arcpy from arcpy import env

env.workspace="C:/Temp/test0608/"
Pnt_move="C:/Temp/test0608/Pnt_move.shp"
curS = arcpy.da.SearchCursor(Pnt_move,["OID@","SHAPE@"])
counter = 0
for i in curS:
    print "OID is: {0}".format(i[0])
    counter+= i[1].length
    print counter

Pero no funciona correctamente al igual que la muestra pic abajo, u puede ver la longitud de todos es 0,0.

enter image description here

Los datos del punto original tienen más de 4000 puntos como la imagen de abajo. enter image description here

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