Tạo các điểm ở khoảng cách xác định với nhau trong các ô của fishnet ngẫu nhiên trong khi đang ở trên các chuỗi


10

Chúng tôi có một giao thức trên mặt đất nơi chúng tôi nhận được một mạng lưới các tế bào 1x1 km. Một số tế bào được chọn ngẫu nhiên. Chúng ta cần đặt 4 điểm trong mỗi ô và những điểm này cũng phải nằm trên một con đường. Khoảng cách tối thiểu giữa các điểm phải là 500m cho mỗi điểm của mỗi ô NẾU KHẢ NĂNG hoặc nếu không, chúng tôi muốn khoảng cách tối đa có thể.

Trong lần thử đầu tiên, chúng tôi đã chia mỗi ô thành bốn ô 500x500 m với ST_CreateFishnet sau đó chúng tôi đặt các điểm tại tâm của các ô phụ sau đó trên con đường gần nhất (ST_ClosestPoint). Chúng tôi nhận được một số kết quả tốt nhưng trong ví dụ bên dưới, bạn có thể thấy điểm 5 quá gần từ 6 và có thể được di chuyển trên đường bên trái.

WITH
r1 AS (         -- only sub-cells which intersects random cells
    SELECT id_maille, ROW_NUMBER() OVER() AS id_grille, fishnet_500.geomgrille
    FROM fishnet_500
        JOIN t_mailles
            ON ST_Intersects(ST_Buffer(t_mailles.geom,-200), fishnet_500.geomgrille)     -- buffer < 0 to not select neightbours
)
,
r2 AS (         -- cut roads in every cells
SELECT id_maille, id_grille, ST_Intersection((ST_Dump(roads.geom)).geom, r1.geomgrille) as geomroute
FROM roads
    JOIN r1
        ON ST_Intersects(roads.geom, r1.geomgrille)
)
                -- select point on each road the closest to cell centroid
SELECT r2.id_maille, r2.id_grille, ST_ClosestPoint(ST_Union(r2.geomroute),ST_Centroid(r1.geomgrille)) as geomipa
FROM r2
    JOIN r1
        ON r2.id_grille = r1.id_grille
GROUP BY r2.id_maille, r2.id_grille, r1.geomgrille
ORDER BY r2.id_maille, r2.id_grille

Nếu bạn muốn dùng thử, tôi đặt 3 lớp (fishnet với các ô ngẫu nhiên, fisnet phụ và đường) trong một kho lưu trữ mà bạn có thể tìm thấy ở đây .

Tôi đoán chúng ta không thể tránh một thuật toán đệ quy thử nhiều khả năng nhưng tôi không chắc chắn.

nhập mô tả hình ảnh ở đây


Bạn có thể chia sẻ mã mà bạn đã sử dụng cho đến nay?
Cushen

Có bất kỳ ràng buộc khác? Nó sẽ làm cho nó dễ dàng hơn, ví dụ, bắt đầu bằng một điểm ở góc xa nhất của ô phụ, khiến bạn ít có khả năng phải loại bỏ các điểm khác vì quá gần?
Simbamangu

Có, thật tốt khi bắt đầu với các điểm ở các góc khi không có các ô khác chạm vào ô trên góc được xem xét. Các điểm phải ở khoảng cách tối thiểu với nhau trên toàn bộ lưới.
Nicolas Boisteault

Câu trả lời:


1

Bạn có sẵn sàng làm điều này trong R hoặc python bằng cách liên kết với cơ sở dữ liệu PostGIS của bạn không? Nếu bạn đã sử dụng ST_DumpPoints trên tất cả các dòng trong mỗi ô 1x1 km, bạn sẽ có thể sử dụng một trong nhiều thuật toán có sẵn để chọn 4 điểm với khoảng cách giữa mỗi> 500m hoặc cách nhau càng xa càng tốt.

Có lẽ một trong những thuật toán được đề cập trên Wikipedia cho vấn đề về chiếc ba lô, https://en.wikipedia.org/wiki/Knapsack_probols , sẽ cung cấp cho bạn một số ý tưởng. Hoặc, tôi nghĩ rằng một thuật toán MCMC sẽ hoạt động tốt.

Nếu hai lưới tiếp giáp nhau, khoảng cách giữa các điểm trong lưới liền kề có quan trọng không?


Để trả lời câu hỏi cuối cùng của bạn. Có, như đã nói trong nhận xét cuối cùng của tôi: "Các điểm phải ở khoảng cách tối thiểu với nhau trên toàn bộ lưới". Cảm ơn sự giúp đỡ của bạn.
Nicolas Boisteault
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.