Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

[Access 2013] Distanza tra due punti geografici

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

[Access 2013] Distanza tra due punti geografici

Postdi Ross72 » 03/03/16 12:32

Salve a tutti.
Ho bisogno di calcolare la distanza in linea d'aria (km) tra due punti date la loro latitudine e la longitudine.
Ho trovato un ottima soluzione di Anthony47 (la funzione GeoDist) nel post [Excel] Creare Matrice delle Distanze ma non sono capace di adeguare il codice per il modulo di Access 2013. Qualcuno può aiutarmi?

per completezza vi replico la funzione GeoDist di Anthony47
Codice: Seleziona tutto
Function GeoDist(Lat1, Long1, Lat2, Long2) As Double
'Risultato in Km
'Distanza tra due coordinate geografiche
'E' una semplificazione della formua di Vincenty
   '
Dim Raggio As Double, PiGrec As Double, X As Double, Y As Double
    Raggio = 6372.8  'Raggio Terra, Km
    PiGrec = Application.pi
'   
' gradi a radianti
    Lat1 = Lat1 * PiGrec / 180
    Lat2 = Lat2 * PiGrec / 180
    dLon = (Long2 - Long1) * PiGrec / 180 ' delta long
'
    X = Sin(Lat1) * Sin(Lat2) + Cos(Lat1) * Cos(Lat2) * Cos(dLon)
    Y = Sqr((Cos(Lat2) * Sin(dLon)) ^ 2 + (Cos(Lat1) * Sin(Lat2) - Sin(Lat1) * Cos(Lat2) * Cos(dLon)) ^ 2)
    Geodist = WorksheetFunction.Atan2(X, Y) * Raggio
'
End Function
Ross72
Utente Junior
 
Post: 13
Iscritto il: 03/03/16 11:36

Sponsor
 

Re: [Access 2013] Distanza tra due punti geografici

Postdi Ross72 » 03/03/16 17:36

I problemi si verificano per le righe:
PiGrec = Application.pi
GeoDist = WorksheetFunction.Atan2(X, Y) * Raggio

PiGrec = Application.pi lo posso sostituire con PiGrec = 4 * Atn(1)
non riesco a trovare l'equivalente di WorksheetFunction.Atan2(X, Y)
Ross72
Utente Junior
 
Post: 13
Iscritto il: 03/03/16 11:36

Re: [Access 2013] Distanza tra due punti geografici

Postdi Anthony47 » 04/03/16 02:39

Questa versione non richiede l'uso delle WorksheetFunction, quindi dovrebbe funzionare anche in Access:
Codice: Seleziona tutto
Function GeoDistBF(Lat1, Long1, Lat2, Long2) As Double
'byAnthony - Risultato in Km
'Distanza tra due coordinate geografiche in Gradi
'E' una semplificazione della formula di Vincenty

'=6372,8*ARCCOS((SEN(RADIANTI(Lat1))*SEN(RADIANTI(Lat2))+(COS(RADIANTI(Lat1))*
'      *COS(RADIANTI(Lat2))*COS(RADIANTI(Long2-Long1)))))
'
Dim Raggio As Double, PiGrec As Double, X As Double, myAcos As Double, myBas As Double
Dim I As Double, NxLev As Boolean, myLevel As Long, SinB As Double

Raggio = 6372.8  'Raggio Terra, Km
PiGrec = 3.14159265358979
'
' gradi a radianti
Lat1 = Lat1 * PiGrec / 180
Lat2 = Lat2 * PiGrec / 180
dlon = (Long2 - Long1) * PiGrec / 180 ' delta long
'
X = Sin(Lat1) * Sin(Lat2) + Cos(Lat1) * Cos(Lat2) * Cos(dlon)
mydiv = 1
NxStep:
myLevel = myLevel + 1
mydiv = mydiv * 10
NxLev = False
For I = myBas To PiGrec / 2 + 1 / mydiv Step (1 / mydiv)
'Debug.Print I
    SinB = IIf(I > PiGrec / 2, PiGrec / 2, I)
    If Sin(SinB) > X Then
        myBas = I - 1 / mydiv
        NxLev = True
    End If
    If NxLev Then Exit For
Next I
If myLevel < 8 Then GoTo NxStep
   
myAcos = PiGrec / 2 - I
GeoDistBF = myAcos * Raggio
'
End Function


Fai sapere...
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13904
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [Access 2013] Distanza tra due punti geografici

Postdi Ross72 » 04/03/16 09:14

Funziona perfettamente!!!
Grazie mille.
Ross72
Utente Junior
 
Post: 13
Iscritto il: 03/03/16 11:36

Re: [Access 2013] Distanza tra due punti geografici

Postdi Ross72 » 07/04/16 12:34

Salve a tutti.
VI ringrazio infinitamente per la soluzione che mi avete fornito in questo post ma vi disturbo ancora perché ho bisogno di un ulteriore vostro aiuto.
Questa volta si tratta di individuare in un database tutti gli elementi con lat e long che si trovano ad una certa distanza da un punto con lat e long.
Facciamo un esempio...
Ipotizziamo di avere un database contenente tutti i monumenti turistici d'Italia e per ogni monumento abbiamo lat e long.
Ho bisogno di ottenere l'elenco dei monumenti che si trovano entro 1 km in linea d'aria rispetto alla mia posizione.

Grazie
Ross72
Utente Junior
 
Post: 13
Iscritto il: 03/03/16 11:36

Re: [Access 2013] Distanza tra due punti geografici

Postdi alfrimpa » 07/04/16 13:33

Ciao Ross

Azzardo un'ipotesi essendo tanto tempo che non "frequento" Access

Non puoi creare una query sul db dove aggiungi un campo calcolato dove inserisci la differenza tra la function di Anthony (che saluto) relativa ai monumenti e quella della tua posizione?

Per ogni record ti dovrebbe restituire la distanza in km tra il momumento e la tua posizione.

Dopodiché nei criteri di selezione inserisci "<1" ed esegui la query.
Alfredo

Win7 + Office 2007
Avatar utente
alfrimpa
Utente Senior
 
Post: 842
Iscritto il: 30/12/13 17:01
Località: Napoli


Torna a Applicazioni Office Windows


Topic correlati a "[Access 2013] Distanza tra due punti geografici":


Chi c’è in linea

Visitano il forum: Nessuno e 4 ospiti