J'ai trouvé cette question en essayant de faire ce que je pense est la même chose. Je voulais que tout se fasse via arcpy. L'utilisation du référencement linéaire n'avait pas de sens pour moi car je n'ai pas déjà les événements ponctuels (et je ne pouvais pas comprendre comment utiliser LR pour les obtenir). Le nœud de ce que j'ai fini par utiliser était
line = arcpy.Polyline(arrayPts)
pt = line.positionAlongLine (0.99, 'True')
Cela nécessite Arc 10.1 ou supérieur; Je n'ai pas pu déterminer si cela était disponible en dessous du niveau de licence ArcInfo que j'ai (ArcView spécifié par OP).
Dans mon exemple ci-dessus, je voulais un point non pas à une distance fixe, mais par un pourcentage de la longueur totale de la ligne. Pour ce faire, j'ai fourni le deuxième argument facultatif à positionAlongLine
. Vous sautez le deuxième argument si vous voulez simplement spécifier une distance absolue. Voici le doc .
L'exemple de code plus complet est
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'
est ma fonctionCouche de lignes sur laquelle je veux localiser les points. Fonctionne assez rapidement. NumPyArrayToFeatureClass
était un très bon moyen de sauvegarder tous mes points dans une fonctionClasse (merci à mon collègue Curtis pour cette partie!). Avait expérimenté avec Append_management
mais c'était un peu plus lent.