|
|
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
| |