Differenze tra le versioni di "Calcolare la distanza tra due punti geografici, dei quali si conoscono latitudine e longitudine"
Da Gambas-it.org - Wikipedia.
(Creata pagina con "Per calcolare la distanza tra due punti geografici, dei quali si conoscono latitudine e longitudine, potremo adottare questo semplice codice: '''Public''' Sub Main() Dim...") |
|||
Riga 1: | Riga 1: | ||
− | Per calcolare la distanza tra due punti geografici, dei quali si conoscono latitudine e longitudine, potremo adottare | + | 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() | '''Public''' Sub Main() | ||
Riga 14: | Riga 17: | ||
'''End''' | '''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" | ||
+ | |||
+ | <FONT Color=gray>' ''GeocodeLocation * geocode_location_new (gdouble latitude, gdouble longitude, gdouble accuracy)'' | ||
+ | ' ''Creates a new GeocodeLocation object.''</font> | ||
+ | Private Extern geocode_location_new(latitude As Float, longitude As Float, accuracy As Float) As Pointer | ||
+ | |||
+ | <FONT Color=gray>' ''double geocode_location_get_distance_from (GeocodeLocation *loca, GeocodeLocation *locb)'' | ||
+ | ' ''Calculates the distance in km, along the curvature of the Earth, between 2 locations.''</font> | ||
+ | Private Extern geocode_location_get_distance_from(loca As Pointer, locb As Pointer) As Float | ||
+ | |||
+ | <FONT Color=gray>' ''void g_object_unref (gpointer object)'' | ||
+ | ' ''Decreases the reference count of object.''</font> | ||
+ | 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 | ||
+ | |||
+ | <FONT Color=gray>' ''Libera la memoria precedentemente allocata da "libgeocode-glib":''</font> | ||
+ | g_object_unref(geo2) | ||
+ | g_object_unref(geo1) | ||
+ | |||
+ | '''End''' | ||
+ | |||
+ | |||
+ | |||
+ | =Riferimenti= | ||
+ | * https://developer.gnome.org/geocode-glib/stable/GeocodeLocation.html |
Versione delle 16:07, 1 feb 2018
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