Differenze tra le versioni di "Calcolare la distanza tra due punti geografici, dei quali si conoscono latitudine e longitudine"
Riga 83: | Riga 83: | ||
'''End''' | '''End''' | ||
+ | |||
Riga 88: | Riga 89: | ||
=Riferimenti= | =Riferimenti= | ||
* https://developer.gnome.org/geocode-glib/stable/GeocodeLocation.html | * https://developer.gnome.org/geocode-glib/stable/GeocodeLocation.html | ||
+ | * http://www.liceocecioni.gov.it/sitorecupero/percorsi/scienzeprime/coordinate/latitudine_e_longitudine.html | ||
+ | * http://www.e42.it/E42IT/BOOK/e42it_MC_TAV_6.pdf | ||
+ | * http://www.e42.it/E42IT/BOOK/e42it_MC_TAV_5.pdf |
Versione delle 15:55, 27 ago 2019
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 la 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" 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 dinamica 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