Lagi

PgRouting - menghitung rute dari titik ke titik

PgRouting - menghitung rute dari titik ke titik


Saya memiliki tiga shapefile:

  • jalan (garis),
  • pusat logistik (fitur satu titik) dan
  • tempat (banyak fitur titik).

Saya telah mencoba menghitung rute dari pusat logistik ke tempat-tempat oleh analis jaringan ArcMap, tetapi itu menyakitkan dan saya tidak berhasil membuatnya.

Jadi saya menginstal PostGIS/Postgresql dengan ekstensi pgRouting. Sekarang saya memiliki shapefile yang diimpor ke dabatabase dengan alat SPIT dari QGIS. Dalam database mereka ditampilkan sebagai 3 tabel. Saya juga berhasil membuat topologi untuk jalan dengan tutorial yang ditemukan di dokumentasi bengkel pgRouting.

Untuk saat ini, saya tidak dapat menemukan tutorial untuk situasi saya, karena saya ingin menghitung rute terpendek dari pusat logistik ke tempat-tempat menggunakan lapisan jalan. Saya dapat melakukannya dengan tangan, satu per satu, di QGIS atau ArcMap, menggunakan alat mereka, tetapi saya memiliki 1500 tempat, jadi akan sulit untuk melakukannya.

Pertanyaan saya:

Apakah mungkin untuk menghitung rute dari satu titik ke banyak dengan pgRouting (saya hanya membutuhkan jarak untuk rute terpendek) menggunakan pusat logistik sebagai sumber dan tempat sebagai target?

Apakah mungkin membuat tabel dengan informasi yang berisi ID target dan jarak rute dan membuat shapefile dengan geometri?

Bagaimana cara melakukannya?


NS pgr_kDijkstra fungsi memungkinkan Anda menghitung jarak satu-ke-banyak.

Dengan algoritme Dijkstra, Anda perlu memulai dan mengakhiri rute dengan ID simpul, jadi mungkin ide yang baik untuk mengintegrasikan pusat dan titik logistik Anda ke dalam jaringan jalan.

Anda dapat melakukan ini dengan beberapa fungsi PostGIS:

  • ST_LineLocatePoint memberi Anda titik terdekat di LineString ke Titik yang diberikan, sebagai sebagian kecil dari total panjang garis 2d.
  • ST_LineSubstring mengembalikan sebagian linestring menggunakan pecahan yang Anda hitung sebelumnya.
  • ST_LineInterpolatePoint mengembalikan Anda titik interpolasi.

Kemudian berikan titik interpolasi Anda ID node dan ganti linestring dengan 2 substring.

Anda juga dapat menulis fungsi untuk melakukan ini dengan setiap permintaan, tetapi jika tempat dan pusat logistik Anda tidak berubah, Anda dapat melakukannya sekali untuk semua titik dan menyimpan jaringan yang diperluas dalam database.


Saya pikir Anda mencari fungsi pgr_drivingDistance

Fungsi ini menghitung solusi jalur terpendek Dijkstra mereka mengekstrak biaya untuk sampai ke setiap node dalam jaringan dari node awal. Menggunakan node dan biaya ini dimungkinkan untuk menghitung poligon waktu drive konstan. Mengembalikan sekumpulan baris pgr_costResult (seq, id1, id2, cost), yang membentuk daftar poin yang dapat diakses.

http://docs.pgrouting.org/2.0/en/src/driving_distance/doc/dd_driving_distance.html#pgr-driving-distance

Contoh:

SELECT seq, id1 AS node, cost FROM pgr_drivingDistance( 'SELECT id, source, target, cost FROM edge_table', 7, 1.5, false, false );

seq | simpul | biaya -----+------+------ 0 | 2 | 1 1 | 6 | 1 2 | 7 | 0 3 | 8 | 1 4 | 10 | 1 (5 baris)


Tonton videonya: Tutorial LeafletJs - Routing Machine