Ich fand diese Frage beim Versuch, das zu tun, was ich für dasselbe halte. Ich wollte, dass alles über arcpy erledigt wird. Die Verwendung der linearen Referenzierung war für mich nicht sinnvoll, da ich die Punktereignisse noch nicht habe (und nicht herausfinden konnte, wie ich sie mit LR abrufen kann). Der Kern dessen, was ich letztendlich benutzte, war
line = arcpy.Polyline(arrayPts)
pt = line.positionAlongLine (0.99, 'True')
Dies erfordert Arc 10.1 oder höher. Ich konnte nicht herausfinden, ob dies unter der von mir angegebenen ArcInfo-Lizenzstufe (OP-spezifiziertes ArcView) verfügbar war.
In meinem obigen Beispiel wollte ich einen Punkt nicht in einem festen Abstand, sondern um einen Prozentsatz der gesamten Linienlänge. Dazu habe ich das zweite optionale Argument an geliefert positionAlongLine
. Sie überspringen das zweite Argument, wenn Sie nur einen absoluten Abstand angeben möchten. Hier ist das Dokument .
Das ausführlichere Codebeispiel ist
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'
ist meine FeatureLayer-Linie, auf der ich die Punkte lokalisieren möchte. Läuft ziemlich schnell. NumPyArrayToFeatureClass
war eine sehr schöne Möglichkeit, alle meine Punkte wieder in eine Feature-Klasse zu stecken (danke an meinen Kollegen Curtis für diesen Teil!). Hatte mit experimentiert, Append_management
aber das war ein bisschen langsamer.