Điều này là chắc chắn có thể với các raster.
Ảnh chụp màn hình này hy vọng cho thấy vấn đề rõ ràng hơn. Phần B của voronoi gần hơn 'khi con quạ bay' đến trung tâm voronoi ban đầu, nhưng điều này không tính đến thực tế là sẽ mất nhiều thời gian hơn để đi bộ quanh tòa nhà. Sự hiểu biết của tôi về câu hỏi của OP là voronoi cần tính đến khoảng cách thêm này để đi bộ xung quanh tòa nhà.
Tôi thích đề xuất từ @Guillaume. Tuy nhiên, khi tôi thử nó, tôi gặp vấn đề trong việc r.grow.distance
tôn vinh mặt nạ (xem bên dưới. Những gợn sóng không nên đi qua các tòa nhà).
Kiến thức về Cỏ của tôi không mạnh như nó có thể, vì vậy có lẽ tôi đang làm điều gì đó ngu ngốc. Chắc chắn, hãy kiểm tra đề xuất đó trước vì nó sẽ làm việc ít hơn nhiều so với của tôi ;-)
Bước 1 - Tạo bề mặt chi phí
Bước đầu tiên là tạo ra một bề mặt chi phí. Điều này chỉ cần được thực hiện một lần.
- tạo một lớp có thể chỉnh sửa, lỗ và tất cả.
- thêm một trường gọi là 'đơn vị', đặt nó thành 1.
- sử dụng đa giác-raster trên lớp vectơ "đục lỗ" của bạn (lớp có lỗ), sử dụng trường 'đơn vị'. Bây giờ bạn có một lớp "mặt nạ", trong đó 1 là không gian trống và 0 đang xây dựng.
sử dụng máy tính raster để biến điều này thành một bề mặt chi phí. Tôi sẽ đặt 'ngoài trời' thành 1 và 'trong nhà' thành 9999. Điều này sẽ khiến việc di chuyển qua các tòa nhà trở nên khó khăn.
(("mặt nạ @ 1" = 1) * 1) + (("mặt nạ @ 1" = 0) * 9999)
Bạn có thể nhận được nhiều kết quả 'hữu cơ' hơn bằng cách thêm một chút nhiễu vào bề mặt chi phí (ví dụ: sử dụng số ngẫu nhiên từ 1 đến 3, thay vì chỉ 1 cho các pxiels ngoài trời.)
Bước 2. Tạo các raster chi phí tích lũy cho mỗi trung tâm voronoi
Bây giờ chúng ta có thể chạy (cho một ô voronoi cùng một lúc) thuật toán GRASS r.cost.coordinates
chống lại lớp bề mặt chi phí của chúng ta.
Đối với tọa độ bắt đầu, sử dụng trung tâm vornoi. Đối với tọa độ cuối, chọn một trong các góc của khu vực của bạn. Tôi đề nghị sử dụng 'Hiệp sĩ du lịch' vì điều này mang lại kết quả mượt mà hơn.
Kết quả cho thấy các dòng thời gian di chuyển bằng nhau từ một trung tâm voronoi. Lưu ý cách các dải quấn quanh các tòa nhà.
Không chắc chắn làm thế nào tốt nhất để tự động hóa này. Có thể xử lý chế độ hàng loạt, hoặc được thực hiện trong pyqgis.
Bước 3. Hợp nhất các trình quét
Điều này có thể sẽ cần mã. Thuật toán sẽ là
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
Cách tiếp cận đó sẽ mang lại một raster trong đó mỗi ô được phân loại bởi trung tâm voronoi gần nhất, có tính đến các trở ngại.
Sau đó, bạn có thể sử dụng raster-to-đa giác. Sau đó, bạn có thể sử dụng plugin Generalize để xóa các tạo phẩm hiệu ứng "bước" khỏi raster.
Xin lỗi vì sự mơ hồ ở bước 2 và 3 ... Tôi hy vọng ai đó sẽ hòa nhập với một giải pháp thanh lịch hơn :)