Differenze tra le versioni di "Calcolare la distanza tra due punti geografici, dei quali si conoscono latitudine e longitudine"

Da Gambas-it.org - Wikipedia.
Riga 1: Riga 1:
Per calcolare la distanza tra due punti geografici, dei quali si conoscono latitudine e longitudine, potremo adottare almeno due modalità.
+
Di seguito mostriamo alcune modalità per calcolare la distanza tra due punti geografici, dei quali si conoscono latitudine e longitudine.
  
==Uso delle sole funzioni di Gambas==
+
=Uso delle sole funzioni di Gambas=
Si potranno utilizzare le sole funzioni native di Gambas per effettuare il necessario calcolo:
+
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()
 
  '''Public''' Sub Main()
 
    
 
    
Riga 15: Riga 18:
 
      
 
      
 
   Print d; " metri"
 
   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'''
 
  '''End'''
  
  
==Uso di alcune funzioni esterne della libreria ''libgeocode-glib''==
+
=Uso di alcune funzioni esterne della libreria ''libgeocode-glib''=
 
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''.
  

Versione delle 13:07, 3 feb 2018

Di seguito mostriamo alcune modalità per calcolare la distanza tra due punti geografici, dei quali si conoscono latitudine e longitudine.

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


Riferimenti