Secara teoritis dimungkinkan untuk mendapatkan poligon blok kota (blok kota) dari jalan, ketika jalan diwakili oleh poros jalan ( LineStrings ).
Blok perkotaan dibatasi oleh jalan, sehingga ruas jalan dapat digunakan untuk membentuk poligon yang hanya berisi satu blok di ... Lihat ilustrasi.
Ada skrip (SQL) PostGIS 2.X untuk melakukan ini? Perangkat lunak plugin?
PS: perkiraan geometri blok kota sudah cukup.
Ilustrasi
Mulai proses dari "jala segmen jalur yang terhubung", dapat berupa: 1) mendapatkan poligon terkait; 2) mengisolasi poligon dengan buffer negatif dan pengurangan buffer garis.
Contoh: poligon 262 (mewakili blok kota) berasal dari segmen 2496, 2494, 2369, 1513, ... Dan poligon tetangga 263 dapat menggunakan beberapa segmen umum, tetapi selanjutnya (dengan st_buffer negatif atau operasi lain) akan menjadi poligon benar-benar terisolasi, jadi, presisi rendah sudah cukup.
(EDIT)
Saya pikir kita dapat menerjemahkan masalah khusus ini menjadi masalah yang lebih umum: rangkaian segmen jalan dapat dipandang sebagai semacam penghentian , yaitu segmen yang membagi pesawat menjadi wilayah yang bersebelahan - blok-blok perkotaan terletak di bagian dalam daerah. Setiap segmen adalah sisi dari dua wilayah.
Masalah utama adalah untuk mengubah "set segmen tessellation" menjadi poligon independen .
sumber
Jawaban:
The
ST_Polygonize
agregat dalam PostGIS akan mengembalikangeometry_dump
berisi semua poligon yang mungkin dibentuk oleh satu set garis. Saya mengasumsikan ID blok yang ditunjukkan dalam contoh Anda tidak terkait dengan ID linework input. Jika ini masalahnya, Anda bisa mendapatkan poligon dan ID Anda dengan:Bagian lambat di sini adalah
ST_Union
. Sepertinya ini akan berfungsi tanpa panggilan itu, selama jalur input benar-benar mengangguk, tapi saya belum berhasil melakukannya.Buffer negatif tidak akan memberikan hasil yang tepat seperti pada contoh Anda, karena jalan buntu akan diabaikan oleh proses poligonisasi. Tetapi Anda dapat mengambil buffer positif dari garis asli, dan gunakan
ST_Difference
untuk menghapus area itu dari blok poligon.sumber