Convertire una coordinata dal formato gradi primi secondi del sistema EPSG:4326 WGS 84 al suo formato decimale e viceversa
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
Indice
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