Converte una coordinata UTM nelle corrispondenti coordinate geografiche della Latitudine e della Longitude
Da Gambas-it.org - Wikipedia.
Versione del 7 mag 2021 alle 18:27 di Vuott (Discussione | contributi) (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...")
Mostriamo un possibile codice per convertire una coordinata UTM nelle corrispondenti coordinate geografiche della Latitudine e della Longitude in formato decimale.
' Procedura derivata da un'elaborazione di © 2005 Jonathan Stott 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() ' Imposta la coordinata Est, la coordinata Nord e il numero del Fuso del punto: Dim coord_est As Float = 291954.0 Dim coord_nord As Float = 4640624.0 Dim zonaNumero As Byte = 33 ' Il numero della lettera della Fascia servirà soltanto per la stampa finale: Dim zonaLettera As String = "T" Dim latlon As Float[] latlon = UTMRefToLatLng(coord_est, coord_nord, zonaNumero) ' Fuso Fascia x-Est y-Nord 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 ' Converte una coordinata da UTM nelle corrispondenti coordinate geografiche della Latitudine e della Longitude 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