Bagaimana cara mengubah jejak titik menjadi arah berjalan?

8

Bayangkan Anda memiliki daftar titik (lintang + bujur) yang sebelumnya Anda rekam dengan penerima GPS. Sekarang, Anda perlu mengubahnya menjadi representasi tekstual dari rute yang Anda ikuti. Contoh:

  1. Mulai dari Redmond Avenue 12
  2. Jalan kaki 200 m
  3. Belok kiri ke St. Lainnya
  4. Berjalan 100 m
  5. Berhenti di Another St. 10
  6. Akhir

Tidak perlu terlalu detail. Ide pertama yang muncul di benak saya adalah menggunakan layanan eksternal (google, yahoo ...) untuk membalikkan geocode setiap titik. Kemudian terapkan algoritma sederhana untuk menulis rute ketika saya mendeteksi perubahan dalam nama jalan.

Setiap tip tentang apa algoritma terbaik untuk digunakan atau implementasi (terbuka) yang ada dipersilahkan. Tampaknya tidak sepele.

Guido
sumber
1
Apakah layak untuk menunjukkan bahwa jika saya disuruh Start at Redmond Avenue 12dan Walk 200 msaya tidak akan tahu ke mana harus berjalan? Maaf sudah melakukan nitpicking.
fmark
@ tanda, terima kasih. Anda tegar tetapi tidak penting dalam hal ini. Instruksi ditampilkan sebelum poin telah dicatat, sebagai bagian dari sistem pendengaran internal. Tingkat kerinciannya tidak sepenting membiarkan orang lain mengetahui rute terdekat yang diikuti.
Guido

Jawaban:

4

Jika Anda dapat menggunakan layanan eksternal, Google Directions API menyediakan fungsi ini secara langsung. Ini mendukung titik arah di sepanjang jalan, sehingga Anda bisa melakukan:

http://maps.google.com/maps/api/directions/json?origin=Redmond+Avenue+12,01864
&destination=Concord,MA&waypoints=lat1,long1|lat2,long2|lat3,long3&sensor=true

Ini akan mengembalikan JSONdokumen dengan stepsuntuk setiap arah.

Jika Anda ingin melakukan ini sendiri, Anda memiliki beberapa langkah untuk mulai memproses arahan: Anda akan memerlukan dataset untuk merutekan jalur, seperti OSM , dan mesin perutean seperti pgRouting . Sesuatu seperti OSM2PostGIS menyediakan angkat berat yang diperlukan untuk mendapatkan pengaturan seperti ini berjalan. Anda kemudian ingin memposisikan ulang masing-masing poin Anda ke tepi terdekat, yang dapat dilakukan di PostGIS dengan ST_Line_Locate_Point( dokumentasi ). Antara referensi linear di PostGIS dan pgRouting, Anda harus bisa membuat arahan yang cukup masuk akal.

scw
sumber
1
Terima kasih. Saya tahu layanan yang disediakan oleh Google, tetapi hanya memungkinkan 25 poin di sepanjang jalan. GPS menyimpan titik setiap 10 detik, jadi saya akan mencapai batasnya dalam waktu kurang dari 5 menit.
Guido
2
Benar, itu akan membatasi Anda hingga 25 poin, tetapi Anda mungkin bisa menggunakan lebih sedikit resolusi karena jalur akan mengikuti tepi dalam data dasar Google untuk sebagian besar rute. Atau, Anda dapat mengirim beberapa kueri untuk satu rute, dan kemudian mengurai hasilnya kembali bersama (ada juga contoh dalam API untuk ini).
scw