Calcolare la distanza tra due punti geografici, dei quali si conoscono latitudine e longitudine
Da Gambas-it.org - Wikipedia.
Versione del 1 feb 2018 alle 16:07 di Vuott (Discussione | contributi)
Per calcolare la distanza tra due punti geografici, dei quali si conoscono latitudine e longitudine, potremo adottare almeno due modalità.
Uso delle sole funzioni di Gambas
Si potranno utilizzare le sole funzioni native di Gambas per effettuare il necessario 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 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