Differenze tra le versioni di "Converte una coordinata UTM nelle corrispondenti coordinate geografiche della Latitudine e della Longitude"

Da Gambas-it.org - Wikipedia.
(Creata pagina con "Mostriamo un possibile codice per convertire una coordinata UTM nelle corrispondenti coordinate geografiche della Latitudine e della Longitude in formato decimale. <FONT Colo...")
 
 
Riga 1: Riga 1:
Mostriamo un possibile codice per convertire una coordinata UTM nelle corrispondenti coordinate geografiche della Latitudine e della Longitude in formato decimale.
+
#REDIRECT [[Converte_una_coordinata_UTM_nelle_corrispondenti_coordinate_geografiche_della_Latitudine_e_della_Longitudine]]
<FONT Color=gray>' ''Procedura derivata da un'elaborazione di © 2005 Jonathan Stott''</font>
 
 
Private Const RifEllMAGGIORE As Float = 6378137
 
Private Const RifEllMINORE As Float = 6356752.314
 
Private Const UTM_F0 As Float = 0.9996
 
Private wgs84_ecc As Float = ((RifEllMAGGIORE ^ 2) - (RifEllMINORE ^ 2)) / (RifEllMAGGIORE ^ 2)
 
 
 
'''Public''' Sub Main()
 
 
 
<FONT Color=gray>' ''Imposta la coordinata Est, la coordinata Nord e il numero del Fuso del punto:''</font>
 
  Dim coord_est As Float = 291954.0
 
  Dim coord_nord As Float = 4640624.0
 
  Dim zonaNumero As Byte = 33
 
<FONT Color=gray>' ''Il numero della lettera della Fascia servirà soltanto per la stampa finale:''</font>
 
  Dim zonaLettera As String = "T"
 
  Dim latlon As Float[]
 
 
 
  latlon = UTMRefToLatLng(coord_est, coord_nord, zonaNumero)
 
 
 
<FONT Color=gray>' ''                    Fuso      Fascia        x-Est            y-Nord''</font>
 
  Print "\nUTM: "; zonaNumero; zonaLettera;; coord_est; " E "; coord_nord; " N"
 
 
 
  Print "\nLatitudine: \e[31m"; Format(latlon[0], "0.000000"), "\e[0m  Longitudine: \e[34m"; Format(latlon[1], "0.000000")
 
 
 
'''End'''
 
 
 
<FONT Color=gray>' ''Converte una coordinata da UTM nelle corrispondenti coordinate geografiche della Latitudine e della Longitude''</font>
 
'''Private''' Function UTMRefToLatLng(est As Float, nord As Float, zonaNumero As Byte) As Float[]
 
 
 
  Dim ePrimeSquared As Float = wgs84_ecc / (1.0 - wgs84_ecc)
 
  Dim e1 As Float = (1 - Sqr(1 - wgs84_ecc)) / (1 + Sqr(1 - wgs84_ecc))
 
  Dim x As Float = est - 500000.0
 
  Dim longitudeOrigin As Float = (zonaNumero - 1.0) * 6.0 - 180.0 + 3.0
 
  Dim m As Float = nord / UTM_F0
 
  Dim mu As Float = m / (RifEllMAGGIORE * (1.0 - wgs84_ecc / 4.0 - 3.0 * wgs84_ecc * wgs84_ecc / 64.0 - 5.0 * (wgs84_ecc ^ 3) / 256.0))
 
  Dim phi1Rad As Float = mu + (3.0 * e1 / 2.0 - 27.0 * (e1 ^ 3) / 32.0) * Sin(2.0 * mu) +
 
                        (21.0 * e1 * e1 / 16.0 - 55.0 * (e1 ^ 4) / 32.0) * Sin(4.0 * mu) +
 
                        (151.0 * (e1 ^ 3) / 96.0) * Sin(6.0 * mu)
 
  Dim n As Float = RifEllMAGGIORE / Sqr(1.0 - wgs84_ecc * Sin(phi1Rad) * Sin(phi1Rad))
 
  Dim t As Float = Tan(phi1Rad) * Tan(phi1Rad)
 
  Dim c As Float = ePrimeSquared * Cos(phi1Rad) * Cos(phi1Rad)
 
  Dim r As Float = RifEllMAGGIORE * (1.0 - wgs84_ecc) / (CFloat(1.0 - wgs84_ecc * Sin(phi1Rad) * Sin(phi1Rad)) ^ 1.5)
 
  Dim d As Float = x / (n * UTM_F0)
 
  Dim latitudine As Float = (phi1Rad - (n * Tan(phi1Rad) / r) * (d * d / 2.0 - (5.0 + (3.0 * t) + (10.0 * c) -
 
                            (4.0 * c * c) - (9.0 * ePrimeSquared)) * (d ^ 4) / 24.0 +
 
                            (61.0 + (90.0 * t) + (298.0 * c) + (45.0 * t * t) - (252.0 * ePrimeSquared) -
 
                            (3.0 * c * c)) * (d ^ 6) / 720.0)) * (180.0 / Pi)
 
  Dim longitudine As Float = longitudeOrigin + ((d - (1.0 + 2.0 * t + c) * (d ^ 3) / 6.0 + (5.0 - (2.0 * c) +
 
                            (28.0 * t) - (3.0 * c * c) + (8.0 * ePrimeSquared) + (24.0 * t * t)) *
 
                            (d ^ 5) / 120.0) / Cos(phi1Rad)) * (180.0 / Pi)
 
 
 
  Return [latitudine, longitudine]
 
 
 
'''End'''
 
 
 
 
 
 
 
=Riferimenti=
 
* https://www.geoplaner.com/#Coordinate-Converter
 

Versione attuale delle 18:31, 7 mag 2021