Saya memiliki serangkaian fitur garis di dalam batas poligon tertentu. Untuk setiap baris, saya ingin membuat poligon di dalamnya yang memungkinkan setiap titik lebih dekat ke garis yang diberikan daripada garis lain di lapisan. Saya sudah melakukan ini di masa lalu untuk fitur input titik menggunakan triangulasi Delaunay, tetapi jika ada proses serupa untuk melakukannya dengan fitur garis saya belum dapat menemukannya.
ETA: Solusi Geogeek telah terlintas di benak saya, tetapi di bagian yang lebih lurus di mana garis input memiliki lebih sedikit simpul, poligon yang dihasilkan terlalu dekat (bahkan tumpang tindih) garis yang tidak seharusnya. Di sini, garis merah adalah input saya, Anda dapat melihat simpul dan poligon Thiessen yang dihasilkan dari mereka.
Mungkin solusi yang cepat dan (sangat) kotor adalah mengubah setiap baris menjadi sekumpulan banyak titik yang berjarak sama (bukan hanya simpul garis), buat poligon Thiessen dari itu, kemudian bubarkan berdasarkan pada ID garis asal.
Jawaban:
Untuk menggambarkan solusi pemrosesan raster / gambar, saya mulai dengan gambar yang diposting. Kualitasnya jauh lebih rendah daripada data asli, karena superposisi titik biru, garis abu-abu, daerah berwarna, dan teks; dan penebalan garis merah asli. Karena itu ia menghadirkan tantangan: namun, kami masih bisa mendapatkan sel Voronoi dengan akurasi tinggi.
Saya mengekstrak bagian yang terlihat dari fitur linear merah dengan mengurangi hijau dari saluran merah dan kemudian melebarkan dan mengikis bagian paling terang dengan tiga piksel. Ini digunakan sebagai dasar untuk perhitungan jarak Euclidean:
(Semua kode yang ditampilkan di sini adalah Mathematica 8.)
Mengidentifikasi "punggungan" yang jelas - yang harus mencakup semua titik yang memisahkan dua sel Voronoi yang berdekatan - dan menggabungkannya kembali dengan lapisan garis memberikan sebagian besar dari apa yang perlu kita lakukan:
Pita merah melambangkan apa yang saya bisa selamatkan dari garis itu dan pita cyan menunjukkan garis punggungan dalam transformasi jarak. (Masih ada banyak sampah karena jeda pada garis asli itu sendiri.) Punggungan ini perlu dibersihkan dan ditutup melalui pelebaran lebih lanjut - dua piksel akan dilakukan - dan kemudian kita dapat mengidentifikasi daerah terhubung yang ditentukan oleh garis asli dan punggung bukit di antara mereka (beberapa di antaranya perlu secara eksplisit untuk digabungkan kembali):
Apa yang telah dicapai ini, pada dasarnya, adalah mengidentifikasi lima fitur linear yang berorientasi . Kita dapat melihat tiga fitur linear terpisah yang berasal dari titik pertemuan. Masing-masing memiliki dua sisi. Saya telah mempertimbangkan sisi kanan dari dua fitur paling kanan sebagai sama, tetapi sebaliknya membedakan semuanya, memberikan lima fitur. Area berwarna menunjukkan diagram Voronoi dari lima fitur ini.
Perintah Alokasi Euclidean berdasarkan pada lapisan yang membedakan tiga fitur linier (yang saya tidak punya untuk ilustrasi ini) tidak akan membedakan sisi yang berbeda dari setiap fitur linier, sehingga akan menggabungkan wilayah hijau dan oranye yang mengapit garis paling kiri ; itu akan membagi fitur teal paling kanan menjadi dua; dan itu akan menggabungkan potongan-potongan itu dengan fitur krem dan magenta yang sesuai di sisi mereka yang lain.
Jelaslah, pendekatan raster ini memiliki kekuatan untuk membangun tessellations Voronoi fitur yang sewenang-wenang - titik, potongan linear, dan bahkan poligon, terlepas dari bentuknya - dan dapat membedakan sisi fitur linear.
sumber
Saya pikir kamu bisa:
Saya harap saya benar-benar memahami pertanyaan Anda, jika tidak dapatkah Anda memberikan gambar untuk menjelaskan lebih banyak kebutuhan Anda.
sumber