PGRouting - Làm thế nào để cắt liên kết khi đạt chi phí tối đa?


13

Tôi có một shapefile polyline đại diện cho một mạng lưới đường và một shapefile thứ hai có chứa các điểm. Tôi muốn sử dụng PostGIS (có lẽ là PGRouting) để xác định các mạng con hoặc khu vực dịch vụ tỏa ra từ các điểm này.

Về cơ bản, tôi hy vọng sẽ đặt câu hỏi, "Bắt đầu từ điểm X, tôi có thể đi bộ bao xa theo bất kỳ hướng nào, với tổng ngân sách du lịch là 1 km, theo mạng lưới đường bộ?" Kết quả sẽ là một tập hợp các polylines cắt ngắn đại diện cho tổng phạm vi khả năng đi lại, với ngân sách du lịch 1 km.

Để tham khảo, phân tích GRASS này dường như chính xác là những gì tôi muốn làm (ngoại trừ tôi muốn làm điều này trong PostGIS): http://www.gdf-hannover.de/lit_html/grass60_v1.2_en/node57.html#sec: optalloc

Ví dụ tiếp theo này dường như gần như những gì tôi muốn làm, ngoại trừ nó dường như trả lời câu hỏi "tôi có thể đi du lịch với những nút nào để có ngân sách du lịch khoảng cách X?" http://underdark.wordpress.com/2011/02/12/drive-time-isochrones/

Thứ hai không hoàn toàn là câu trả lời mà tôi đang tìm kiếm, vì tôi muốn các đường ống được cắt theo khoảng cách di chuyển của mình - Tôi không quan tâm nếu tôi thực hiện tất cả các cách đến một nút.


Một lựa chọn xảy ra với tôi là bằng cách nào đó chia polylines của tôi thành nhiều điểm. Điều đó giúp tôi đến gần hơn với câu trả lời đúng, nhưng có vẻ khá hack, và vẫn không hoàn toàn đưa tôi đến đó.
Peter

Câu trả lời:


2

Một người nghĩ rằng tôi đã có 1) chạy thói quen Driving_distance và 2) sử dụng thói quen "points_as_polygon" từ pgRouting (gọi hàm alphashape) để tạo ra đa giác nhỏ nhất ở khoảng cách chi phí nhất định dựa trên các điểm của thói quen lái xe trả lại. Sau đó, bạn có thể chọn tất cả các đường phố trong đa giác sẽ cung cấp cho bạn một ý tưởng chung về du lịch.

Nếu bạn chưa theo dõi cuộc thảo luận về danh sách người dùng pgRouting , thì gần đây họ đã thảo luận về nhiều lựa chọn hơn (chủ đề tháng 5 và tháng 6 năm 2011).


1
Thảo luận danh sách người dùng thú vị. Quá tệ, chức năng Driving_distance bị lỗi.
underdark

1

Vì đây thực sự là một vấn đề về đồ thị, điều bạn cần là kết nối / cấu trúc liên kết + thông tin chi phí. Đối với pg_routing, đó là bảng mà bạn gửi đến các thuật toán đường dẫn ngắn nhất. Bài viết này có thông tin về cách xây dựng một cái (tôi giả sử bạn đã có một cái). Xin lỗi tôi không thể cung cấp cho bạn chức năng chính xác trong pg_routing thực hiện điều này, nhưng viết một cái nên làm được. Tuy nhiên, tôi có thể nói với bạn rằng nếu bạn cứ gọi đi rút ngắn nhiều lần thì bạn sẽ thực hiện thuật toán bên dưới nhiều lần và làm hỏng kết quả - hoàn toàn không hiệu quả.

Giải pháp của bạn sau đó trở thành đi bộ mọi cạnh trong khi thêm chúng vào "danh sách đi bộ" và tính toán chi phí cho đến khi ngân sách của bạn (tức là khoảng cách) bị rút hết. Nếu ngân sách có thể chấp nhận được (nghĩa là ngân sách chưa bị rút hết), bạn cũng thêm hình học vào "túi hình học danh sách có thể chấp nhận". Bạn chỉ phải xử lý mỗi cạnh chính xác một lần. Đối với lần chỉnh sửa cuối cùng (nơi ngân sách của bạn bị rút quá nhiều), bạn cần lấy độ dài và nội suy khoảng cách chính xác mà bạn muốn đi , sau đó thêm kết quả vào "danh sách chấp nhận được". Kết quả của bạn là một liên minh của túi hình học đó.


1
Có một sự tinh tế trong bước cuối cùng: một số cạnh có thể đạt được từ một trong hai điểm cuối của nó. Điều này có thể khiến các phần của cả hai đầu được bao gồm hoặc thậm chí toàn bộ cạnh, mặc dù đi qua toàn bộ cạnh từ một trong hai điểm cuối sẽ vượt quá giới hạn ngân sách. Ví dụ: xem xét việc đi từ điểm a dọc theo đồ thị không có hướng với các cạnh có độ dài đơn vị {(a, b), (a, c), (b, c)} và ngân sách là 1.6. Bạn có thể đạt tới b hoặc c với chi phí là 1, với 0,6 còn lại để chi tiêu. Điều này làm cho mọi điểm dọc theo cạnh (b, c) có thể truy cập được.
whuber

Bạn đã đúng :) +1
Ragi Yaser Burhum

1

"Bắt đầu từ điểm X, tôi có thể đi bộ bao xa theo bất kỳ hướng nào, với tổng ngân sách du lịch là 1 km, theo mạng lưới đường bộ?"

Vì bạn chỉ phải xem xét một vùng nhỏ (bán kính tối đa 1km), bạn có thể thoát khỏi việc chia các liên kết thành nhiều phần nhỏ (tùy thuộc vào độ chính xác bạn muốn đạt được) và tạo các nút cần thiết. Các mạng "độ phân giải cao" kết quả vẫn có thể quản lý được.

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.