Ini tentu saja mungkin dengan raster.
Tangkapan layar ini mudah-mudahan menunjukkan masalahnya dengan lebih jelas. Bagian B dari voronoi lebih dekat 'saat gagak terbang' ke pusat voronoi yang asli, tetapi ini tidak memperhitungkan fakta bahwa akan memakan waktu lebih lama untuk berjalan di sekitar gedung. Pemahaman saya tentang pertanyaan OP adalah bahwa voronoi perlu memperhitungkan jarak ekstra ini untuk berjalan di sekitar gedung.
Saya suka saran dari @Guillaume. Namun, ketika saya mencobanya saya punya masalah r.grow.distance
untuk menghormati topeng (lihat di bawah. Riak-riak seharusnya tidak melewati bangunan).
Pengetahuan Rumput saya tidak sekuat yang seharusnya, jadi mungkin saya melakukan sesuatu yang bodoh. Tentunya, periksa saran itu terlebih dahulu karena akan jauh lebih sedikit pekerjaan daripada milik saya ;-)
Langkah 1 - Buat permukaan biaya
Langkah pertama adalah membuat permukaan biaya. Ini hanya perlu dilakukan sekali.
- buat layer yang bisa diedit, lubang dan semua.
- tambahkan bidang yang disebut 'unit', setel ke 1.
- menggunakan polygon-to-raster pada layer vektor "punched" (yang berlubang), menggunakan field 'unit'. Anda sekarang memiliki layer "mask", di mana 1 adalah ruang kosong dan 0 sedang membangun.
gunakan kalkulator raster untuk mengubahnya menjadi permukaan biaya. Saya akan mengatur 'di luar ruangan' menjadi 1 dan 'di dalam ruangan' ke 9999. Ini akan membuat sulit untuk melewati bangunan.
(("mask @ 1" = 1) * 1) + (("mask @ 1" = 0) * 9999)
Anda bisa mendapatkan lebih banyak hasil 'organik' dengan menambahkan sedikit noise ke permukaan biaya (mis. Gunakan angka acak dari 1 hingga 3, daripada hanya 1 untuk pxiels outdoor.)
Langkah 2. Buat raster biaya kumulatif untuk setiap pusat voronoi
Sekarang kita dapat menjalankan (untuk satu sel voronoi sekaligus) algoritma GRASS r.cost.coordinates
terhadap lapisan permukaan biaya kami.
Untuk mulai berkoordinasi, gunakan pusat vornoi. Untuk koordinat akhir, pilih salah satu sudut area Anda. Saya sarankan menggunakan 'Knights Tour' karena ini memberikan hasil yang lebih halus.
Hasilnya menunjukkan garis waktu perjalanan yang sama dari satu pusat voronoi. Perhatikan bagaimana pita membungkus bangunan.
Tidak yakin cara terbaik untuk mengotomatisasi ini. Mungkin memproses mode batch, atau dilakukan dalam pyqgis.
Langkah 3. Gabungkan raster
Ini mungkin membutuhkan kode. Algoritma akan menjadi
create a raster 'A' to match the size of your cumulative cost images
fill raster 'A' with a suitably high number e.g. 9999
create an array of the same size as the raster.
for each cumulative cost raster number 1..N
for each cell in image
if cell < value in raster 'A'
set value in raster 'A' to cell value
set corresponding cell in array to cum. cost image number
write out array as a raster
Pendekatan itu harus menghasilkan raster di mana setiap sel dikategorikan oleh pusat voronoi terdekat, dengan mempertimbangkan hambatan.
Anda kemudian dapat menggunakan raster-ke-poligon. Anda kemudian dapat menggunakan plugin Generalize untuk menghapus artefak efek "langkah" dari raster.
Permintaan maaf atas ketidakjelasan pada langkah 2 dan 3 ... Saya berharap seseorang berpadu dengan solusi yang lebih elegan :)