Saya ingin memotong satu set polyline (garis hitam pada gambar di bawah) ke batas luar poligon. Setiap rongga dalam poligon harus diabaikan. Output ideal saya adalah garis kuning putus-putus. Garis awal mungkin lurus atau tidak. Gambar adalah contoh yang disederhanakan, pada kenyataannya poligon jauh lebih kompleks dan ada ratusan garis. Saya tidak berpikir cangkang cembung akan bekerja (tapi saya mungkin salah). Saya terbuka untuk solusi dalam arcgis, qgis, arcpy, rupawan, dll. Pengkodean sebaiknya dalam python oleh saya terbuka untuk opsi lain jika perlu. Arcgis juga akan lebih disukai untuk membuatnya lebih mudah bagi rekan kerja saya untuk berbagi alat tetapi bukan keharusan.
Yang terbaik yang dapat saya pikirkan saat ini adalah memotong garis individual dengan poligon yang menciptakan satu set titik di semua persimpangan batas. Urutkan titik menurut jarak ke awal garis. Poin terjauh dan terdekat (FAC) akan menjadi batas luar poligon. Kemudian gunakan titik FAC untuk memilih simpul yang tepat dari garis asli dan membuat garis putus-putus kuning dari titik yang sesuai. Seharusnya bekerja tetapi tampaknya lebih rumit dari yang diperlukan.
Beberapa pemikiran tambahan:
- Garis linier "cukup" sehingga perhitungan jarak sederhana antara titik harus bekerja, referensi linear tidak perlu.
- Ini akan mudah di arcpy jika ada alat untuk membagi garis pada suatu titik tetapi saya tidak dapat menemukannya.
Pikiran siapa pun?
sumber
Jawaban:
Saya ingin memasukkan solusi pyQGIS saya, tidak ada yang lain.
Kasing pengujian saya - sebelum kliping:
Setelah kliping:
Untuk mendapatkan set lengkap atribut dari garis asli saya pikir itu akan menjadi yang terbaik untuk bergabung dengan mereka dengan hasilnya. Kalau tidak, harus dibuat di bagian persiapan, dan diatur dalam loop paling dalam. Tetapi saya belum menguji apakah mereka lulus proses pembubaran atau jika mereka tersesat, karena pada prinsipnya mereka dapat memiliki nilai yang berbeda.
sumber
Jika Anda menjalankan Integrasi dengan poligon dan garis sebagai input, itu akan menambahkan simpul ke masing-masing di mana mereka berpotongan. (Hati-hati, ketika Integrasi memodifikasi input alih-alih menghasilkan output baru.)
Setelah Anda yakin ada simpul yang bertepatan, Anda dapat beralih dari simpul garis dan uji untuk melihat apakah masing-masing menyentuh fitur lainnya. Dari daftar simpul yang diurutkan yang melakukan sentuhan, ambil nilai minimum dan maksimum dari set. Kemudian, buat dua baris dari setiap fitur, A: (mulai, ..., mnt) dan B: (maks, ..., akhir).
Pilihan lain, meskipun saya tidak yakin apakah ArcPy mempertahankan urutan bagian fitur berdasarkan urutan simpul pada objek input, akan menjalankan klip apa adanya. Untuk garis tengah dalam contoh Anda, itu harus menghasilkan fitur multi bagian dengan tiga bagian. Bergantung pada pemesanan, Anda dapat beralih di setiap baris multi-bagian yang diproduksi oleh Clip dan menghapus semua kecuali bagian pertama dan terakhir dari fitur multi-bagian.
sumber
Ada tiga masalah yang harus dihadapi dalam kasus ini:
Lubang
Karena setiap garis di dalam lubang akan dipertahankan, lepaskan lubang dari poligon. Dalam skrip di bawah ini saya melakukannya dengan menggunakan kursor dan geometri.
Garis antara poligon
Garis yang menyentuh dua poligon harus dilepas. Dalam skrip di bawah ini saya melakukannya dengan melakukan join spasial
one to many
, dengan baris saya sebagai kelas fitur input saya dan poligon saya sebagai kelas fitur join saya. Setiap baris yang dihasilkan dua kali menyentuh dua poligon dan dihapus.Garis akhir
Untuk menghapus garis yang hanya menyentuh poligon di satu ujung, saya mengonversi garis ke titik akhir. Saya kemudian menggunakan lapisan fitur dan pilihan untuk menentukan titik akhir mana yang floaters. Saya memilih titik akhir yang memotong poligon. Saya kemudian mengalihkan pilihan saya. Ini memilih titik akhir yang tidak memotong poligon. Saya memilih garis yang memotong titik-titik yang dipilih ini dan menghapusnya.
Hasil
Asumsi
erase
dan afeature vertices to points
)Naskah
Skrip di bawah ini menampilkan kelas fitur dengan nama kelas fitur baris Anda plus
_GreedyClip
, dalam geodatabase yang sama dengan kelas fitur baris Anda. Lokasi ruang kerja juga dibutuhkan.sumber