Convertire una coordinata dal formato gradi primi secondi del sistema EPSG:4326 WGS 84 al suo formato decimale e viceversa

Da Gambas-it.org - Wikipedia.

Il seguente codice converte una coordinata geografica dal formato "gradi primi secondi" del sistema EPSG:4326 WGS 84 al suo formato in gradi decimali.

Public Sub Main()
 
 Dim coordinata As String
 Dim bb As Byte[]
 Dim scn As String[]       ' Array per suddividere la coordinata
 Dim gradi As Short
 Dim primi, secondi As Byte
 Dim decimale As Float
 
' La stringa che rappresenta la coordinata deve riportare:
' - per i "gradi" il simbolo del grado: ° (cod. ASCII &h27);
' - per i "minuti primi" il simbolo dell'apice: ' (cod. ASCII &hB0);
' - per i "minuti secondi" due simboli dell'apice: '' (cod. ASCII &hB0).
' La stringa NON deve contenere spazi.
 coordinata = "gradi°minuti'secondi''"
 
' Controlla che effettivamente non ci siano spazi nella stringa della coordinata:
 bb = Byte[].FromString(coordinata)
 If bb.Find(32) > -1 Then Error.Raise("La stringa della coordinata contiene almeno uno spazio !")
 
' Separa i componenti della coordinata:
 scn = Scan(coordinata, "*°*'*''*")
 
' Effettua la conversione in dati numerici:
 gradi = Abs(CShort(scn[0]))
 primi = CByte(scn[1])
 secondi = CByte(scn[2])
 
' Calcola il risultato:
 decimale = gradi + primi / 60 + secondi / 3600
 
 If Val(scn[0]) < 0 Then decimale = -decimale
 
 Print decimale
 
End

Uso della Classe "Geo" del Componente "gb.map"

E' possibile utilizzare anche il Metodo ".SexToDec()" della Classe statica "Geo" attivando il Componente "gb.map".

Esempi:

Me.Text = Geo.SexToDec("41°7'24.42''")
Me.Text = Geo.SexToDec("41°5'36''")

Va precisato che i secondi vanno indicati ponendo due singoli apici ('') e non il doppio apice. La stringa non deve contenere spazi.


Convertire una coordinata dal formato decimale del sistema EPSG:4326 WGS 84 al suo formato gradi primi secondi

Il seguente codice converte una coordinata geografica dal formato gradi decimali del sistema EPSG:4326 WGS 84 al formato "gradi primi secondi". [nota 1]

Public Sub Main()
 
 Dim s1, s2 As Float
 Dim fr1, fr2 As Float
 Dim gr, mn, sc As Short
 
' I gradi in formato decimale da convertire:
 s1 = 21.081969
 
 gr = Fix(s1)
 fr1 = Frac(s1)
 
 s2 = fr1 * 60
 mn = Fix(s2)
 fr2 = Frac(s2)
 
 sc = fr2 * 60
 
 Print s1; " =  "; gr; "°"; mn; "'"; sc; "\""
  
End


Uso della Classe "Geo" del Componente "gb.map"

E' possibile utilizzare anche il Metodo ".DecToSex()" della Classe statica "Geo" attivando il Componente "gb.map".

Esempio:

 Me.Text = Geo.DecToSex(41.123456, 0)

Se si far vuole specificare nel risultato di tipo stringa che si tratta della coordinata della "Latitudine", allora il secondo argomento sarà impostato a 1; se si tratta della "Longitudine", allora il secondo argomento sarà impostato a 2.


Note

[1] https://www.matematika.it/public/allegati/40/Angoli_misura_conversioni_1_4.pdf