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?
Respuestas
¿Demasiados anuncios?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:
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.
- Característica del punto de entrada
- Único (en la tabla de atributos)
- 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
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.
Los datos del punto original tienen más de 4000 puntos como la imagen de abajo.