Newsgroup: it.comp.lang.visual-basic
Titolo: info su distanza tra 2 coordinate latitudine longitudine

salve, avrei necessità di confrontare alcune coordinate registrate in
un database con quelle provenienti da un sistema gps, purtroppo un
requisito essenziale è la massima precisione (diciamo che dovrei
controllare se il punto che ritorna dal gps si trova in un raggio di
circa 10 metri (meglio se meno) dal punto censito, qualcuno mi può
aiutare, grazie marco

m.ver...@alice.it
 wrote:

Basta confrontare le coordinate, ma oggi ho la sfera di cristallo
appannata e non riesco a capire il sistema che intendi utilizzare. 

On 14 Apr, 16:05, "Franz_aRTiglio" <franz...@N0SPAMtin.it> wrote:

intendo dire che con gli opportuni calcoli trigonometrici credo si
possa trovare la distanza tra 2 punti, quello censito nel database e
quello rilevato in tempo reale dal GPS, e quindi per differenza dire
se quel rilevamento è riferito a quel censimento con il minor errore
possibile, purtroppo non conoscendo molto i calcoli trigonometrici
chiedevo se qualcuno aveva già fatto qualcosa del genere

 chiedevo se qualcuno aveva giŕ fatto qualcosa del genere
Ma perche' farlo con i trigonometrici ?
basta confrontare x e y in arrivo dal satellite con
x e y del database:
DXZ = abs (XSat - XDatab)  'distanza coordinata X
DYZ = abs (YSat - YDatab) 'distanza coordinata Y
DX = abs (DXZ - DYZ) ' distanza "incrociata"
Piu' DX sara' vicino allo zero maggiore sara' la "vicinanza"
tra le coordinate satellitari e quelle del database.

 tra le coordinate satellitari e quelle del database.
mi sono rifatto a questo post:
http://groups.google.it/group/it.comp.lang.visual-basic/browse_thread/thread/bc76b7a6277b826c

 chiedevo se qualcuno aveva già fatto qualcosa del genere
Penso che Franz si riferisse al sistema di coordinate.
Su un piano cartesiano è facile, ma la Terra non è piatta quindi il 
sistema di coordinate cambia e cambia di conseguenza il modo di 
calcolare le distanze. A meno -naturalmente- di approssimazioni/proiezioni.
ciao
stefano


Io l'ho fatto qualche anno fa. Dai un'occhiata a questo thread:
http://www.andreavb.com/forum/viewtopic_475.html
(E' un po' lungo).
Spero sia utile. Ciao.
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

 - Mostra testo tra virgolette -
effettivamente è un po lungo e ci sono varie versioni, non è mica che
mi puoi postare il codice che ai usato
grazie, marco

m.ver...@alice.it
 ha scritto:

prova con questo in 
vb.net
i param sono espressi in radianti, negativi Est e Sud , 'r' è il raggio 
della sfera =6372.795 raggio medio della Terra , siccome questa non è 
perfettamente sferica ci sta un errore max del 0.5%.
Private Function DistanzaSferica(ByVal lat1 As Double, ByVal lon1 As 
Double, ByVal lat2 As Double, ByVal lon2 As Double, Optional ByVal r As 
Double = 6372.795) As Double
         Dim p1 As Double
         Dim p2 As Double
         Dim p3 As Double
         p1 = Math.Cos(lat1) * Math.Cos(lon1) * Math.Cos(lat2) * 
Math.Cos(lon2)
         p2 = Math.Cos(lat1) * Math.Sin(lon1) * Math.Cos(lat2) * 
Math.Sin(lon2)
         p3 = Math.Sin(lat1) * Math.Sin(lat2)
         Dim pt As Double = p1 + p2 + p3
         Dim acs As Double = Math.Acos(pt)
         Return acs * r
     End Function

scusa,i parametri sono negativi OVEST(-PI e PI) e Sud(-PI/2 e PI/2).

 mi puoi postare il codice che ai usato
Il codice completo che Ho usato è nell'ultimo post di quel thread, e nel
primo post c'è la formula per il calcolo della distanza ortodromica.



sto facendo alcune prove e per ora i risultati mi sembrano
interessanti, un paio di chiarimenti;
1-se non sbaglio la distanza ritorna in km ?
2-di seguito un semplice test (ritorna 1,46922426909981, secondo te
corretto)
Public Function MyTest()
 Dim a As a_pos
 Dim b As a_pos
 a.lat = 43.713432312
 a.lng = 10.
9035015106
 b.lat = 43.
7136001587
 b.lng = 10.
9033374786
 Call GetSmallestDistance(a, b)
End Function
3-in linea di massima qual'è il livello di precisione
4-per convertire in metri immagino sia sufficiente dividere per 1000
ancora grazie mille, ciao marco

 4-per convertire in metri immagino sia sufficiente dividere per 1000
se il valore è in km, per avere i metri dovrai moltiplicare per 1000
ciao
stefano

 
m.verac...@alice.it
 ha scritto:

ai ragione, scusa ma credo sia ora di fare una pausa, c'è qualcosa che
non quadra, ho lanciato la funzione cosi come ti allego
Public Function MyTest()
 Dim a As a_pos
 Dim b As a_pos
 a.lat = 43.713432312
 a.lng = 10.
9035015106
 b.lat = 43.
7136001587
 b.lng = 10.
9033374786
 Call GetSmallestDistance(a, b)
End Function
purtroppo ritorna 1467,37937910565 in metri ma sono certo di avere
passato le coordinate di due punti distanti circa 10 metri tra loro
ciao

 4-per convertire in metri immagino sia sufficiente dividere per 1000
1 - si in km, ma si può facilmente convertire in miglia, in miglia marine,
in metri, in iarde, ecc. In effetti nello sviluppo successivo che Jonathan
fece, e di cui mi inviò un eseguibile che non trovo più, lui aggiunse una
combobox nella quale si selezionava un'unità di misura - km, miles, yds,...
- e automaticamente il valore veniva convertito.
2 - Non so se è corretto, io all'epoca feci delle ricerche e riuscii a
trovare delle combinazioni di coppie di punti e distanze conosciute in modo
da confrontare i risultati delle mie routine di calcolo. Ma ricordo che
scoprii una cosa importante: esistono diverse formule di calcolo della
distanza, ed ognuna restituisce un risultato diverso. Naturalmente le
differenze sono minime - mi sembra che si vada dell'ordine della decina di
metri su punti agli antipodi, cioè su 16.000 chilometri. Ad esempio, se
volessi lanciare un missile sul municipio di Sydney potrei sbagliare di
dieci metri e beccare invece l'edicola di fronte, perché ho usato una
formula piuttosto che un'altra. Ma credo anche che i GPS militari si
ricalibrino dopo una certa distanza percorsa proprio per questo motivo - ma
sono pur sempre delle differenze che un essere umano potrebbe ritenere
sensibili. Perciò è bene che tu lo sappia e ne tenga conto: la formula di
calcolo che c'è all'inizio del thread fu fornita all'epoca da Jonathan,
probabilmente era quella usata dal suo insegnante, ma magari tu ne potresti
voler utilizzare un'altra e in tal caso dovrai fare delle ricerche. Queste
formule diverse esistono perché la forma della Terra non è né sferica né
regolare, e addirittura calcolare la distanza al suolo potrebbe non essere
congruente. Cioè, sempre per arrivare fino a Sydney, tu potresti tracciare
una linea immaginaria con la quale attraversare l'Oceano Indiano oppure
l'Himalaya, e le due distanze potrebbero non coincidere nemmeno
quadrangolando la seconda al livello del mare. Capisci ciò che intendo?
3 - Il livello assoluto di precisione dipende dalla formula usata, come ho
detto per il punto 2.
Invece la precisione specifica della mia formula tra un calcolo e l'altro è
abbastanza accurata. Cioè, se con la mia formula calcolo la distanza tra
Firenze e Roma e viene fuori 250 km. più i decimali, poi con la stessa
formula calcolo la distanza tra Roma e Napoli e viene 200 km. più i
decimali, calcolando la distanza tra Firenze e Napoli viene fuori 450 km.
più la somma dei decimali con un'accuratezza all'undicesimo decimale. Ho
avuto all'epoca uno scambio di e-mail con Jonathan e facendo delle prove
risultava che mettendo, diciamo, 20° Ovest o 380° Ovest la differenza c'era
sull'undicesimo decimale, cioè sul decimillesimo di millimetro. Di più non
ti so dire ma ti ripeto che io ti ho segnalato uno spunto, poi dovrai tu
studiare le tue esigenze e i vari metodi per affrontarle e ciò comporterà
anche molte ricerche sul web. La buona notizia è che probabilmente oggi è
disponibile molto più materiale del 2002.
4 - No: come ti hanno già detto è suficiente *moltiplicare* per mille.
Ciao e buon lavolo.
