PDA

View Full Version : [C#] Determinare posizione automobile Google Maps


pare93
26-04-2012, 19:22
Salve a tutti,

spero di aver postato questa discussione nella sezione corretta visto che non la definisco proprio tale. Mi spiego meglio, l' applicazione che sto sviluppando è in C# ma la mia domanda non è rivolta proprio alla programmazione.

Ho un modulo GPS collegato al computer e gestito dalla mia applicazione. Attraverso questo dispositivo mi è possibile rilevare in tempo reale (in realtà in base al download/upload e al traffico della rete) la mia posizione in automobile. Quindi in modo tale da rilevare gli spostamenti che faccio al' interno di una cartografia.

Ecco, mi chiedevo se è possibile stabilire il fatto che un altra autovettura è davanti a me o meno. Naturalmente di fondo è stata stabilita un connessione e la trasmissione dei dati funziona correttamente.

Avevo pensato a calcolare la differenza tra le due coordinate delle auto attraverso le API di Google Maps. Ma questo non mi permette di stabilire la posizione della macchina interessata.
Oppure c' è da dire che posso stabilire se ambedue le autovetture si trovano nella stessa via e calcolarne la distanza. Ma anche questa soluzione può servire relativamente.

Spero di essere stato abbastanza chiaro, in caso contrario chiedete.
Grazie in anticipo.

ingframin
27-04-2012, 07:24
Non ce la fai, nella migliore delle ipotesi un gps ha 10m di precisione, significa che l'auto può benissimo essere davanti o dietro alla tua senza che tu te ne accorga a meno che non sia a una certa distanza.
Anche li comunque gli algoritmi di google maps non sono molto precisi, sai quante volte per seguire google maps mi sono perso? :muro:

Avevo pensato a calcolare la differenza tra le due coordinate delle auto attraverso le API di Google Maps. Ma questo non mi permette di stabilire la posizione della macchina interessata.

Invece è proprio così che devi fare. Una volta calcolata la distanza e imposto il vincolo che le due auto siano sulla stessa strada, se la distanza è superiore alla precisione (quindi 10m + qualche cos'altro dovuto all'imprecisione di maps) dovresti essere in grado di dire stabilire se l'altra auto sta davanti o dietro alla tua, è un semplice calcolo vettoriale in cui devi riportare delle coordinate dal sistema (latitudine,longitudine) al sistema monodimensionale della strada. In pratica è come quando devi trovare la distanza tra due punti su una curva non rettilinea:
dX = x2-x1
dY = y2-y1
Distanza nello spazio x,y= Radice quadrata (dX^2 + dY^2) -> Teorema di Pitagora

Mentre per vedere la distanza "sulla curva" (o nel tuo caso sulla strada) devi fare l'integrale che va da x1 a x2 della curva che descrive la traiettoria (o nel tuo caso la strada) ma fossi in te cercherei nelle api di google con che funzione si trova la distanza tra 2 punti su una strada perché c'è e si usa per calcolare i percorsi quando chiedi le indicazioni stradali.

pare93
27-04-2012, 17:04
Invece è proprio così che devi fare. Una volta calcolata la distanza e imposto il vincolo che le due auto siano sulla stessa strada, se la distanza è superiore alla precisione (quindi 10m + qualche cos'altro dovuto all'imprecisione di maps) dovresti essere in grado di dire stabilire se l'altra auto sta davanti o dietro alla tua, è un semplice calcolo vettoriale in cui devi riportare delle coordinate dal sistema (latitudine,longitudine) al sistema monodimensionale della strada.

Nel momento in cui io ho la distanza tra le due auto e ho messo per ipotesi che sono nella stessa via, come faccio a determinare se una mi è davanti o dietro ??
Il calcolo vettoriale che dici posso utilizzarlo solamente per calcolare la distanza minima tra le due.

ingframin
27-04-2012, 20:10
E per questo che ti ho detto di fare l'integrale curvilineo sulla retta, se il risultato dell'integrale ti esce negativo e prendi la tua auto come riferimento vuol dire che l'altra è dietro, altrimenti è davanti. Quando applichi il teorema di pitagora non calcoli la distanza, calcoli il modulo della distanza, ma poi il vettore distanza devi orientarlo.
Puoi sempre calcolare la distanza minima come un vettore (dX,dY) e vedere l'angolo in base al sistema di riferimento che hai stabilito, altrimenti il calcolo dell'integrale è l'unica altra via.

gugoXX
28-04-2012, 17:02
Nel momento in cui io ho la distanza tra le due auto e ho messo per ipotesi che sono nella stessa via, come faccio a determinare se una mi è davanti o dietro ??
Il calcolo vettoriale che dici posso utilizzarlo solamente per calcolare la distanza minima tra le due.

Devi sapere in che direzione stanno andando, ovvero devi confrontare le coordinate attuali con quelle di qualche secondo fa, e decidere quindi quella che sta "davanti"

pare93
30-04-2012, 10:58
Ed è possibile lo stesso senza conoscere la destinazione dell' auto davanti ?

gugoXX
30-04-2012, 22:06
Ed è possibile lo stesso senza conoscere la destinazione dell' auto davanti ?

Se sono nella stessa via allora la "destinazione" di entrambe le auto e' il prossimo incrocio.

Resta pero' che se non stanno andando nello stesso posto, occorre che tu definisca cosa vuol dire davanti e cosa dietro.

british
01-05-2012, 22:56
Devi sapere in che direzione stanno andando, ovvero devi confrontare le coordinate attuali con quelle di qualche secondo fa, e decidere quindi quella che sta "davanti"

Le stringhe NMEA già contengono la direzione in gradi.

ciao!

pare93
02-05-2012, 20:02
Si ma questo non permette di determinare se l' auto è davanti

british
03-05-2012, 14:14
Si ma questo non permette di determinare se l' auto è davanti

mi riferivo a gugoXX che diceva di fare un confronto tra coordinate attuali e ultime scorse. Comunque, devi decidere cosa vuol dire "stare davanti".

ciao!

pare93
03-05-2012, 21:01
Per "stare davanti" intendo quell' auto che procede nella mia stessa corsia, verso la mia direzione ed è quella che io vedo di fronte a me.