Discussione:
calcolo distanza
(troppo vecchio per rispondere)
Marco
2005-07-14 06:16:43 UTC
Permalink
Qualcuno si è cimentato con il calcolo della distanza tra due punti con dati
da gps, latitudine e longitudine ?
In una tabella contenente in un campo la latitudine e nell'altro la
longitudine dovrei calcolare la distanza tra ciascun punto-record tramite
query.

grazie
Pablitomf (Maurizio Facciuti)
2005-07-14 07:16:47 UTC
Permalink
Post by Marco
Qualcuno si è cimentato con il calcolo della distanza tra due punti con
dati da gps, latitudine e longitudine ?
Ma tu ti rendi conto di cosa stai parlando?
No?
Guarda un pò?
http://www.greentarget.com/articolo.asp?cui=-2001908436&CodPubblicazione=92&VisBanner=null
oppure
http://host.uniroma3.it/docenti/carlucci/Tesine/Gps/ricevere.htm
o ancora
http://www.cieloeterra.it/articoli.sorti/sorti.html
Post by Marco
In una tabella contenente in un campo la latitudine e nell'altro la
longitudine dovrei calcolare la distanza tra ciascun punto-record tramite
query.
grazie
Marco
2005-07-14 07:40:47 UTC
Permalink
Post by Pablitomf (Maurizio Facciuti)
Post by Marco
Qualcuno si è cimentato con il calcolo della distanza tra due punti con
dati da gps, latitudine e longitudine ?
Ma tu ti rendi conto di cosa stai parlando?
No?
Guarda un pò?
http://www.greentarget.com/articolo.asp?cui=-2001908436&CodPubblicazione=92&VisBanner=null
oppure
http://host.uniroma3.it/docenti/carlucci/Tesine/Gps/ricevere.htm
o ancora
http://www.cieloeterra.it/articoli.sorti/sorti.html
Post by Marco
In una tabella contenente in un campo la latitudine e nell'altro la
longitudine dovrei calcolare la distanza tra ciascun punto-record tramite
query.
grazie
Se le coordinate sono poche o lo si fa a "mano" o con excel :
http://tinyurl.com/6wnnx
http://tinyurl.com/8egd9
http://tinyurl.com/8kty2

viceversa...

grazie
Carlo Costarella
2005-07-14 09:19:35 UTC
Permalink
Post by Marco
Qualcuno si è cimentato con il calcolo della distanza tra due punti con
dati da gps, latitudine e longitudine ?
In una tabella contenente in un campo la latitudine e nell'altro la
longitudine dovrei calcolare la distanza tra ciascun punto-record tramite
query.
grazie
In questi calcoli sono implicate formule abbastanza complesse con l'utilizzo
di seno, coseno, arcoseno, PGreco.
Credo che una volta trovata la formula matematica, ti convenga usare Excel
nella sua automazione con Access. Certo puoi riscrivere tutto in Access ma
se lo fà già Excel?...

Ciao, Carlo
Roberto dalla campagna
2005-07-14 10:19:04 UTC
Permalink
Post by Marco
Qualcuno si è cimentato con il calcolo della distanza tra due punti con dati
da gps, latitudine e longitudine ?
In una tabella contenente in un campo la latitudine e nell'altro la
longitudine dovrei calcolare la distanza tra ciascun punto-record tramite
query.
grazie
Vai sul Sito Comune (link qui sotto) e nella Sezione Modules leggi la FAQ
intitolata "5.23 Raccolta di sub e funzioni utili".
Scarica il database di esempio allegato alla FAQ e seleziona la Categoria
intitolata "Latitude/Longitude"; nella lista dei topic trovi anche quello
intitolato "Function GreatArcDistance" che fa riferimento ad una funzione
che serve a calcolare la più corta distanza tra due punti dell terra di cui
si conoscono la latitudine e la longitudine.
Comunque riporto qui di seguito la funzione che dovrebbe fare ciò che ti
serve:

Function GreatArcDistance(Lat1 As Double, Lon1 As Double, _
Lat2 As Double, Lon2 As Double, Radius As Double) As Double
'
' Calculates the Great Arc (shortest) distance
' between 2 locations on the globe.
'
' Uses functions from Trigonometry
'
Dim X1 As Double, Y1 As Double, Z1 As Double
Dim X2 As Double, Y2 As Double, Z2 As Double
Dim CosX As Double, ChordLen As Double
LatLongToXYZ Lat1, Lon1, Radius, X1, Y1, Z1
LatLongToXYZ Lat2, Lon2, Radius, X2, Y2, Z2
ChordLen = Sqr((X1 - X2) * (X1 - X2) + (Y1 - Y2) * (Y1 - Y2) + (Z1 - Z2) *
(Z1 - Z2))
CosX = 1 - ChordLen * ChordLen / (2 * Radius * Radius)
Debug.Print X1, Y1, Z1
Debug.Print X2, Y2, Z2
Debug.Print ChordLen, CosX
If CosX = 1 Or CosX = -1 Then
GreatArcDistance = 0
Else
GreatArcDistance = Sqr(1 - CosX * CosX) * Radius * PI() / 2
End If
End Function
--
Roberto

-----------------------------------------------------
il Sito Comune di it.comp.appl.access
http://www.sitocomune.com
----------------------------------------------------
Carlo Costarella
2005-07-14 11:23:22 UTC
Permalink
Post by Roberto dalla campagna
Post by Marco
Qualcuno si è cimentato con il calcolo della distanza tra due punti con
dati
Post by Marco
da gps, latitudine e longitudine ?
In una tabella contenente in un campo la latitudine e nell'altro la
longitudine dovrei calcolare la distanza tra ciascun punto-record tramite
query.
grazie
Vai sul Sito Comune (link qui sotto) e nella Sezione Modules leggi la FAQ
intitolata "5.23 Raccolta di sub e funzioni utili".
Scarica il database di esempio allegato alla FAQ e seleziona la Categoria
intitolata "Latitude/Longitude"; nella lista dei topic trovi anche quello
intitolato "Function GreatArcDistance" che fa riferimento ad una funzione
che serve a calcolare la più corta distanza tra due punti dell terra di cui
si conoscono la latitudine e la longitudine.
Comunque riporto qui di seguito la funzione che dovrebbe fare ciò che ti
Function GreatArcDistance(Lat1 As Double, Lon1 As Double, _
Lat2 As Double, Lon2 As Double, Radius As Double) As Double
'
' Calculates the Great Arc (shortest) distance
' between 2 locations on the globe.
'
' Uses functions from Trigonometry
'
Dim X1 As Double, Y1 As Double, Z1 As Double
Dim X2 As Double, Y2 As Double, Z2 As Double
Dim CosX As Double, ChordLen As Double
LatLongToXYZ Lat1, Lon1, Radius, X1, Y1, Z1
LatLongToXYZ Lat2, Lon2, Radius, X2, Y2, Z2
ChordLen = Sqr((X1 - X2) * (X1 - X2) + (Y1 - Y2) * (Y1 - Y2) + (Z1 - Z2) *
(Z1 - Z2))
CosX = 1 - ChordLen * ChordLen / (2 * Radius * Radius)
Debug.Print X1, Y1, Z1
Debug.Print X2, Y2, Z2
Debug.Print ChordLen, CosX
If CosX = 1 Or CosX = -1 Then
GreatArcDistance = 0
Else
GreatArcDistance = Sqr(1 - CosX * CosX) * Radius * PI() / 2
End If
End Function
--
Roberto
Ciao Roberto
vorrei sbagliarmi ma mi sembra che Marco abbia bisogno di conoscere la
differenza tra due valori di Lat e Lon. espressi, immagino in Km.
Non so se la funzione proposta ottenga questo risultato. Nelle mie prove ho
trovato molta differenza con il risultato di questo link:
http://216.147.18.102/dist/index

Ciao, Carlo
Roberto dalla campagna
2005-07-14 13:38:08 UTC
Permalink
Post by Carlo Costarella
Post by Roberto dalla campagna
Post by Marco
Qualcuno si è cimentato con il calcolo della distanza tra due punti con
dati
Post by Marco
da gps, latitudine e longitudine ?
In una tabella contenente in un campo la latitudine e nell'altro la
longitudine dovrei calcolare la distanza tra ciascun punto-record tramite
query.
grazie
Vai sul Sito Comune (link qui sotto) e nella Sezione Modules leggi la FAQ
intitolata "5.23 Raccolta di sub e funzioni utili".
Scarica il database di esempio allegato alla FAQ e seleziona la Categoria
intitolata "Latitude/Longitude"; nella lista dei topic trovi anche quello
intitolato "Function GreatArcDistance" che fa riferimento ad una funzione
che serve a calcolare la più corta distanza tra due punti dell terra di cui
si conoscono la latitudine e la longitudine.
Comunque riporto qui di seguito la funzione che dovrebbe fare ciò che ti
Function GreatArcDistance(Lat1 As Double, Lon1 As Double, _
Lat2 As Double, Lon2 As Double, Radius As Double) As Double
'
' Calculates the Great Arc (shortest) distance
' between 2 locations on the globe.
'
' Uses functions from Trigonometry
'
Dim X1 As Double, Y1 As Double, Z1 As Double
Dim X2 As Double, Y2 As Double, Z2 As Double
Dim CosX As Double, ChordLen As Double
LatLongToXYZ Lat1, Lon1, Radius, X1, Y1, Z1
LatLongToXYZ Lat2, Lon2, Radius, X2, Y2, Z2
ChordLen = Sqr((X1 - X2) * (X1 - X2) + (Y1 - Y2) * (Y1 - Y2) + (Z1 -
Z2)
Post by Carlo Costarella
Post by Roberto dalla campagna
*
(Z1 - Z2))
CosX = 1 - ChordLen * ChordLen / (2 * Radius * Radius)
Debug.Print X1, Y1, Z1
Debug.Print X2, Y2, Z2
Debug.Print ChordLen, CosX
If CosX = 1 Or CosX = -1 Then
GreatArcDistance = 0
Else
GreatArcDistance = Sqr(1 - CosX * CosX) * Radius * PI() / 2
End If
End Function
--
Roberto
Ciao Roberto
vorrei sbagliarmi ma mi sembra che Marco abbia bisogno di conoscere la
differenza tra due valori di Lat e Lon. espressi, immagino in Km.
Ritengo che l'unità di misura sia la stessa usata per indicare l'argomento
Radius (nel caso in discussione il raggio della terra): se lo indichi in Km
penso che la funzione ti ritorni il risultato in KM.
Post by Carlo Costarella
Non so se la funzione proposta ottenga questo risultato. Nelle mie prove ho
http://216.147.18.102/dist/index
Non ho mai usato quella funzione, ma visto che è pubblicata da mamma
Microsoft presupponevo fosse giusta.
Ma tu che valore hai dato all'argomento Radius?
Hai memorizzaro nello stesso modulo della funzione di cui sopra anche la
seguente Sub:

Sub LatLongToXYZ(Lat As Double, Lon As Double, Radius As Double, x As
Double, y As Double, z As Double)
'
' Converts Latitude, Longitude, Radius to 3d-Cartesian coordinates
'
' Assumes:
' X axis runs through 270 (-X) and 90 (+X) Latitude
' Y axis runs North (+Y) to South (-Y)
' Z axis runs through 0 (-Z) and 180 (+Z) Latitude
'
y = Radius * Sin(Deg2Rad(Lat))
x = Radius * Sin(Deg2Rad(Lon)) * Cos(Deg2Rad(Lat))
z = -Radius * Cos(Deg2Rad(Lon)) * Cos(Deg2Rad(Lat))
End Sub

che viene richiamata dalla funzione GreatArcDistance?

Hai memorizzato anche la seguente funzione:

Function PI() As Double
PI = Atn(1) * 4
End Function

per la determinazione del valore di P greco, anch'essa invocata dalla
funzione GreatArcDistance?
Post by Carlo Costarella
Ciao, Carlo
--
Roberto

-----------------------------------------------------
il Sito Comune di it.comp.appl.access
http://www.sitocomune.com
----------------------------------------------------
Marco
2005-07-14 14:23:36 UTC
Permalink
[cut]
Post by Roberto dalla campagna
Ritengo che l'unità di misura sia la stessa usata per indicare l'argomento
Radius (nel caso in discussione il raggio della terra): se lo indichi in Km
penso che la funzione ti ritorni il risultato in KM.
esatto
Post by Roberto dalla campagna
Post by Carlo Costarella
Non so se la funzione proposta ottenga questo risultato. Nelle mie prove
ho
Post by Carlo Costarella
http://216.147.18.102/dist/index
Non ho mai usato quella funzione, ma visto che è pubblicata da mamma
Microsoft presupponevo fosse giusta.
Ma tu che valore hai dato all'argomento Radius?
Hai memorizzaro nello stesso modulo della funzione di cui sopra anche la
Sub LatLongToXYZ(Lat As Double, Lon As Double, Radius As Double, x As
Double, y As Double, z As Double)
'
' Converts Latitude, Longitude, Radius to 3d-Cartesian coordinates
'
' X axis runs through 270 (-X) and 90 (+X) Latitude
' Y axis runs North (+Y) to South (-Y)
' Z axis runs through 0 (-Z) and 180 (+Z) Latitude
'
y = Radius * Sin(Deg2Rad(Lat))
x = Radius * Sin(Deg2Rad(Lon)) * Cos(Deg2Rad(Lat))
z = -Radius * Cos(Deg2Rad(Lon)) * Cos(Deg2Rad(Lat))
End Sub
che viene richiamata dalla funzione GreatArcDistance?
Function PI() As Double
PI = Atn(1) * 4
End Function
per la determinazione del valore di P greco, anch'essa invocata dalla
funzione GreatArcDistance?
Post by Carlo Costarella
Ciao, Carlo
--
Roberto
-----------------------------------------------------
il Sito Comune di it.comp.appl.access
http://www.sitocomune.com
----------------------------------------------------
Anche se è un assurdo in matematica, ma queste misure variano di molto a
seconda delle formule che si usano.
Poi c'è da considerare se si assume la terra come una sfera con raggio 6 371
000,707m o un elissoide con raggio
6 378 137,000 m.
Comunque sembra anche a me che quella formula non si molto esatta.
I dati che ho a disposizione sono in formato gradi decimali es 46,662860
12,603020 e la distanza è preferibile venga espressa in metri. Ora chiedo
comunque l'aiuto dell'esperto/i....
Ho trovato questo codice che ho rimaneggiato per quelle che sono le mie
conoscenze e sembra fornire dati attendibili:
Public Function calcoli(a1 As Double, b1 As Double, a2 As Double, b2 As
Double, De As String, Mi As String) As Double
On Error GoTo Err_Calc
If a1 = a2 And b1 = b2 Then
calcoli = 0
Exit Function
End If
Dim x As Double
Dim negX As Double
Dim r As Single
Dim radMult As Double
Dim dblPi As Double
If De = "d" Then
dblPi = 3.14159269358979
radMult = dblPi / 180
a1 = a1 * radMult
b1 = b1 * radMult
a2 = a2 * radMult
b2 = b2 * radMult
End If
If Mi = "M" Then
r = 3963.1
Else
r = 6378137
End If
x = ((Cos(a1) * Cos(a2) * Cos(b1) * Cos(b2)) + (Cos(a1) * Sin(b1) * Cos(a2)
* Sin(b2)) + (Sin(a1) * Sin(a2)))
negX = x * -1
x = Atn(negX / (Sqr((negX * x) + 1))) + 2 * Atn(1)
calcoli = x * r
Exit_Calc:
Exit Function
Err_Calc:
MsgBox Err.Number & " - " & Err.Description
Resume Exit_Calc
End Function

Per il risultato ho usato la query:
SELECT DISTINCTROW tblTest0.a AS a1, tblTest0.b AS b1, tblTest0_1.a AS a2,
tblTest0_1.b AS b2, calcoli([a1],[b1],[a2],[b2],"d","k") AS Risultato
FROM tblTest0, tblTest0 AS tblTest0_1;

la quale va rimaneggiata perchè fornisce valori duplicati non utili.

grazie
es
tblTest0 TestID a b
1 46,662860 12,603020
2 46,662880 12,602919
3 46,662962 12,602385


d a1 b1 a2 b2 Risultato
46,662860 12,603020 46,662860 12,603020 0
46,662880 12,602919 46,662860 12,603020 8,03144098926222
46,662962 12,602385 46,662860 12,603020 49,82349317781
46,662860 12,603020 46,662880 12,602919 8,03144098926222
46,662880 12,602919 46,662880 12,602919 0
46,662962 12,602385 46,662880 12,602919 41,8049305461646
46,662860 12,603020 46,662962 12,602385 49,82349317781
46,662880 12,602919 46,662962 12,602385 41,8049305461646
46,662962 12,602385 46,662962 12,602385 0
Carlo Costarella
2005-07-14 15:29:33 UTC
Permalink
Post by Marco
Post by Carlo Costarella
Post by Roberto dalla campagna
Post by Marco
Qualcuno si è cimentato con il calcolo della distanza tra due punti con
dati
Post by Marco
da gps, latitudine e longitudine ?
In una tabella contenente in un campo la latitudine e nell'altro la
longitudine dovrei calcolare la distanza tra ciascun punto-record
tramite
Post by Carlo Costarella
Post by Roberto dalla campagna
Post by Marco
query.
grazie
Vai sul Sito Comune (link qui sotto) e nella Sezione Modules leggi la
FAQ
Post by Carlo Costarella
Post by Roberto dalla campagna
intitolata "5.23 Raccolta di sub e funzioni utili".
Scarica il database di esempio allegato alla FAQ e seleziona la
Categoria
Post by Carlo Costarella
Post by Roberto dalla campagna
intitolata "Latitude/Longitude"; nella lista dei topic trovi anche
quello
Post by Carlo Costarella
Post by Roberto dalla campagna
intitolato "Function GreatArcDistance" che fa riferimento ad una
funzione
Post by Carlo Costarella
Post by Roberto dalla campagna
che serve a calcolare la più corta distanza tra due punti dell terra di cui
si conoscono la latitudine e la longitudine.
Comunque riporto qui di seguito la funzione che dovrebbe fare ciò che ti
Function GreatArcDistance(Lat1 As Double, Lon1 As Double, _
Lat2 As Double, Lon2 As Double, Radius As Double) As Double
'
' Calculates the Great Arc (shortest) distance
' between 2 locations on the globe.
'
' Uses functions from Trigonometry
'
Dim X1 As Double, Y1 As Double, Z1 As Double
Dim X2 As Double, Y2 As Double, Z2 As Double
Dim CosX As Double, ChordLen As Double
LatLongToXYZ Lat1, Lon1, Radius, X1, Y1, Z1
LatLongToXYZ Lat2, Lon2, Radius, X2, Y2, Z2
ChordLen = Sqr((X1 - X2) * (X1 - X2) + (Y1 - Y2) * (Y1 - Y2) + (Z1 -
Z2)
Post by Carlo Costarella
Post by Roberto dalla campagna
*
(Z1 - Z2))
CosX = 1 - ChordLen * ChordLen / (2 * Radius * Radius)
Debug.Print X1, Y1, Z1
Debug.Print X2, Y2, Z2
Debug.Print ChordLen, CosX
If CosX = 1 Or CosX = -1 Then
GreatArcDistance = 0
Else
GreatArcDistance = Sqr(1 - CosX * CosX) * Radius * PI() / 2
End If
End Function
--
Roberto
Ciao Roberto
vorrei sbagliarmi ma mi sembra che Marco abbia bisogno di conoscere la
differenza tra due valori di Lat e Lon. espressi, immagino in Km.
Ritengo che l'unità di misura sia la stessa usata per indicare l'argomento
Radius (nel caso in discussione il raggio della terra): se lo indichi in Km
penso che la funzione ti ritorni il risultato in KM.
Post by Carlo Costarella
Non so se la funzione proposta ottenga questo risultato. Nelle mie prove
ho
Post by Carlo Costarella
http://216.147.18.102/dist/index
Non ho mai usato quella funzione, ma visto che è pubblicata da mamma
Microsoft presupponevo fosse giusta.
Ma tu che valore hai dato all'argomento Radius?
Hai memorizzaro nello stesso modulo della funzione di cui sopra anche la
Sub LatLongToXYZ(Lat As Double, Lon As Double, Radius As Double, x As
Double, y As Double, z As Double)
'
' Converts Latitude, Longitude, Radius to 3d-Cartesian coordinates
'
' X axis runs through 270 (-X) and 90 (+X) Latitude
' Y axis runs North (+Y) to South (-Y)
' Z axis runs through 0 (-Z) and 180 (+Z) Latitude
'
y = Radius * Sin(Deg2Rad(Lat))
x = Radius * Sin(Deg2Rad(Lon)) * Cos(Deg2Rad(Lat))
z = -Radius * Cos(Deg2Rad(Lon)) * Cos(Deg2Rad(Lat))
End Sub
che viene richiamata dalla funzione GreatArcDistance?
Function PI() As Double
PI = Atn(1) * 4
End Function
per la determinazione del valore di P greco, anch'essa invocata dalla
funzione GreatArcDistance?
Post by Carlo Costarella
Ciao, Carlo
--
Roberto
A Radius ho dato 6371 (più o meno non ricordo); il resto delle funzioni
tutte presenti e funzionanti.

Ciao, Carlo
Roberto dalla campagna
2005-07-14 16:43:22 UTC
Permalink
Post by Carlo Costarella
Post by Marco
Post by Carlo Costarella
Post by Roberto dalla campagna
Post by Marco
Qualcuno si è cimentato con il calcolo della distanza tra due punti con
dati
Post by Marco
da gps, latitudine e longitudine ?
In una tabella contenente in un campo la latitudine e nell'altro la
longitudine dovrei calcolare la distanza tra ciascun punto-record
tramite
Post by Carlo Costarella
Post by Roberto dalla campagna
Post by Marco
query.
grazie
Vai sul Sito Comune (link qui sotto) e nella Sezione Modules leggi la
FAQ
Post by Carlo Costarella
Post by Roberto dalla campagna
intitolata "5.23 Raccolta di sub e funzioni utili".
Scarica il database di esempio allegato alla FAQ e seleziona la
Categoria
Post by Carlo Costarella
Post by Roberto dalla campagna
intitolata "Latitude/Longitude"; nella lista dei topic trovi anche
quello
Post by Carlo Costarella
Post by Roberto dalla campagna
intitolato "Function GreatArcDistance" che fa riferimento ad una
funzione
Post by Carlo Costarella
Post by Roberto dalla campagna
che serve a calcolare la più corta distanza tra due punti dell terra
di
Post by Carlo Costarella
Post by Marco
Post by Carlo Costarella
Post by Roberto dalla campagna
cui
si conoscono la latitudine e la longitudine.
Comunque riporto qui di seguito la funzione che dovrebbe fare ciò che ti
Function GreatArcDistance(Lat1 As Double, Lon1 As Double, _
Lat2 As Double, Lon2 As Double, Radius As Double) As Double
'
' Calculates the Great Arc (shortest) distance
' between 2 locations on the globe.
'
' Uses functions from Trigonometry
'
Dim X1 As Double, Y1 As Double, Z1 As Double
Dim X2 As Double, Y2 As Double, Z2 As Double
Dim CosX As Double, ChordLen As Double
LatLongToXYZ Lat1, Lon1, Radius, X1, Y1, Z1
LatLongToXYZ Lat2, Lon2, Radius, X2, Y2, Z2
ChordLen = Sqr((X1 - X2) * (X1 - X2) + (Y1 - Y2) * (Y1 - Y2) + (Z1 -
Z2)
Post by Carlo Costarella
Post by Roberto dalla campagna
*
(Z1 - Z2))
CosX = 1 - ChordLen * ChordLen / (2 * Radius * Radius)
Debug.Print X1, Y1, Z1
Debug.Print X2, Y2, Z2
Debug.Print ChordLen, CosX
If CosX = 1 Or CosX = -1 Then
GreatArcDistance = 0
Else
GreatArcDistance = Sqr(1 - CosX * CosX) * Radius * PI() / 2
End If
End Function
--
Roberto
Ciao Roberto
vorrei sbagliarmi ma mi sembra che Marco abbia bisogno di conoscere la
differenza tra due valori di Lat e Lon. espressi, immagino in Km.
Ritengo che l'unità di misura sia la stessa usata per indicare l'argomento
Radius (nel caso in discussione il raggio della terra): se lo indichi in Km
penso che la funzione ti ritorni il risultato in KM.
Post by Carlo Costarella
Non so se la funzione proposta ottenga questo risultato. Nelle mie prove
ho
Post by Carlo Costarella
http://216.147.18.102/dist/index
Non ho mai usato quella funzione, ma visto che è pubblicata da mamma
Microsoft presupponevo fosse giusta.
Ma tu che valore hai dato all'argomento Radius?
Hai memorizzaro nello stesso modulo della funzione di cui sopra anche la
Sub LatLongToXYZ(Lat As Double, Lon As Double, Radius As Double, x As
Double, y As Double, z As Double)
'
' Converts Latitude, Longitude, Radius to 3d-Cartesian coordinates
'
' X axis runs through 270 (-X) and 90 (+X) Latitude
' Y axis runs North (+Y) to South (-Y)
' Z axis runs through 0 (-Z) and 180 (+Z) Latitude
'
y = Radius * Sin(Deg2Rad(Lat))
x = Radius * Sin(Deg2Rad(Lon)) * Cos(Deg2Rad(Lat))
z = -Radius * Cos(Deg2Rad(Lon)) * Cos(Deg2Rad(Lat))
End Sub
che viene richiamata dalla funzione GreatArcDistance?
Function PI() As Double
PI = Atn(1) * 4
End Function
per la determinazione del valore di P greco, anch'essa invocata dalla
funzione GreatArcDistance?
Post by Carlo Costarella
Ciao, Carlo
--
Roberto
A Radius ho dato 6371 (più o meno non ricordo); il resto delle funzioni
tutte presenti e funzionanti.
Se la latitudine e la longitudine le hai indicate in gradi (la coversione se
la fa da sola la funzione) non saprei cosa dirti; come già detto
precedentemente non ho mai provato quelle funzioni e mi sono permesso di
segnalarle visto che chi le ha pubblicate dovrebbe essere degno di fede, ma
a quanto mi dici sembra non essere così. :(
Post by Carlo Costarella
Ciao, Carlo
--
Roberto

-----------------------------------------------------
il Sito Comune di it.comp.appl.access
http://www.sitocomune.com
----------------------------------------------------
Carlo Costarella
2005-07-14 17:04:50 UTC
Permalink
"Roberto dalla campagna" <***@libero.it> ha scritto nel
messaggio news:KCwBe.16604Cut
Post by Roberto dalla campagna
Se la latitudine e la longitudine le hai indicate in gradi (la coversione se
la fa da sola la funzione) non saprei cosa dirti; come già detto
precedentemente non ho mai provato quelle funzioni e mi sono permesso di
segnalarle visto che chi le ha pubblicate dovrebbe essere degno di fede, ma
a quanto mi dici sembra non essere così. :(
--
Roberto
La tua è stata un'ottima segnalazione...era proprio lì e nessuno se ne era
accorto.

Hai provato a confrontare i risultati anche presso il link segnalato?
Nello stesso sito e questo lo dico per Marco, c'è la possibilità di
scaricare tutte le formule usate...almeno così mi pare.
Io non mi ci metto ma a Marco potrebbe interessare e magari farci sapere
qualcosa.

Ciao, Carlo
Roberto dalla campagna
2005-07-14 17:24:26 UTC
Permalink
Post by Carlo Costarella
messaggio news:KCwBe.16604Cut
Post by Roberto dalla campagna
Se la latitudine e la longitudine le hai indicate in gradi (la
coversione
Post by Carlo Costarella
Post by Roberto dalla campagna
se
la fa da sola la funzione) non saprei cosa dirti; come già detto
precedentemente non ho mai provato quelle funzioni e mi sono permesso di
segnalarle visto che chi le ha pubblicate dovrebbe essere degno di fede, ma
a quanto mi dici sembra non essere così. :(
--
Roberto
La tua è stata un'ottima segnalazione...era proprio lì e nessuno se ne era
accorto.
Hai provato a confrontare i risultati anche presso il link segnalato?
Dal sito è scaricabile il database di esempio che ho allegato nella FAQ Sito
Comune.
Post by Carlo Costarella
Nello stesso sito e questo lo dico per Marco, c'è la possibilità di
scaricare tutte le formule usate...almeno così mi pare.
Io non mi ci metto ma a Marco potrebbe interessare e magari farci sapere
qualcosa.
Ciao, Carlo
--
Roberto

-----------------------------------------------------
il Sito Comune di it.comp.appl.access
http://www.sitocomune.com
----------------------------------------------------
Roberto dalla campagna
2005-07-14 13:48:08 UTC
Permalink
"Carlo Costarella" <***@virgilio.it> ha scritto nel
messaggio news:KWrBe.159214$***@news4.tin.it...
[SUPERCUT]

Bisogna memorizzare in un modulo anche la seguente funzione:

Function Deg2Rad(x As Double) As Double
' Degrees to radians
Deg2Rad = x / 180 * PI()
End Function
--
Roberto

-----------------------------------------------------
il Sito Comune di it.comp.appl.access
http://www.sitocomune.com
----------------------------------------------------
Roberto dalla campagna
2005-07-14 13:48:07 UTC
Permalink
Post by Marco
Qualcuno si è cimentato con il calcolo della distanza tra due punti con dati
da gps, latitudine e longitudine ?
In una tabella contenente in un campo la latitudine e nell'altro la
longitudine dovrei calcolare la distanza tra ciascun punto-record tramite
query.
grazie
Scusami, ma mi ero dimenticato di indicarti che nel modulo in cui memorizzi
la funzione GreatArcDistance devi memorizzare anche la seguente sub:

Sub LatLongToXYZ(Lat As Double, Lon As Double, Radius As Double, x As
Double, y As Double, z As Double)
'
' Converts Latitude, Longitude, Radius to 3d-Cartesian coordinates
'
' Assumes:
' X axis runs through 270 (-X) and 90 (+X) Latitude
' Y axis runs North (+Y) to South (-Y)
' Z axis runs through 0 (-Z) and 180 (+Z) Latitude
'
y = Radius * Sin(Deg2Rad(Lat))
x = Radius * Sin(Deg2Rad(Lon)) * Cos(Deg2Rad(Lat))
z = -Radius * Cos(Deg2Rad(Lon)) * Cos(Deg2Rad(Lat))
End Sub

la seguente funzione:

Function PI() As Double
PI = Atn(1) * 4
End Function

e la seguente funzione:

Function Deg2Rad(x As Double) As Double
' Degrees to radians
Deg2Rad = x / 180 * PI()
End Function
--
Roberto

-----------------------------------------------------
il Sito Comune di it.comp.appl.access
http://www.sitocomune.com
----------------------------------------------------
Marco
2005-07-14 14:26:21 UTC
Permalink
Post by Roberto dalla campagna
Post by Marco
Qualcuno si è cimentato con il calcolo della distanza tra due punti con
dati
Post by Marco
da gps, latitudine e longitudine ?
In una tabella contenente in un campo la latitudine e nell'altro la
longitudine dovrei calcolare la distanza tra ciascun punto-record tramite
query.
grazie
Scusami, ma mi ero dimenticato di indicarti che nel modulo in cui memorizzi
Sub LatLongToXYZ(Lat As Double, Lon As Double, Radius As Double, x As
Double, y As Double, z As Double)
'
' Converts Latitude, Longitude, Radius to 3d-Cartesian coordinates
'
' X axis runs through 270 (-X) and 90 (+X) Latitude
' Y axis runs North (+Y) to South (-Y)
' Z axis runs through 0 (-Z) and 180 (+Z) Latitude
'
y = Radius * Sin(Deg2Rad(Lat))
x = Radius * Sin(Deg2Rad(Lon)) * Cos(Deg2Rad(Lat))
z = -Radius * Cos(Deg2Rad(Lon)) * Cos(Deg2Rad(Lat))
End Sub
Function PI() As Double
PI = Atn(1) * 4
End Function
Function Deg2Rad(x As Double) As Double
' Degrees to radians
Deg2Rad = x / 180 * PI()
End Function
--
Roberto
-----------------------------------------------------
il Sito Comune di it.comp.appl.access
http://www.sitocomune.com
----------------------------------------------------
Ho già provato in quanto compilando il database dava errore.
Come va costruita la query ?
Ho provato con lo stesso metodo dell'altro post però da troppi risultati.

grazie
PS non mi sembra che comunque fornisca buoni dati.
Roberto dalla campagna
2005-07-14 16:43:23 UTC
Permalink
Post by Marco
Post by Roberto dalla campagna
Post by Marco
Qualcuno si è cimentato con il calcolo della distanza tra due punti con
dati
Post by Marco
da gps, latitudine e longitudine ?
In una tabella contenente in un campo la latitudine e nell'altro la
longitudine dovrei calcolare la distanza tra ciascun punto-record tramite
query.
grazie
Scusami, ma mi ero dimenticato di indicarti che nel modulo in cui memorizzi
Sub LatLongToXYZ(Lat As Double, Lon As Double, Radius As Double, x As
Double, y As Double, z As Double)
'
' Converts Latitude, Longitude, Radius to 3d-Cartesian coordinates
'
' X axis runs through 270 (-X) and 90 (+X) Latitude
' Y axis runs North (+Y) to South (-Y)
' Z axis runs through 0 (-Z) and 180 (+Z) Latitude
'
y = Radius * Sin(Deg2Rad(Lat))
x = Radius * Sin(Deg2Rad(Lon)) * Cos(Deg2Rad(Lat))
z = -Radius * Cos(Deg2Rad(Lon)) * Cos(Deg2Rad(Lat))
End Sub
Function PI() As Double
PI = Atn(1) * 4
End Function
Function Deg2Rad(x As Double) As Double
' Degrees to radians
Deg2Rad = x / 180 * PI()
End Function
--
Roberto
Ho già provato in quanto compilando il database dava errore.
Non riesco ad immaginare quale errore dia, sempre che tu abbia memorizzate
in un modulo tutte le funzioni e la sub che ti ho segnalato.
Post by Marco
Come va costruita la query ?
Se nella query devi far riferimento anche alla longitudine e latitudine
indicati nel record precedente, trovi una soluzione nel database di esempi
che trovi allegato nella FAQ del Sito Conune che trovi nella Sezione Queries
e che è intitolata "2.6 Esempi di utilizzo e creazione di queries in Access
97" (oppure in alternativa 2.18 Esempi di creazione ed utilizzo delle
queries per Access 2000 e versioni di Access successive).
A questo punto in un campo calcolato puoi richiamare la funzione
GreatArcDistance.
Post by Marco
Ho provato con lo stesso metodo dell'altro post però da troppi risultati.
grazie
PS non mi sembra che comunque fornisca buoni dati.
Come ho già scritto a Carlo Cosarella, non ho avuto mai la necessità di
usare le funzione e sub che ti ho consigliato e mi sono permesso di
segnalartele solo perché pensavo che chi le ha pubblicate (la Microsoft)
fosse attendibile.
Visto che i risultati giusti li puoi ottenere con Excel, confrantali con
quelli per capire se quelli ottenuti con Access siano o meno attendibili.
Se usi le funzioni da me segnalate prova ad aggiungere al database i
riferimenti alla libreia Microsoft Office (nel data se di esempio allegato
alla FAQ che ti ho indicato viene fatto).
In alternativa potresti aggiungere al tuo database i riferimenti a Microsoft
Excel X.X Object Library (dove X.X è = a 8.0 per Office 97, 9.0 per Office
2000 ecc. ecc.): così facendo puoi usare da Access anche le funzioni di
Excel.
--
Roberto

-----------------------------------------------------
il Sito Comune di it.comp.appl.access
http://www.sitocomune.com
----------------------------------------------------
Bruno Campanini
2005-07-14 23:43:03 UTC
Permalink
Post by Marco
Qualcuno si è cimentato con il calcolo della distanza tra due punti con
dati da gps, latitudine e longitudine ?
In una tabella contenente in un campo la latitudine e nell'altro la
longitudine dovrei calcolare la distanza tra ciascun punto-record tramite
query.
grazie
In un foglio di Excel:
Lat_1, Long_1
Lat_2, Long_2
sono le corrdinate di due luoghi geografici in gradi decimali
(cioè gradi+minuti/60+secondi/3600), tenendo presente che:
Lat-Nord e Long-Est > 0
Lat-Sud e Long-Ovest < 0

=DEGREES(ACOS(SIN(RADIANS(Lat_1))*SIN(RADIANS(Lat_2))+
(COS(RADIANS(Lat_1))*COS(RADIANS(Lat_2))*
COS(RADIANS(ABS(Long_1-Long_2))))))*60*50/27

La formula dà la lunghezza in Km dell'arco di
circolo massimo che li congiunge (ortodromica).

Bruno

Loading...