Saya memiliki dua lapisan vektor, yang satu adalah lapisan titik berdasarkan "peristiwa" dengan penginderaan jauh dan yang kedua adalah lapisan garis dari penelitian lokal.
Dalam kasus saya ini adalah gempa bumi dan kesalahan tektonik, tapi saya kira kita bisa memilih "kecelakaan mobil dan jalan" sebagai contoh umum.
Jadi yang ingin saya lakukan adalah memindahkan / menyalin titik ke titik terdekat dari garis, selama itu dalam jarak toleransi (katakanlah 1-2km atau 0,0xx °), dengan layer titik baru (+ attr dipindahkan y / n).
Ada ide?
Linux, QGIS 1.8
Jawaban:
Diposting potongan kode (diuji dalam konsol python) yang melakukan hal di bawah ini
Sunting: Baru saja menemukan bahwa metode @radouxju menggunakan terdekatSegmentWithContext memberikan hasil yang sama dalam lebih sedikit baris kode. Saya bertanya-tanya mengapa mereka datang dengan nama metode yang aneh ini? seharusnya sesuatu yang terdekat denganPointOnGeometry.
Jadi kita bisa menghindari bentuk dan melakukan suka,
sumber
di sini adalah pseudo-code untuk memulai. Saya harap ini membantu dan seseorang akan punya waktu untuk memberikan kode lengkap (saya tidak punya saat ini)
Hal pertama yang harus dilakukan adalah mengulang pada titik dan memilih garis yang berada dalam jarak ambang batas untuk setiap titik. Ini dapat dilakukan dengan QgsSpatialIndex
Dalam loop pertama, hal kedua yang harus dilakukan adalah loop pada garis yang dipilih dan menemukan titik terdekat pada garis. Ini dapat dilakukan langsung berdasarkan QgsGeometry :: terdekatSegmentWithContext
langkah ketiga (dalam loop pertama) akan terdiri dalam memperbarui geometri titik dengan geometri minDistPoint dengan jarak terkecil
perbarui dengan beberapa kode (pada QGIS3)
sumber