fork(3) download
  1. using System;
  2.  
  3. namespace ToLatLon_Test
  4. {
  5. class MainClass
  6. {
  7. public static void Main(string[] args)
  8. {
  9. Console.WriteLine("UTM to LatLon test");
  10. string input;
  11. double utmX, utmY;
  12. string Zone;
  13. try {
  14. // Console.Write("Enter utmX: ");
  15. // input = Console.ReadLine();
  16. // utmX = double.Parse(input);
  17. // Console.Write("Enter utmY: ");
  18. // input = Console.ReadLine();
  19. // utmY = double.Parse(input);
  20. // Console.Write("Enter UTM Zone: ");
  21. // Zone = Console.ReadLine();
  22. // Console.WriteLine();
  23. // ToLatLon(utmX, utmY, Zone);
  24. ToLatLon(451602.19, 4519076.99, "33N");
  25. } catch(Exception e) {
  26. Console.Write("Error: ");
  27. Console.WriteLine(e.Message);
  28. }
  29. Console.ReadLine();
  30. }
  31.  
  32. public static void ToLatLon(double utmX, double utmY, string utmZone)
  33. {
  34. double latitude = 0;
  35. double longitude = 0;
  36.  
  37. bool isNorthHemisphere = utmZone[utmZone.Length-1] >= 'N';
  38. Console.WriteLine(isNorthHemisphere );
  39.  
  40. var diflat = -0.00066286966871111111111111111111111111;
  41. var diflon = -0.0003868060578;
  42.  
  43. var zone = int.Parse(utmZone.Remove(utmZone.Length - 1));
  44. Console.Write("zone\t");
  45. Console.WriteLine(zone);
  46. var c_sa = 6378137.000000;
  47. var c_sb = 6356752.314245;
  48. var e2 = Math.Pow((Math.Pow(c_sa, 2) - Math.Pow(c_sb, 2)), 0.5) / c_sb;
  49. Console.Write("e2\t");
  50. Console.WriteLine(e2);
  51. var e2cuadrada = Math.Pow(e2, 2);
  52. Console.Write("e2cuadrada\t");
  53. Console.WriteLine(e2cuadrada);
  54. var c = Math.Pow(c_sa, 2) / c_sb;
  55. Console.Write("c\t");
  56. Console.WriteLine(c);
  57. var x = utmX - 500000;
  58. Console.Write("x\t");
  59. Console.WriteLine(x);
  60. var y = isNorthHemisphere ? utmY : utmY - 10000000;
  61. Console.Write("y\t");
  62. Console.WriteLine(y);
  63.  
  64. var s = ((zone * 6.0) - 183.0);
  65. Console.Write("s\t");
  66. Console.WriteLine(s);
  67. var lat = y / (6366197.724 * 0.9996); // Change c_sa for 6366197.724
  68. Console.Write("lat\t");
  69. Console.WriteLine(lat);
  70. var v = (c / Math.Pow(1 + (e2cuadrada * Math.Pow(Math.Cos(lat), 2)), 0.5)) * 0.9996;
  71. Console.Write("v\t");
  72. Console.WriteLine(v);
  73. var a = x / v;
  74. Console.Write("a\t");
  75. Console.WriteLine(a);
  76. var a1 = Math.Sin(2 * lat);
  77. Console.Write("a1\t");
  78. Console.WriteLine(a1);
  79. var a2 = a1 * Math.Pow((Math.Cos(lat)), 2);
  80. Console.Write("a2\t");
  81. Console.WriteLine(a2);
  82. var j2 = lat + (a1 / 2.0);
  83. Console.Write("j2\t");
  84. Console.WriteLine(j2);
  85. var j4 = ((3 * j2) + a2) / 4.0;
  86. Console.Write("j4\t");
  87. Console.WriteLine(j4);
  88. var j6 = (5 * j4 + a2 * Math.Pow((Math.Cos(lat)), 2)) / 3.0; // saque a2 de multiplicar por el coseno de lat y elevar al cuadrado
  89. Console.Write("j6\t");
  90. Console.WriteLine(j6);
  91. var alfa = (3.0 / 4.0) * e2cuadrada;
  92. Console.Write("alfa\t");
  93. Console.WriteLine(alfa);
  94. var beta = (5.0 / 3.0) * Math.Pow(alfa, 2);
  95. Console.Write("beta\t");
  96. Console.WriteLine(beta);
  97. var gama = (35.0 / 27.0) * Math.Pow(alfa, 3);
  98. Console.Write("gama\t");
  99. Console.WriteLine(gama);
  100. var bm = 0.9996 * c * (lat - alfa * j2 + beta * j4 - gama * j6);
  101. Console.Write("bm\t");
  102. Console.WriteLine(bm);
  103. var b = (y - bm) / v;
  104. Console.Write("b\t");
  105. Console.WriteLine(b);
  106. var epsi = ((e2cuadrada * Math.Pow(a, 2)) / 2.0) * Math.Pow((Math.Cos(lat)), 2);
  107. Console.Write("epsi\t");
  108. Console.WriteLine(epsi);
  109. var eps = a * (1 - (epsi / 3.0));
  110. Console.Write("eps\t");
  111. Console.WriteLine(eps);
  112. var nab = (b * (1 - epsi)) + lat;
  113. Console.Write("nab\t");
  114. Console.WriteLine(nab);
  115. var senoheps = (Math.Exp(eps) - Math.Exp(-eps)) / 2.0;
  116. Console.Write("senoheps\t");
  117. Console.WriteLine(senoheps);
  118. var delt = Math.Atan(senoheps / (Math.Cos(nab)));
  119. Console.Write("delt\t");
  120. Console.WriteLine(delt);
  121. var tao = Math.Atan(Math.Cos(delt) * Math.Tan(nab));
  122. Console.Write("tao\t");
  123. Console.WriteLine(tao);
  124.  
  125. longitude = (delt / Math.PI) * 180 + s;
  126. Console.Write("longitude\t");
  127. Console.WriteLine(longitude);
  128. latitude = (((lat + (1 + e2cuadrada * Math.Pow(Math.Cos(lat), 2) - (3.0 / 2.0) * e2cuadrada * Math.Sin(lat) * Math.Cos(lat) * (tao - lat)) * (tao - lat))) / Math.PI) * 180; // era incorrecto el calculo
  129. Console.Write("latitude\t");
  130. Console.WriteLine(latitude);
  131.  
  132. Console.WriteLine("Latitud: " + latitude.ToString() + "\nLongitud: " + longitude.ToString());
  133.  
  134. }
  135. }
  136. }
Success #stdin #stdout 0.03s 33920KB
stdin
Standard input is empty
stdout
UTM to LatLon test
True
zone	33
e2	0.0820944379500431
e2cuadrada	0.00673949674233347
c	6399593.62575867
x	-48397.81
y	4519076.99
s	15
lat	0.710139009207069
v	6384675.2997759
a	-0.00758030874360968
a1	0.988693490089547
a2	0.568474336425348
j2	1.20448575425184
j4	1.04548289979522
j6	1.85142440043585
alfa	0.00505462255675011
beta	4.25820153186783E-05
gama	1.67405789554632E-07
bm	4504119.48710118
b	0.00234271943309989
epsi	1.1133211260272E-07
eps	-0.00758030846229909
nab	0.712481728379349
senoheps	-0.00758038105795489
delt	-0.0100167941656593
tao	0.712456910275054
longitude	14.4260799700565
latitude	40.8212871342299
Latitud: 40.8212871342299
Longitud: 14.4260799700565