Saya memiliki satu set titik GPS yang telah saya akses ke jaringan OSM. Pada tangkapan layar di bawah ini, titik-titik GPS berwarna merah, titik-titik yang terputus berwarna hijau.
Saya ingin menghitung jalur terpendek yang mencakup semua titik jalan hijau ini. Solusi saya adalah menghitung jalur terpendek antara setiap pasangan poin dan akhirnya menyatukan hasilnya.
Masalah saya adalah bahwa dijkstra_sp tidak akan menerima poin arbitrer pada jaringan OSM. Poin saya yang terpotong tidak harus dalam tabel cara karena mereka dihitung menggunakan logika berikut.
- Temukan cara terdekat ke titik GPS yang diberikan.
- Dengan menggunakan interpolasi, temukan titik terdekat dalam perjalanan ke titik GPS.
Titik patah tidak ada dalam tabel cara karena mereka diperoleh dengan interpolasi.
Jadi pertanyaan saya adalah: Bagaimana cara menghitung jalur terpendek antara dua titik di jaringan OSM yang belum tentu dalam tabel cara?
sumber
Jawaban:
Kami memecahkan masalah yang sama dengan tepi dan simpul sementara. Kami menjentikkan coords GPS kami ke tepi e dari v1 ke v2 dan mendapat offset antara 0 dan 1:
Dengan ini kami membuat Point baru () dan dari sini v_tmp vertex baru:
Kami kemudian membagi tepi e1 kami menjadi dua sisi baru e_tmp1 dari v1 ke v_tmp dan e_tmp2 dari v_tmp ke v2. (Anda bisa membaginya menjadi 4 temp endges ...)
Dengan target kami, kami melakukan hal yang sama. Daripada kami mulai membuka dengan simpul baru kami v_tmp_source, v_tmp_dest dan hanya itu.
sumber
Saya cocok dengan node terdekat, menggunakan pgrouting untuk menemukan rute antara node ini. Saya mengejar total jarak, jadi saya kemudian menambahkan dua jarak titik-simpul.
Saya memiliki batas atas pada seberapa dekat sebuah node harus dapat diterima.
Matematika akan lebih rumit / lebih lambat, tetapi Anda bisa melakukan hal yang sama untuk edge jika Anda menggunakan algoritma pgrouting yang bekerja dalam hal edge daripada node.
sumber
masalah Anda mengingatkan saya pada beberapa kasus serupa, yang harus kami selesaikan beberapa tahun yang lalu: seseorang menggambar jalur (linestring) di atas peta raster dan kami harus mencocokkan jalur ini dengan jaringan jalan yang mendasari.
Ini tampaknya mirip dengan titik GPS merah Anda. Dan sama seperti Anda, kami berasumsi bahwa kami dapat mencari jalur terpendek antara titik-titik ini.
Karena ini sudah lama sekali, saya tidak ingat detail lagi. Tapi kami menerbitkan fungsi di "matching.sql", yang sudah menjadi bagian dari pgRouting. Tidak ada dokumentasi. Maaf untuk itu. Tetapi mungkin membaca sumber SQL memberi Anda beberapa ide bagaimana cara kerjanya: https://github.com/pgRouting/pgrouting/blob/master/core/sql/matching.sql
sumber