이것은 래스터에서 가능합니다.
이 스크린 샷은 문제를보다 명확하게 보여줍니다. 보로 노이의 B 부분은 까마귀가 원래 보로 노이 센터와 '비행하는 것처럼'더 가깝습니다. OP의 질문에 대한 나의 이해는 건물 주위를 걸을 때 보로 노이 가이 여분의 거리를 고려해야한다는 것입니다.
@Guillaume의 제안이 마음에 듭니다. 그러나 그것을 시도했을 때 r.grow.distance
마스크를 존중하는 데 문제가있었습니다 (아래 참조. 잔물결이 건물을 통과해서는 안됩니다).
내 잔디 지식은 그다지 강력하지 않으므로 어리석은 짓을하고있을 것입니다. 확실히, 그 제안은 내 것보다 훨씬 적은 작업이므로 먼저 제안을 확인하십시오 ;-)
1 단계-비용 표면 생성
첫 번째 단계는 비용 표면을 만드는 것입니다. 이 작업은 한 번만 수행하면됩니다.
- 편집 가능한 레이어, 구멍 및 모두를 만듭니다.
- 'unit'이라는 필드를 추가하고 1로 설정하십시오.
- 'unit'필드를 사용하여 "펀칭 된"벡터 레이어 (구멍이있는 레이어)에 다각형-래스터 사용. 이제 "마스크"라는 레이어가 있습니다. 여기서 1은 여유 공간이고 0은 빌딩입니다.
래스터 계산기를 사용하여 비용면으로 전환하십시오. '야외'를 1로, '실내'를 9999로 설정하겠습니다. 이렇게하면 건물을 통과하는 것이 엄청나게 어려워집니다.
(( "mask @ 1"= 1) * 1) + (( "mask @ 1"= 0) * 9999)
비용 표면에 약간의 노이즈를 추가하여 더 많은 '유기적'결과를 얻을 수 있습니다 (예 : 실외 pxiels에는 1이 아닌 1에서 3 사이의 난수 사용).
2 단계. 각 보로 노이 센터마다 누적 비용 래스터 생성
이제 r.cost.coordinates
비용 표면 레이어에 대해 GRASS 알고리즘을 한 번에 하나의 보로 노이 셀에 대해 실행할 수 있습니다 .
시작 좌표로 vornoi center를 사용하십시오. 끝 좌표로 해당 지역의 모서리 중 하나를 선택하십시오. 더 부드러운 결과를 얻으려면 'Knights Tour'를 사용하는 것이 좋습니다.
결과는 하나의 보로 노이 센터에서 이동 시간이 동일한 선을 보여줍니다. 밴드가 건물 주위를 어떻게 감싸는 지주의하십시오.
이것을 자동화하는 가장 좋은 방법을 모르겠습니다. 배치 모드 처리 또는 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
이 접근법은 장애물을 고려하여 가장 가까운 보로 노이 중심으로 각 셀이 분류되는 래스터를 생성해야합니다.
그런 다음 래스터-폴리곤을 사용할 수 있습니다. 그런 다음 일반화 플러그인을 사용 하여 래스터에서 "단계"효과 아티팩트를 제거 할 수 있습니다 .
2 단계와 3 단계의 모호한 점에 대한 사과 ... 더 우아한 솔루션으로 누군가를 유혹하고 있습니다. :)