Differenze tra le versioni di "Calcolare la distanza tra due punti geografici, dei quali si conoscono latitudine e longitudine"
(3 versioni intermedie di uno stesso utente non sono mostrate) | |||
Riga 10: | Riga 10: | ||
Dim d, Lat_1, Lat_2, Long_1, Long_2 As Float | Dim d, Lat_1, Lat_2, Long_1, Long_2 As Float | ||
− | + | Lat_1 = <FONT Color=gray>''Latitudine del 1° punto (esempio: 38.482391)''</font> | |
− | + | Lat_2 = <FONT Color=gray>''Latitudine del 2° punto (esempio: 22.5004198)''</font> | |
− | + | Long_1 = <FONT Color=gray>''Longitudine del 1° punto''</font> | |
− | + | Long_2 = <FONT Color=gray>''Longitudine del 2° punto''</font> | |
+ | |||
+ | d = ACos(Cos(Rad(90 - Lat_1)) * Cos(Rad(90 - Lat_2)) + Sin(Rad(90 - Lat_1)) * Sin(Rad(90 - Lat_2)) * Cos(Rad(Long_1 - Long_2))) * 6371 * 1000 | ||
− | + | Print d; " metri" | |
− | |||
− | |||
'''End''' | '''End''' | ||
==Uso della Classe ''MapPoint'' del Componente ''gb.map''== | ==Uso della Classe ''MapPoint'' del Componente ''gb.map''== | ||
− | Si potrà anche utilizzare | + | Si potrà anche utilizzare il Metodo ".Distance()" della Classe ''MapPoint'' del Componente ''gb.map''. |
Mostriamo un semplice esempio, nel quale calcoleremo la distanza fra l'isola di Lampedusa e l'isola di Linosa: | Mostriamo un semplice esempio, nel quale calcoleremo la distanza fra l'isola di Lampedusa e l'isola di Linosa: | ||
Riga 29: | Riga 29: | ||
Dim mp, mp1, mp2 As New MapPoint | Dim mp, mp1, mp2 As New MapPoint | ||
Dim dis As Float | Dim dis As Float | ||
+ | |||
+ | mp1.Lat = 35.6441034 | ||
+ | mp1.Lon = 12.3563468 | ||
+ | |||
+ | mp2.Lat = 35.8577066 | ||
+ | mp2.Lon = 12.8566227 | ||
+ | |||
+ | dis = mp<FONT Color=#B22222>.Distance</font>(mp1, mp2) | ||
+ | |||
+ | Print dis; " metri" | ||
+ | |||
+ | <FONT Color=gray>' ''...o più semplicemente con la Classe statica "MapPoint":''</font> | ||
+ | Print MapPoint.Distance(mp1, mp2) | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
'''End''' | '''End''' | ||
=Uso delle risorse della libreria ''libgps''= | =Uso delle risorse della libreria ''libgps''= | ||
− | E' possibile utilizzare in particolare la funzione esterna " | + | E' possibile utilizzare in particolare la funzione esterna "earth_distance()" della libreria condivisa: "''libgps.so.23.0.0'' ": |
Library "libgps:23.0.0" | Library "libgps:23.0.0" | ||
Riga 65: | Riga 68: | ||
Si potrà anche fare uso di alcune funzioni esterne della libreria ''libgeocode-glib''. | Si potrà anche fare uso di alcune funzioni esterne della libreria ''libgeocode-glib''. | ||
− | Sarà necessario avere installata nel sistema e richiamare in Gambas la libreria | + | Sarà necessario avere installata nel sistema e richiamare in Gambas la libreria condivisa: "''libgeocode-glib.so.0.0.0'' " |
− | |||
Mostriamo un semplice esempio, nel quale calcoleremo la distanza fra l'isola di Lampedusa e l'isola di Linosa: | Mostriamo un semplice esempio, nel quale calcoleremo la distanza fra l'isola di Lampedusa e l'isola di Linosa: | ||
Riga 88: | Riga 90: | ||
Dim geo1, geo2 As Pointer | Dim geo1, geo2 As Pointer | ||
Dim dist As Float | Dim dist As Float | ||
+ | |||
+ | geo1 = geocode_location_new(35.6441034, 12.3563468, 0.0) | ||
+ | |||
+ | geo2 = geocode_location_new(35.8577066, 12.8566227, 0.0) | ||
+ | |||
+ | dist = geocode_location_get_distance_from(geo1, geo2) | ||
+ | |||
+ | Print "Km "; dist | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
<FONT Color=gray>' ''Libera la memoria precedentemente allocata da "libgeocode-glib":''</font> | <FONT Color=gray>' ''Libera la memoria precedentemente allocata da "libgeocode-glib":''</font> | ||
− | + | g_object_unref(geo2) | |
− | + | g_object_unref(geo1) | |
− | + | ||
'''End''' | '''End''' | ||
− | |||
=Riferimenti= | =Riferimenti= | ||
− | * https://developer.gnome.org/geocode-glib/ | + | * https://developer-old.gnome.org/geocode-glib/unstable/ |
− | * | + | * https://developer-old.gnome.org/geocode-glib/unstable/GeocodeLocation.html |
− | |||
− |
Versione attuale delle 04:21, 2 giu 2023
Di seguito mostriamo alcune modalità per calcolare la distanza tra due punti geografici, dei quali si conoscono latitudine e longitudine.
Indice
Uso delle sole funzioni di Gambas
L'uso delle sole funzioni native di Gambas ci consente di adottare almeno due modalità.
Uso delle funzioni matematiche di Gambas
In questo caso si dovrà effettuare un particolare calcolo:
Public Sub Main() Dim d, Lat_1, Lat_2, Long_1, Long_2 As Float Lat_1 = Latitudine del 1° punto (esempio: 38.482391) Lat_2 = Latitudine del 2° punto (esempio: 22.5004198) Long_1 = Longitudine del 1° punto Long_2 = Longitudine del 2° punto d = ACos(Cos(Rad(90 - Lat_1)) * Cos(Rad(90 - Lat_2)) + Sin(Rad(90 - Lat_1)) * Sin(Rad(90 - Lat_2)) * Cos(Rad(Long_1 - Long_2))) * 6371 * 1000 Print d; " metri" End
Uso della Classe MapPoint del Componente gb.map
Si potrà anche utilizzare il Metodo ".Distance()" della Classe MapPoint del Componente gb.map.
Mostriamo un semplice esempio, nel quale calcoleremo la distanza fra l'isola di Lampedusa e l'isola di Linosa:
Public Sub Button1_Click() Dim mp, mp1, mp2 As New MapPoint Dim dis As Float mp1.Lat = 35.6441034 mp1.Lon = 12.3563468 mp2.Lat = 35.8577066 mp2.Lon = 12.8566227 dis = mp.Distance(mp1, mp2) Print dis; " metri" ' ...o più semplicemente con la Classe statica "MapPoint": Print MapPoint.Distance(mp1, mp2) End
Uso delle risorse della libreria libgps
E' possibile utilizzare in particolare la funzione esterna "earth_distance()" della libreria condivisa: "libgps.so.23.0.0 ":
Library "libgps:23.0.0" ' double earth_distance(double, double, double, double) Private Extern earth_distance(lat1 As Float, lon1 As Float, lat2 As Float, lon2 As Float) As Float Public Sub Main() dim dist as Float dist = earth_distance(35.6441034, 12.3563468, 35.8577066, 12.8566227) Print dist; " metri" End
Uso di alcune funzioni esterne della libreria libgeocode-glib
Si potrà anche fare uso di alcune funzioni esterne della libreria libgeocode-glib.
Sarà necessario avere installata nel sistema e richiamare in Gambas la libreria condivisa: "libgeocode-glib.so.0.0.0 "
Mostriamo un semplice esempio, nel quale calcoleremo la distanza fra l'isola di Lampedusa e l'isola di Linosa:
Library "libgeocode-glib:0.0.0" ' GeocodeLocation * geocode_location_new (gdouble latitude, gdouble longitude, gdouble accuracy) ' Creates a new GeocodeLocation object. Private Extern geocode_location_new(latitude As Float, longitude As Float, accuracy As Float) As Pointer ' double geocode_location_get_distance_from (GeocodeLocation *loca, GeocodeLocation *locb) ' Calculates the distance in km, along the curvature of the Earth, between 2 locations. Private Extern geocode_location_get_distance_from(loca As Pointer, locb As Pointer) As Float ' void g_object_unref (gpointer object) ' Decreases the reference count of object. Private Extern g_object_unref(gobject As Pointer) Public Sub Main() Dim geo1, geo2 As Pointer Dim dist As Float geo1 = geocode_location_new(35.6441034, 12.3563468, 0.0) geo2 = geocode_location_new(35.8577066, 12.8566227, 0.0) dist = geocode_location_get_distance_from(geo1, geo2) Print "Km "; dist ' Libera la memoria precedentemente allocata da "libgeocode-glib": g_object_unref(geo2) g_object_unref(geo1) End