Saya gagal menemukan "nama" algoritme yang memungkinkan seseorang mengonversi garis menjadi poligon. Karena masalah ini melintasi SIG dan bidang geometri komputasi dan ilmu komputer. Saya tidak yakin apa lagi yang harus ditambahkan ke dalam campuran. Saya enggan memberikan daftar apa yang telah saya cari karena saya juga ingin tahu apa yang orang lain akan pertimbangkan sebagai pilihan pertama kriteria pencarian mereka.
Skenario ... Saya memiliki garis (dua poin diperlukan untuk membangun garis) ... setiap baris terhubung ke setidaknya satu baris lainnya. Ruang intervening antara garis yang terhubung akan membentuk poligon. Skenario paling sederhana adalah segitiga ... persegi panjang ... dan seseorang dapat beralih ke fitur multi-segmen.
Maaf untuk deskripsi yang tidak jelas, tetapi seperti yang saya katakan, saya tidak ingin memandu solusi yang mungkin turun jalan yang telah saya kunjungi, karena saya tertarik pada "pikiran pertama" sebanyak solusi akhir.
sumber
Jawaban:
Mungkin "area isi"? Lihat di sini dan di sini .
Edit
Kemungkinan lain adalah triangulasi terkendala . (Tautan ke applet Java yang memungkinkan Anda menggambar grafik dengan mouse dan mengilustrasikan algoritma bidang-menyapu untuk melakukan triangulasi.) Hasil dari triangulasi semacam itu, tidak peduli bagaimana itu dilakukan, dapat dengan mudah diproses untuk buat poligon yang diinginkan: gabungkan semua segitiga tetangga yang berbagi tepi yang baru dibuat.
Contoh
Grafik asli:
Grafik triangulasi:
sumber
Dalam teori grafik , operasi ini disebut komputasi wajah . Ini terkait dengan perhitungan dual dari grafik yang diberikan.
Misalnya, di perpustakaan java GeOxygène , grafik (disebut CarteTopo ) memiliki metode getFaces untuk mengambil wajahnya .
Ini disebut poligonisasi di JTS
sumber
Perangkat lunak host RepRap mengubah daftar segmen garis (dalam beberapa urutan acak yang tidak diketahui) menjadi daftar poligon, yang terdengar mirip dengan apa yang Anda coba lakukan.
Secara khusus, algoritma "pencocokan akhir" RepRap menangani banyak kasus patologis.
Sayangnya, perangkat lunak RepRap mengasumsikan bahwa setiap sudut memiliki jumlah tepi yang merata - 2 garis menuju sudut pada objek normal; 4 baris berjalan bersama ketika sudut dari satu objek menyentuh sudut dari objek lain, dll. Saya tidak tahu betapa sulitnya untuk mengadaptasi algoritma ini untuk menangani diagram voronoi, yang biasanya memiliki 3 tepi menuju ke setiap sudut.
sumber
Sudahkah Anda menjelajahi basis kode GRASS untuk solusi masalah Anda? -> http://old.nabble.com/Polyline-to-Polygon-operation-td20257839.html
sumber
main.c
dalamv.type
sumber, semua yang terjadi adalah bahwa fitur yang re-label sebagai batas: tidak ada proses yang sebenarnya terjadi. Dalam retrospeksi ini tidak terlalu mengejutkan: jika (saya tidak tahu pasti) fitur dipertahankan dengan informasi topologi 2D penuh, maka semua perhitungan untuk mengidentifikasi daerah poligonal secara otomatis terjadi selama pembuatan atau impor fitur dan dipertahankan sepanjang semua operasi geoproses.Halo
Saya tidak berpikir apa yang Anda cari adalah algoritma tertentu. Tugasnya bisa sangat sulit atau sangat sederhana tergantung pada dataset Anda.
Anda harus membagi masalah dalam setidaknya 2 bagian. 1) lebih merupakan masalah jaringan, bagaimana menemukan cincin tertutup dari linestrings. 2) mengekspresikan linestring tertutup sebagai poligon
Bagian kedua, yaitu "mengubah garis menjadi poligon" lebih tergantung pada format daripada representasi poligon / linestring. Maksud saya pergi dari:
LINESTRING (1 1, 2 2)
LINESTRING (2 2, 2 1)
LINESTRING (2 1, 1 1)
ke:
POLYGON ((1 1,2 2,2 1,1 1))
mengkonversi baris ke poligon, tetapi bukan itu yang Anda bicarakan, saya kira. Bagian yang lebih sulit adalah yang pertama. Jika Anda memiliki spageti garis, cara memesannya sebagai linestrings tertutup.
Saya kira jawaban untuk pertanyaan itu banyak bergantung pada dataset. Seperti yang ditanyakan Kirk, jika garis-garis itu bisa melewati masalah, jauh lebih besar. Jika Anda tahu bahwa semua "koleksi garis" adalah bagian dari linestring tertutup, semakin mudah. Kemudian Anda dapat mengambil garis apa pun dan berjalan di sekitar jalan sampai Anda kembali lagi dan kemudian melanjutkan ke langkah dua di atas.
Maksud saya adalah bahwa kondisi dataset menetapkan semua aturan tentang cara melakukannya. Jika Anda ingin menemukan semua kemungkinan poligon dalam spaghetti dari linestrings, saya berasumsi akan ada banyak algoritma yang berbeda yang terlibat untuk menempatkan titik titik di semua persimpangan, mencari semua jalur yang mungkin dan sebagainya.
Dalam PostGIS fungsi ini disebut ST_Polygonize Fungsi itu menciptakan semua kemungkinan poligon dari linestrings yang Anda berikan.
Itu dilakukan oleh GEOS sehingga Anda dapat menemukan algoritma di belakang di kedua kode GEOS dan JTS.
Hanya beberapa pemikiran
/ Nicklas
sumber
Anda dapat mencoba mencari algoritma "Forward Star". Saya telah diberitahu bahwa ini adalah generik, tetapi satu-satunya diskusi tentang hal itu yang pernah saya baca selalu mengacu pada arcgis. Mungkin lihat referensi yang dikutip dalam catatan kuliah ini untuk bintang depan.
sumber