PDA

View Full Version : [coordinare geografiche] come si calcola la distanza tra 2 punti?


giova22
14-11-2007, 16:53
Ciao

Mettiamo che abbia 2punti di cui so latitudine e longitudine. Come è possibile calcolare la distanza in km?

Sto cercando, ma non trovo niente in internet e non riesco ad andare nella biblioteca dell univeersità ancora per vari giorni..... Dovrebbe essere una cosa piuttosto semplice...

Vash88
14-11-2007, 17:31
non so rispondere alla tua domanda, dipende da che livello di precisione vuoi avere, avendo fatto topografia alle superiori ti dico che non è banale. Già dopo 3-400 metri devi considerare la deviazione data dall' atmosfera e dalla curvatura terrestre e dalle incertezze degli strumenti. però con le coordinate non so aiutarti.

giova22
14-11-2007, 17:33
non ho assolutamente bisogno di una precisione al millimetro. però anche se il calcolo è complicato non mi importa. Tanto lo farebbe il pc (è per un programma che sto facendo). Magatri se hai le formule mettile, tanto il pc se ne frega di quanti contti deve fare :D

MaxArt
14-11-2007, 17:36
Mmm, non esattamente semplicissimo, ma si può ricavare. Suppongo che tu intenda la distanza "in linea d'aria", cioè seguendo la geodetica che passa per i due punti (che è una circonferenza il cui centro è quello della Terra).
Dunque, io farei: calcolerei la distanza euclidea tra i due punti, che se hanno longitudine rispettivamente r1 ed r2, e latitudine t1 e t2, hanno coordinate rispettivamente
(R*cos(r1)*cos(t1), R*sin(r1)*cos(t1), R*sin(t1)) e (R*cos(r2)*cos(t2), R*sin(r2)*cos(t2), R*sin(t2)),
dove R è il raggio della Terra (che assumeremo sferica, per semplicità). Indichiamo con D tale distanza, a questo punto ci ricaviamo l'angolo al centro corrispondente tramite la relazione
a = 2*arcsin(D/2R),
moltiplichiamo per R ed il gioco è fatto. :stordita:

giova22
14-11-2007, 17:49
Mmm, non esattamente semplicissimo, ma si può ricavare. Suppongo che tu intenda la distanza "in linea d'aria", cioè seguendo la geodetica che passa per i due punti (che è una circonferenza il cui centro è quello della Terra).
Dunque, io farei: calcolerei la distanza euclidea tra i due punti, che se hanno longitudine rispettivamente r1 ed r2, e latitudine t1 e t2, hanno coordinate rispettivamente
(R*cos(r1)*cos(t1), R*sin(r1)*cos(t1), R*sin(t1)) e (R*cos(r2)*cos(t2), R*sin(r2)*cos(t2), R*sin(t2)),
dove R è il raggio della Terra (che assumeremo sferica, per semplicità). Indichiamo con D tale distanza, a questo punto ci ricaviamo l'angolo al centro corrispondente tramite la relazione
a = 2*arcsin(D/2R),
moltiplichiamo per R ed il gioco è fatto. :stordita:

ok ti ringrazio.
Adesso vado ad implementarlo. Il programma sarà rilasciato in GPL, quindi ben vengano altri aiuti :D

Ah una cosa, le mie coordinate sono in ore, primi e secondi, sai come posso inseirli nei conti? Scusa le banalità, ma non ho mai fatto conti simili in vita mia

MaxArt
14-11-2007, 17:54
Le ore sono i gradi. I minuti primi li dividi per 60 e li aggiungi ai gradi, i secondi li dividi per 3600 e li aggiungi al totale.
ATTENZIONE: il calcolo che ti ho detto io presuppone (nell'ultimo passaggio, in particolare) la misurazione degli angoli in radianti, e non in gradi. Per ovviare a ciò, moltiplichi i gradi per pi greco e dividi per 180 ed ottieni la corrispondente misura in radianti.

Esplicitamente, un radiante equivale a 180/pi = 57.296 gradi circa.

Vash88
14-11-2007, 18:01
http://it.wikipedia.org/wiki/Sistema_di_coordinate_polari#Conversione_da_coordinate_polari_a_cartesiane
Questo può essere di aiuto. A cosa serve il programma?
Le ore sono i gradi. I minuti primi li dividi per 60 e li aggiungi ai gradi, i secondi li dividi per 3600 e li aggiungi al totale.
ATTENZIONE: il calcolo che ti ho detto io presuppone (nell'ultimo passaggio, in particolare) la misurazione degli angoli in radianti, e non in gradi. Per ovviare a ciò, moltiplichi i gradi per pi greco e dividi per 180 ed ottieni la corrispondente misura in radianti.

Esplicitamente, un radiante equivale a 180/pi = 57.296 gradi circa.

Se non li converte i gradi in radianti è in forma sessadecimale, che potrebbe anche andare bene, dipende da cosa vuole.
Piccola nota, di solito in topografia il cerchio goniometrico ha 400°

giova22
14-11-2007, 18:21
e pensare che ho appena passato analisi3 e mi trovo in difficoltà con le coordinate....

Il programma serve per interfacciarmi con il gps. Ho un GPS USB. Ora ho finito la parte dove leggo i vari dati, e sto facendo la parte dove calcolo la distanza in linea d' aria alla meta, e la distanza delle 3 città più vicine.

Mr.Boson
14-11-2007, 18:22
Anche se puoi riportare tutto su un piano cartesiano, con le dovute basiliari conoscenze matematiche/goniometriche, ci sono sistemi molto più semplici:

http://www.matematicamente.it/staticfiles/approfondimenti/astronomia/Modulo_Distanza_Globo.xls

Direttamente dalla pubblicazione di un Prof. di matematica.

giova22
14-11-2007, 18:25
(R*cos(r1)*cos(t1), R*sin(r1)*cos(t1), R*sin(t1))

(R*cos(r2)*cos(t2), R*sin(r2)*cos(t2), R*sin(t2))


ma in queste 2 formule otterrei 2 terne di valori.

Per ogni valore della terna devo fare pitagora? Non mi torna questo punto

giova22
14-11-2007, 18:27
Anche se puoi riportare tutto su un piano cartesiano, con le dovute basiliari conoscenze matematiche/goniometriche, ci sono sistemi molto più semplici:

http://www.matematicamente.it/staticfiles/approfondimenti/astronomia/Modulo_Distanza_Globo.xls

Direttamente dalla pubblicazione di un Prof. di matematica.

molto carino come documento excel, ma non vedo le formule usate anche se vado sulle caselle. Come mai?

MaxArt
14-11-2007, 18:29
ma in queste 2 formule otterrei 2 terne di valori.

Per ogni valore della terna devo fare pitagora? Non mi torna questo puntoTu Pitagora l'hai sempre applicato sul piano, suppongo. Beh, si può applicare anche nello spazio ed in quante dimensioni vuoi ;)
Se nel piano facevi sqrt((x1-x2)^2+(y1-y2)^2), nello spazio non devi far altro che aggiungere sotto la radice la quantità (z1-z2)^2.

giova22
14-11-2007, 18:30
Tu Pitagora l'hai sempre applicato sul piano, suppongo. Beh, si può applicare anche nello spazio ed in quante dimensioni vuoi ;)
Se nel piano facevi sqrt((x1-x2)^2+(y1-y2)^2), nello spazio non devi far altro che aggiungere sotto la radice la quantità (z1-z2)^2.

ok vado a provare e confronto poi i risultati in google earth.

MaxArt
14-11-2007, 18:32
molto carino come documento excel, ma non vedo le formule usate anche se vado sulle caselle. Come mai?Credo che abbia scritto due righe di codice in VB... ed ha protetto le celle. :fagiano:

Mr.Boson
14-11-2007, 18:33
Credo che abbia scritto due righe di codice in VB... ed ha protetto le celle. :fagiano:

Io le vedo....hai provato a disabilitare la protezione delle macro di Excel?

EDIT: il foglio è protetto...o meglio è il codice VB protetto....ma il contenuto è operante

giova22
14-11-2007, 18:37
Io le vedo....hai provato a disabilitare la protezione delle macro di Excel?

EDIT: il foglio è protetto...o meglio è il codice VB protetto....ma il contenuto è operante

uso openoffice. Se riuscite a vedere il codice voi ditemelo :D

MaxArt
14-11-2007, 18:38
Ooops, anche io OpenOffice :D

Mr.Boson
14-11-2007, 18:40
nono...il sorgente VB non lo vedo nemmeno io....ma il calcolo mi funziona

giova22
14-11-2007, 18:42
nono...il sorgente VB non lo vedo nemmeno io....ma il calcolo mi funziona

anche a me funziona il calcolo, però non vedendolo sarebbe troppo complesso per il mo programmino chiedere di interaginre con openoffice (e non saprei enanche come fare).

Mr.Boson
14-11-2007, 18:44
anche a me funziona il calcolo, però non vedendolo sarebbe troppo complesso per il mo programmino chiedere di interaginre con openoffice (e non saprei enanche come fare).

ah scusa....ero rimasto alla parte del calcolo...non alla programmazione..

non ti so aiutare su questo

giova22
14-11-2007, 18:58
ah scusa....ero rimasto alla parte del calcolo...non alla programmazione..

non ti so aiutare su questo

si cioè mi servono le formule, poi le devo adattare in c# per inserirle nel programmino. Grazie lo stesso

giova22
14-11-2007, 19:50
Ciao

Sto implementando le formule che mi avete dato.

Girando in internet però ho trovato anche questa:
http://en.wikipedia.org/wiki/Great-circle_distance

Mi pare vada bene anche questa che ne dite?

Mr.Boson
14-11-2007, 19:57
mi sembra vadano bene.

Cavolo...su Wikipedia c'è di tutto!

giova22
14-11-2007, 20:17
mi sembra vadano bene.

Cavolo...su Wikipedia c'è di tutto!

già. Ho provato quella di wikipedia e sembra funzionare. Adesso finisco di mettere anche quella di MaxArt, e vedo quale da una maggiore precisione. Ciao e grazie

MaxArt
14-11-2007, 22:31
Girando in internet però ho trovato anche questa:
http://en.wikipedia.org/wiki/Great-circle_distanceLa prima formula che ti fornisce per l'angolo mi pare la più elegante. Ci avevo pensato anch'io, ma poi avevi già scritto il post :D
In sostanza, se fai il prodotto scalare tra i vettori posizione dei due punti, ottieni per forza R^2*cos(a). A quel punto, dividi per R^2, fai l'arcocoseno e moltiplichi per R.
La seconda formula, con un po' di passaggi, è quella che ti ho dato io.
La terza non so adesso da dove l'abbia ricavata, ma penso che le altre due siano già sufficienti :D

Ah, se il tuo linguaggio di programmazione non ha già le funzioni arcsin e arccos, puoi usare la seguente (orrenda, ma tant'è) relazione:

http://operaez.net/mimetex/%5carcsin x=2%5carctan%5cfrac{x}{1+%5csqrt{1-x^2}}
Ed ovviamente arccos x = pi/2 - arcsin x.

giova22
15-11-2007, 09:04
La prima formula che ti fornisce per l'angolo mi pare la più elegante. Ci avevo pensato anch'io, ma poi avevi già scritto il post :D
In sostanza, se fai il prodotto scalare tra i vettori posizione dei due punti, ottieni per forza R^2*cos(a). A quel punto, dividi per R^2, fai l'arcocoseno e moltiplichi per R.
La seconda formula, con un po' di passaggi, è quella che ti ho dato io.
La terza non so adesso da dove l'abbia ricavata, ma penso che le altre due siano già sufficienti :D

Ah, se il tuo linguaggio di programmazione non ha già le funzioni arcsin e arccos, puoi usare la seguente (orrenda, ma tant'è) relazione:

http://operaez.net/mimetex/%5carcsin x=2%5carctan%5cfrac{x}{1+%5csqrt{1-x^2}}
Ed ovviamente arccos x = pi/2 - arcsin x.

ti ringrazio. Per fortuna usando c# e .NET ho dentro tutto, dal sen al cos, all'arctan e tutto il resto. L' unica cosa idiota e che l' elevamento a potenza non lo fa con gli int e i double, quindi devo fare una doppia moltiplicazione a mano.

Ah qualcuo di voi ha per caso il GPS su usb o seriale? COsì magari mi aiuta nel beta test!!! :D