Link e idee per la corrispondenza delle mappe? [chiuso]


44

Sto usando OpenStreetMap e la sua rete stradale vettoriale e vorrei implementare un algoritmo di abbinamento mappe.

Attualmente sono in grado, per ogni posizione GPS, di recuperare il segmento stradale più vicino e calcolare la proiezione di questa posizione su quel segmento, come su questa immagine (il perno rosso è la posizione GPS pura, in blu il segmento mappato e in verde il posizione mappata):

inserisci qui la descrizione dell'immagine

Tuttavia, a causa della mancanza di precisione del GPS, a volte la posizione mappata salta da un segmento all'altro e può fornire una posizione mappata incoerente di volta in volta.

Il mio attuale algoritmo è molto semplice: dalla pura posizione GPS, ottengo il segmento più vicino e decido che la posizione abbinata mappata sia su questo. So che questo può essere davvero migliorato.

Posso immaginare che prendere in considerazione la direzione del veicolo migliorerà la corrispondenza della mappa ma conosci qualche altro approccio che mi consentirebbe di migliorare il mio abbinamento della mappa?

Cerco qualsiasi link e / o software open source?


4
potresti aggiungere un cerchio: Google utilizza la ricezione cellulare e crea un cerchio azzurro per mostrare la tua posizione approssimativa. L'app ha un bell'aspetto, buon lavoro. Se hai i dati vettoriali puoi agganciarti alla linea più vicina dal tuo punto GPS - vedi post di Paul Ramsey blog.cleverelephant.ca/2008/04/snapping-points-in-postgis.html
Mapperz

4
La parola chiave che stai cercando è la corrispondenza della mappa. Grande soggetto.
Uffe Kousgaard,

1
Uffe ha ragione, corrispondenza della mappa. Controlla questo documento per alcuni approcci: cens.ucla.edu/~mhr/cs219/maps/white00.pdf
lessico

Grazie! lessico, la carta viene inviata alla mia stampante mentre scrivo questo. È ora di avere una visione d'insieme. Grazie per il link.
scrrr,

Migliorerei l'algoritmo, cercando anche di agganciarmi alla strada reale, piuttosto che solo ai vertici.
Devdatta Tengshe,

Risposte:


11

La proiezione di punti sulla linea come stai già facendo è possibile farlo direttamente in PostGIS. Ho scritto di questo è qualche tempo fa, qui

Ma per risolvere il tuo problema quando i punti sono più vicini al segmento sbagliato rispetto al segmento giusto, forse questo potrebbe essere un approccio possibile.

  1. Costruire una stringa lineare dei punti
  2. Prova le soluzioni suggerite in Algoritmi per abbinare i segmenti in modo che corrispondano all'intera linea anziché solo punto per punto

Grazie per la tua risposta. La proiezione è OK: lo sto già facendo (non tramite ST_Closest perché non è disponibile in spatialite che sto usando ma va bene). Stavo anche esaminando la domanda che hai menzionato e imparato sull'esistenza di questa "distanza di Hausdorff" che può essere interessante da guardare.
yonel,

10

Dopo aver letto la tua domanda e le varie risposte, mi sono interessato a questo problema. Dopo aver letto un po 'di algoritmi di abbinamento delle mappe, ho capito quanto segue:

  • Per abbinare la posizione GPS alla strada, sono necessari i dati stradali effettivi in ​​formato vettoriale
  • Aiuterà se hai pesi diversi per strade diverse. Quindi le probabilità che un punto corrisponda a un'autostrada saranno maggiori, quindi con una linea laterale corrispondente.
  • Devi prendere la cronologia e la velocità della lettura dei gps. Ad esempio, se il punto GPS è stato abbinato alla corsia laterale per lungo tempo, è necessario tenerne conto e non associarlo direttamente all'autostrada. -La corrispondenza effettiva viene eseguita utilizzando una varietà di tecniche statistiche.

Per ulteriori letture, suggerisco quanto segue:


Sì, stavo anche leggendo e ho iniziato a giocare con l'implementazione di un semplice algoritmo su cui posso espandermi. Finora ho scaricato alcuni dati da OSM e sto giocando su come posso archiviarli (e accedervi) al meglio per i miei scopi. È un argomento interessante, penso. :) Aggiornerò questa domanda una volta che avrò qualcosa che funziona. Inoltre, grazie per i collegamenti!
scrrr

Starei attento con l'uso dei pesi "Quindi le probabilità che un punto corrisponda a un'autostrada saranno più alte, quindi abbinando una linea laterale." ... Dipende dai dati di input e potrebbe andare molto male.
underdark

@Devdatta, ottengo un 404 sul secondo link. Invece di modificarlo, hai un link alternativo?
Chau,

Non ho un link di accesso gratuito a quell'articolo. Ma se sei in un ambiente accademico. L'articolo dovrebbe essere disponibile dopo una rapida ricerca
Devdatta Tengshe,


7

Rispondere alla mia domanda!

1- Un bel .pdf che ho appena trovato su questo argomento:

http://safari.ce.sharif.edu/file/2011-06-06/259/2009_An%20off-line%20map-matching%20algorithm%20for%20incomplete%20map%20databases.pdf

che collega anche a un'implementazione open source in C ++ del map matcher descritto nel documento: http://eden.dei.uc.pt/~camara/files/mgemma.zip
(questo è un matcher di mappe offline, la mia comprensione è che calcola la posizione corrispondente della mappa con il percorso INTERO come input e non può farlo al volo per ogni posizione).

2- Quindi, ho appena letto questo in profondità ed è davvero buono secondo me: https://dspace.lboro.ac.uk/dspace-jspui/bitstream/2134/4860/1/velaga.pdf "Sviluppo un algoritmo di mappatura topologica basato sul peso migliorato per algoritmi di trasporto intelligenti "
L'algoritmo è chiaramente spiegato e i valori di regolazione del peso sono forniti anche nel documento.


4

C'è molto lavoro sull'abbinamento delle mappe, vedi questo documento per un breve sondaggio su alcuni lavori abbastanza recenti (prima del 2007). Più recentemente, gli approcci basati sui modelli nascosti di Markov sembrano funzionare abbastanza bene in circostanze normali. Ad esempio, dai un'occhiata a questo documento dal 2009. L'idea e il modello sono abbastanza semplici e non dovrebbero darti troppi problemi da implementare anche se non hai familiarità con gli HMM (nel qual caso, non farti prendere dal panico, ci sono molti di tutorial e presentazioni online)


1
Ho appena realizzato che il progetto Barefoot di cui ho parlato nella mia risposta si basa sul documento che @Nick raccomanda.
nik,

4

Il metodo è anche chiamato "conflazione vettoriale". Esiste una pagina Wiki dedicata ( http://wiki.openstreetmap.org/wiki/Conflation ) che offre una panoramica generale e elenca i pacchetti software (Open Source) per eseguire la conflazione dei vettori stradali come "plug-in JOSM conflation", "fusione Potlatch 2 strumento "," RoadMatcher "(per OpenJUMP) e altri.


1
Ho sempre pensato che la conflazione fosse qualcosa che fai con due livelli di linea invece di abbinare i punti alle linee. È davvero lo stesso?
underdark

4

Per gli algoritmi di corrispondenza delle mappe, dipende se è necessaria un'elaborazione in tempo reale o offline. Nel secondo caso, gli algoritmi all'avanguardia possono elaborare ~ 1000 punti al secondo. I requisiti di memoria dipendono ovviamente dalla copertura. A tale scopo siamo riusciti a spremere la rete stradale OSM del pianeta su circa 16 Gb.

Inoltre, devi distinguere la corrispondenza della mappa dall'inferenza del percorso : si tratta di due processi separati a seconda che tu abbia dati ad alta o bassa frequenza. Quando hai relativamente pochi punti (ad es. 1 dati ogni chilometro nel contesto urbano), è l' inferenza del percorso in quanto di solito si presume che si debba fare un'ipotesi su dove stia viaggiando il dispositivo. L'inferenza di percorso è di solito più difficile ma sta diventando meno problematica con i moderni dispositivi / prezzo dell'acquisizione dei dati.

Puoi controllare il mio profilo per un'API che fa corrispondere le mappe direttamente su OSM: ad esempio utilizza la corrispondenza topologica e funziona bene con i dati mobili delle auto.


Puoi espandere gli algoritmi che stai utilizzando? E come può aiutare a ridurre le dimensioni della rete stradale?
Devdatta Tengshe,

Minore copertura = rete più piccola da conservare in memoria. Questo accelera un po 'il calcolo. Riferimenti: trb.metapress.com/content/p31485vw72645686
Fabrice Marchal

3

Strava Slide descrive come i dati cumulativi dei binari su una rete stradale possano comportarsi come "valli" e come il percorso proposto "si inserisca" come se fosse una serie di perline.


2

Dopo aver testato la maggior parte dei framework sopra menzionati, ho scoperto Barefoot e posso davvero consigliarlo. Utilizza modelli markov nascosti come approccio probabilistico per la corrispondenza delle mappe (dettagli nel loro documento "Mettere l'auto sulla mappa" ) ed è implementato in Java. È open source e sviluppato attivamente dal dipartimento CarIT di BMW.


2

L'argomento si chiama corrispondenza della mappa. Ma come prima approssimazione molto buona è probabilmente abbastanza buono cercare solo i punti più vicini per ogni punto gps (senza alcuna correzione indovinando il modo corretto).

Il mio progetto Open Source chiamato graphhopper non è qualcosa che funziona per iOS ( aggiornamento : ora funziona anche su iOS), né ha un'app Android completamente funzionale per quello che vuoi. Ma potresti utilizzare la versione del server per creare un'app iOS o utilizzare la demo Android offline come inizio. Ho rilasciato l'algoritmo di corrispondenza delle mappe qui , solo un prototipo approssimativo ma funziona sorprendentemente bene.


1

Prova ad acquisire alcuni dati di prova validi. Utilizzare un GPS di registrazione delle tracce con maggiore precisione, oltre ai punti di registrazione sul dispositivo di destinazione. Ciò identificherà gli errori nel GPS e nei dati OSM sottostanti. Conoscere soglie sensibili renderà molto più semplice progettare l'algoritmo.


1

Se riesci a ottenere i dati sulle strade per la tua regione, potresti essere interessato allo snap di massa automatico con FOSS

A seconda che tu voglia tracciare i dati in tempo reale, o stai pianificando di eseguire successivamente un postelaborazione sul tuo PC, GRASS potrebbe essere di aiuto.


1

Ho trovato un'API che potrebbe semplicemente fare il lavoro senza dover passare subito dallo sforzo di sviluppare una propria soluzione.

Usano i dati OSM per eseguire la corrispondenza delle mappe. Hanno anche una pagina demo che consente il caricamento di file GPX per vedere come questo potrebbe funzionare per te.


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.