Saya menemukan pertanyaan ini mencoba melakukan apa yang saya pikir adalah hal yang sama. Saya ingin semuanya dilakukan melalui arcpy. Menggunakan Linear Referencing tidak masuk akal bagi saya karena saya belum memiliki poin acara (dan saya tidak tahu cara menggunakan LR untuk mendapatkannya). Inti dari apa yang akhirnya saya gunakan adalah
line = arcpy.Polyline(arrayPts)
pt = line.positionAlongLine (0.99, 'True')
Ini membutuhkan Arc 10.1 atau lebih tinggi; Saya tidak dapat mengetahui apakah ini tersedia di bawah tingkat lisensi ArcInfo yang saya miliki (OP ArcView tertentu).
Dalam contoh saya di atas, saya ingin sebuah titik tidak pada jarak tetap, tetapi dengan persentase dari keseluruhan panjang garis. Untuk melakukan ini, saya memberikan argumen opsional kedua ke positionAlongLine
. Anda melewatkan argumen kedua jika Anda hanya ingin menentukan jarak absolut. Ini dok .
Sampel kode yang lebih lengkap adalah
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'
adalah featureLayer saya di mana saya ingin mencari titik. Berjalan cukup cepat. NumPyArrayToFeatureClass
adalah cara yang sangat bagus untuk membuang semua poin saya kembali ke featureClass (terima kasih kepada rekan saya Curtis untuk bagian itu!). Telah bereksperimen dengan Append_management
tetapi itu agak lebih lambat.