Encontré esta pregunta tratando de hacer lo que creo que es lo mismo. Quería que todo se hiciera a través de arcpy. El uso de referencia lineal no tenía sentido para mí porque aún no tengo los eventos puntuales (y no pude descubrir cómo usar LR para obtenerlos). El quid de lo que terminé usando fue
line = arcpy.Polyline(arrayPts)
pt = line.positionAlongLine (0.99, 'True')
Esto requiere Arc 10.1 o superior; No pude averiguar si esto estaba disponible por debajo del nivel de licencia de ArcInfo que tengo (OP especificó ArcView).
En mi ejemplo anterior, quería un punto no a una distancia fija, sino en un porcentaje de la longitud total de la línea. Para hacer esto, proporcioné el segundo argumento opcional para positionAlongLine
. Omite el segundo argumento si solo desea especificar una distancia absoluta. Aquí está el documento .
El código de muestra más completo es
import numpy
ptsList = list()
id = 0
with arcpy.da.SearchCursor('flFL', ["SHAPE@"]) as cursor:
for row in cursor:
arrayPts = row[0].getPart()
line = arcpy.Polyline(arrayPts)
pt = line.positionAlongLine (0.99, 'True')
ptsList.append((id, (pt.getPart().X, pt.getPart().Y)))
id += 1
array = numpy.array([ptsList], \
numpy.dtype([('idfield',numpy.int32),('XY', '<f8', 2)]))
SR = arcpy.Describe("flFL").spatialReference
arcpy.da.NumPyArrayToFeatureClass(array, 'nsegSamplePts', ['XY'], SR)
'flFL'
es mi característica Capa de líneas en la que quiero ubicar los puntos. Corre bastante rápido. NumPyArrayToFeatureClass
fue una forma muy agradable de volcar todos mis puntos en una clase de función (¡gracias a mi colega Curtis por esa parte!). Había estado experimentando w / Append_management
pero eso fue un poco más lento.