Đường dẫn ngắn nhất sử dụng điểm OSM nội suy


8

Tôi có một tập hợp các điểm GPS mà tôi đã chụp vào mạng OSM. Trong ảnh chụp màn hình bên dưới, các điểm GPS có màu đỏ, các điểm được chụp có màu xanh lục. nhập mô tả hình ảnh ở đây

Tôi muốn tính toán con đường ngắn nhất bao gồm tất cả các điểm đường màu xanh lá cây này. Giải pháp của tôi là tính toán con đường ngắn nhất giữa mỗi cặp điểm và cuối cùng là kết quả.

Vấn đề của tôi là dijkstra_sp sẽ không chấp nhận các điểm tùy ý trên mạng OSM. Điểm bị gãy của tôi không nhất thiết phải trong bảng cách vì chúng được tính bằng logic sau.

  1. Tìm cách gần nhất với một điểm GPS nhất định.
  2. Sử dụng phép nội suy, tìm điểm gần nhất trên đường này tới điểm GPS.

Các điểm được ngắt không nằm trong bảng cách vì chúng được dẫn xuất bằng phép nội suy.

Vì vậy, câu hỏi của tôi là: Làm thế nào để tôi tính toán con đường ngắn nhất giữa hai điểm trên mạng OSM không nhất thiết phải trong bảng cách?


Âm thanh với tôi bạn đang cố gắng giải quyết vấn đề nhân viên bán hàng du lịch . Trong trường hợp đó, cách hiệu quả nhất để sử dụng là sử dụng thuật toán TSP ...
ntg

Câu trả lời:


3

Chúng tôi đã giải quyết vấn đề tương tự với các cạnh và đỉnh tạm thời. Chúng tôi đã cắt các dây GPS của chúng tôi đến một cạnh e từ v1 đến v2 và có độ lệch giữa 0 và 1:

segOffset := line_locate_point(geom(e), Point(coords);

Với điều này, chúng tôi đã tạo một Điểm mới () và từ đó một v_tmp mới:

line_interpolate_point(geom(e), segOffset);

Chúng tôi hơn là chia cạnh e1 của chúng tôi thành hai cạnh mới e_tmp1 từ v1 đến v_tmp và e_tmp2 từ v_tmp đến v2. (Bạn có thể cần chia nó thành 4 phần tạm thời ...)

Với mục tiêu của chúng tôi, chúng tôi đã làm như vậy. Hơn chúng tôi đã bắt đầu trang trí với các đỉnh mới v_tmp_source, v_tmp_dest và đó là nó.


2

Tôi khớp với các nút gần nhất, sử dụng pgrouting để tìm tuyến giữa các nút này. Tôi đã ở sau tổng khoảng cách, vì vậy tôi đã thêm hai khoảng cách nút điểm.

Tôi đã có một giới hạn trên về mức độ gần của một nút, để được chấp nhận.

Toán học sẽ phức tạp hơn / chậm hơn, nhưng bạn có thể làm tương tự cho các cạnh nếu bạn đang sử dụng thuật toán mở rộng hoạt động theo các cạnh thay vì các nút.


(Xin lỗi, bằng cách nào đó tôi không thể nhận xét về "winwaed", vì vậy tôi phải làm điều đó với một câu trả lời khác)> Toán học sẽ phức tạp hơn / chậm hơn, nhưng bạn có thể làm tương tự cho các cạnh nếu bạn đang sử dụng thuật toán mở rộng làm việc về các cạnh hơn là các nút. Thuật toán shooting Star có các cạnh thay vì các nút.
dkastl

Cả các thủ tục dựa trên nút và cạnh gần nhất đều không hoạt động, xem ví dụ dưới đây. dl.dropbox.com/u/11502389/Sc mãi2.png Các đường màu xanh là cách mà mỗi dấu chấm màu xanh lá cây được bật.

1

vấn đề của bạn nhớ tôi với một trường hợp tương tự, mà chúng tôi đã phải giải quyết vài năm trước: ai đó đang vẽ một con đường (linestring) trên bản đồ raster và chúng tôi phải ghép đường này với mạng lưới đường bên dưới.

Điều này có vẻ tương tự như các điểm GPS màu đỏ của bạn. Và giống như bạn, chúng tôi giả định rằng chúng tôi có thể tìm kiếm con đường ngắn nhất giữa các điểm này.

Bởi vì điều này đã quá lâu rồi, tôi không nhớ chi tiết nữa. Nhưng chúng tôi đã xuất bản (các) hàm trong "Match.sql", đây là một phần của pgRouting. Không có tài liệu mặc dù. Xin lỗi vì điều đó. Nhưng có lẽ việc đọc nguồn SQL cung cấp cho bạn một số ý tưởng về cách thức hoạt động của nó: https://github.com/pgRouting/pgrouting/blob/master/core/sql/matching.sql


Sử dụng các nút gần nhất không hoạt động, xem xét ví dụ dưới đây.

Hàm khớp này tôi đề cập có kết hợp khớp với các nút và đoạn đường. Nó phụ thuộc vào mức độ gần điểm GPS của bạn với một nút. Nếu bạn ở rất gần đường giao nhau, điểm GPS của bạn có thể gần với một cạnh hơn, mà nó thực sự không nên được chỉ định.
dkastl
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.