Saya memiliki aplikasi tempat pengguna menggambar jalur (serangkaian garis lurus yang terhubung) dan jalur ini mungkin tidak memotong fitur apa pun di lapisan GeoJSON tertentu.
Saya perlu memeriksa bahwa tidak ada titik di sepanjang garis ini memotong lapisan GeoJSON, bukan hanya titik akhir.
Bagaimana saya bisa melakukan pemeriksaan ini?
Jawaban:
Anda dapat mencoba pustaka Turf dan metode seperti intersect: http://turfjs.org/docs/#intersect
Berikut contoh kode dari perpustakaan itu:
sumber
EDIT: Lihat biola ghybs dari komentar di atas untuk solusi yang lebih sederhana dan lebih baik menggunakan turf.js. Jawaban asli berikut:
Berikut ini adalah versi modifikasi dari persimpangan rutin dari pustaka geojson-js-utils yang mengambil GeoJSON linestrings sebagai input dan menghasilkan poin GeoJSON dari persimpangan mereka sebagai output:
Modifikasi diperlukan karena fungsi asli menghitung persimpangan dari lintang dan bujur saja, seolah-olah mereka hanya koordinat pada pesawat, menghasilkan hasil yang tidak akurat (terutama di lintang tinggi atau jarak jauh). Menggunakan
L.Projection
untuk mengkonversi ke sistem koordinat yang diproyeksikan konformal (atau, dalam hal ini, hampir konformal ) selama perhitungan perbaikan ini.Orang bisa memodifikasinya lebih jauh untuk menerima objek geometri Leaflet bukan hanya LineStrings, tetapi sebaliknya saya menggunakan fungsi yang agak sulit ini untuk membuat LineStrings untuk diteruskan ke fungsi persimpangan:
dan fungsi ini untuk mengambil objek Leaflet, mengkonversikannya ke LineStrings dan memeriksa persimpangan:
Berikut ini contoh biola yang menggunakan ini dengan Leaflet.draw:
http://fiddle.jshell.net/nathansnider/egzxw86h/
Ketika Anda selesai menggambar objek, itu akan menempatkan penanda pada peta di titik-titik di mana objek yang digambar bersinggungan dengan geometri dasar. Ia tidak dapat memeriksa persimpangan saat jalan masih digambar, karena Leaflet.draw tidak memberi kami penangan acara untuk digunakan saat gambar masih berlangsung. Akan diperiksa segera setelah acara pengundian selesai.
Perhatikan juga bahwa ini tidak akan mendeteksi persimpangan untuk jalur yang seluruhnya berada dalam poligon yang sedang diperiksa. Anda dapat melakukan pemeriksaan tersebut menggunakan turf.js (mungkin menggabungkan turf.explode dengan turf.within ).
sumber