Znalazłem to pytanie, próbując zrobić to, co uważam za to samo. Chciałem, żeby to wszystko było zrobione za pomocą arcpy. Korzystanie z referencji liniowych nie miało dla mnie sensu, ponieważ nie mam już zdarzeń punktowych (i nie mogłem wymyślić, jak użyć LR, aby je uzyskać). Sedno tego, co ostatecznie wykorzystałem, było
line = arcpy.Polyline(arrayPts)
pt = line.positionAlongLine (0.99, 'True')
Wymaga to Arc 10.1 lub nowszego; Nie byłem w stanie dowiedzieć się, czy był on dostępny poniżej poziomu licencjonowania ArcInfo, jaki posiadam (ArcView określony przez OP).
W powyższym przykładzie chciałem punktu nie w stałej odległości, ale o procent całkowitej długości linii. Aby to zrobić, podałem drugi opcjonalny argument positionAlongLine
. Pomiń drugi argument, jeśli chcesz tylko określić odległość bezwzględną. Oto dokument .
Pełniejszy przykładowy kod to
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'
to moja cecha Warstwa linii, na której chcę zlokalizować punkty. Działa dość szybko. NumPyArrayToFeatureClass
był bardzo fajnym sposobem na zrzucenie wszystkich moich punktów z powrotem do FeatureClass (podziękowania dla mojego kolegi Curtisa za tę część!). Eksperymentowałem z, Append_management
ale to było trochę wolniejsze.