これは、ラスターで確かに可能です。
このスクリーンショットは、問題をより明確に示しています。ボロノイの部分Bは、「カラスが飛ぶように」元のボロノイ中心に近いが、これは建物の周りを歩くのに時間がかかるという事実を考慮していない。OPの質問に対する私の理解は、ボロノイがこの余分な距離を考慮して建物を歩く必要があるということです。
@Guillaumeからの提案が気に入っています。しかし、試してみるとr.grow.distance
、マスクを尊重するのに問題がありました(以下を参照してください。波紋は建物を通過してはいけません)。
私のGrassの知識はそれほど強力ではないので、何かバカなことをしているのかもしれません。それは私のものよりもはるかに少ない仕事になるので、間違いなく、最初にその提案をチェックしてください;-)
ステップ1-コストサーフェスを作成する
最初のステップは、コストサーフェスを作成することです。これは一度だけ行う必要があります。
コストサーフェスに少しノイズを追加することで、より「自然な」結果を得ることができます(たとえば、屋外のピクセルに対して1ではなく1から3の乱数を使用します)。
ステップ2.各ボロノイ中心の累積コストラスタを作成する
これr.cost.coordinates
で、コストサーフェスレイヤーに対して(一度に1つのボロノイセルに対して)GRASSアルゴリズムを実行できます。
開始座標には、渦中心を使用します。終了座標として、お住まいの地域の角の1つを選択します。よりスムーズな結果が得られるため、「ナイツツアー」の使用をお勧めします。
結果は、1つのボロノイ中心からの移動時間が等しいラインを示しています。バンドが建物をどのように包んでいるかに注意してください。
これを自動化する最善の方法はわかりません。バッチモードを処理するか、pyqgisで実行することができます。
ステップ3.ラスターをマージダウンする
これにはおそらくコードが必要です。アルゴリズムは
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
このアプローチでは、各セルが障害物を考慮して最も近いボロノイ中心で分類されたラスタを生成する必要があります。
その後、ラスタからポリゴンを使用できます。次に、Generalizeプラグインを使用して、「ステップ」効果のアーティファクトをラスターから削除できます。
ステップ2と3のあいまいさについておologiesび申し上げます。誰かがもっとエレガントな解決策に夢中になることを願っています。