QUE LINGUAGEM É ESSA?
Olá pessoal!!
Estou precisando de um código que converta coordenadas UTM para coordenadas geográfica. Achei esse código abaixo. Não entendi nada. Linhas do tipo [Ô]bool isNorthHemisphere = utmZone.Last() >= [ô]N[ô];[Ô] não faz o menor sentido para quem está engatinhando em ASP.net.
Alguém poderia me ajudar a transformá-lo em um código ASP.net (VB) ??
Estou precisando de um código que converta coordenadas UTM para coordenadas geográfica. Achei esse código abaixo. Não entendi nada. Linhas do tipo [Ô]bool isNorthHemisphere = utmZone.Last() >= [ô]N[ô];[Ô] não faz o menor sentido para quem está engatinhando em ASP.net.
Alguém poderia me ajudar a transformá-lo em um código ASP.net (VB) ??
public static void ToLatLon(double utmX, double utmY, string utmZone, out double latitude, out double longitude)
{
bool isNorthHemisphere = utmZone.Last() >= [ô]N[ô];
var diflat = -0.00066286966871111111111111111111111111;
var diflon = -0.0003868060578;
var zone = int.Parse(utmZone.Remove(utmZone.Length - 1));
var c_sa = 6378137.000000;
var c_sb = 6356752.314245;
var e2 = Math.Pow((Math.Pow(c_sa,2) - Math.Pow(c_sb,2)),0.5)/c_sb;
var e2cuadrada = Math.Pow(e2,2);
var c = Math.Pow(c_sa,2) / c_sb;
var x = utmX - 500000;
var y = isNorthHemisphere ? utmY : utmY - 10000000;
var s = ((zone * 6.0) - 183.0);
var lat = y / (c_sa * 0.9996);
var v = (c / Math.Pow(1 + (e2cuadrada * Math.Pow(Math.Cos(lat), 2)), 0.5)) * 0.9996;
var a = x / v;
var a1 = Math.Sin(2 * lat);
var a2 = a1 * Math.Pow((Math.Cos(lat)), 2);
var j2 = lat + (a1 / 2.0);
var j4 = ((3 * j2) + a2) / 4.0;
var j6 = ((5 * j4) + Math.Pow(a2 * (Math.Cos(lat)), 2)) / 3.0;
var alfa = (3.0 / 4.0) * e2cuadrada;
var beta = (5.0 / 3.0) * Math.Pow(alfa, 2);
var gama = (35.0 / 27.0) * Math.Pow(alfa, 3);
var bm = 0.9996 * c * (lat - alfa * j2 + beta * j4 - gama * j6);
var b = (y - bm) / v;
var epsi = ((e2cuadrada * Math.Pow(a, 2)) / 2.0) * Math.Pow((Math.Cos(lat)), 2);
var eps = a * (1 - (epsi / 3.0));
var nab = (b * (1 - epsi)) + lat;
var senoheps = (Math.Exp(eps) - Math.Exp(-eps)) / 2.0;
var delt = Math.Atan(senoheps/(Math.Cos(nab) ) );
var tao = Math.Atan(Math.Cos(delt) * Math.Tan(nab));
longitude = ((delt * (180.0 / Math.PI)) + s) + diflon;
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)) * (180.0 / Math.PI)) + diflat;
}
Amigo essa linguagem é JAVA ou C# mesmo.
isto é C#, devido a classe Math
MLALEX,
Este trecho quer dizer que a variável [Ô]isNorthHemisphere[Ô] irá receber [Ô]True[Ô] ou [Ô]False[Ô] de acordo com com o resultado da expressão: [Ô]utmZone.Last() >= [ô]N[ô] [Ô]
[][ô]s,
Tunusat.
Este trecho quer dizer que a variável [Ô]isNorthHemisphere[Ô] irá receber [Ô]True[Ô] ou [Ô]False[Ô] de acordo com com o resultado da expressão: [Ô]utmZone.Last() >= [ô]N[ô] [Ô]
bool isNorthHemisphere = utmZone.Last() >= [ô]N[ô];
[][ô]s,
Tunusat.
m vb.net agora so passar pra asp kkkk
public static void ToLatLon(double utmX, double utmY, string utmZone, out double latitude, out double longitude)
{
bool isNorthHemisphere = utmZone.Last() >= [ô]N[ô];
var diflat = -0.00066286966871111111111111111111111111;
var diflon = -0.0003868060578;
var zone = int.Parse(utmZone.Remove(utmZone.Length - 1));
var c_sa = 6378137.000000;
var c_sb = 6356752.314245;
var e2 = Math.Pow((Math.Pow(c_sa,2) - Math.Pow(c_sb,2)),0.5)/c_sb;
var e2cuadrada = Math.Pow(e2,2);
var c = Math.Pow(c_sa,2) / c_sb;
var x = utmX - 500000;
var y = isNorthHemisphere ? utmY : utmY - 10000000;
var s = ((zone * 6.0) - 183.0);
var lat = y / (c_sa * 0.9996);
var v = (c / Math.Pow(1 + (e2cuadrada * Math.Pow(Math.Cos(lat), 2)), 0.5)) * 0.9996;
var a = x / v;
var a1 = Math.Sin(2 * lat);
var a2 = a1 * Math.Pow((Math.Cos(lat)), 2);
var j2 = lat + (a1 / 2.0);
var j4 = ((3 * j2) + a2) / 4.0;
var j6 = ((5 * j4) + Math.Pow(a2 * (Math.Cos(lat)), 2)) / 3.0;
var alfa = (3.0 / 4.0) * e2cuadrada;
var beta = (5.0 / 3.0) * Math.Pow(alfa, 2);
var gama = (35.0 / 27.0) * Math.Pow(alfa, 3);
var bm = 0.9996 * c * (lat - alfa * j2 + beta * j4 - gama * j6);
var b = (y - bm) / v;
var epsi = ((e2cuadrada * Math.Pow(a, 2)) / 2.0) * Math.Pow((Math.Cos(lat)), 2);
var eps = a * (1 - (epsi / 3.0));
var nab = (b * (1 - epsi)) + lat;
var senoheps = (Math.Exp(eps) - Math.Exp(-eps)) / 2.0;
var delt = Math.Atan(senoheps/(Math.Cos(nab) ) );
var tao = Math.Atan(Math.Cos(delt) * Math.Tan(nab));
longitude = ((delt * (180.0 / Math.PI)) + s) + diflon;
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)) * (180.0 / Math.PI)) + diflat;
}
public static void ToLatLon(double utmX, double utmY, string utmZone, out double latitude, out double longitude)
{
bool isNorthHemisphere = utmZone.Last() >= [ô]N[ô];
var diflat = -0.00066286966871111111111111111111111111;
var diflon = -0.0003868060578;
var zone = int.Parse(utmZone.Remove(utmZone.Length - 1));
var c_sa = 6378137.000000;
var c_sb = 6356752.314245;
var e2 = Math.Pow((Math.Pow(c_sa,2) - Math.Pow(c_sb,2)),0.5)/c_sb;
var e2cuadrada = Math.Pow(e2,2);
var c = Math.Pow(c_sa,2) / c_sb;
var x = utmX - 500000;
var y = isNorthHemisphere ? utmY : utmY - 10000000;
var s = ((zone * 6.0) - 183.0);
var lat = y / (c_sa * 0.9996);
var v = (c / Math.Pow(1 + (e2cuadrada * Math.Pow(Math.Cos(lat), 2)), 0.5)) * 0.9996;
var a = x / v;
var a1 = Math.Sin(2 * lat);
var a2 = a1 * Math.Pow((Math.Cos(lat)), 2);
var j2 = lat + (a1 / 2.0);
var j4 = ((3 * j2) + a2) / 4.0;
var j6 = ((5 * j4) + Math.Pow(a2 * (Math.Cos(lat)), 2)) / 3.0;
var alfa = (3.0 / 4.0) * e2cuadrada;
var beta = (5.0 / 3.0) * Math.Pow(alfa, 2);
var gama = (35.0 / 27.0) * Math.Pow(alfa, 3);
var bm = 0.9996 * c * (lat - alfa * j2 + beta * j4 - gama * j6);
var b = (y - bm) / v;
var epsi = ((e2cuadrada * Math.Pow(a, 2)) / 2.0) * Math.Pow((Math.Cos(lat)), 2);
var eps = a * (1 - (epsi / 3.0));
var nab = (b * (1 - epsi)) + lat;
var senoheps = (Math.Exp(eps) - Math.Exp(-eps)) / 2.0;
var delt = Math.Atan(senoheps/(Math.Cos(nab) ) );
var tao = Math.Atan(Math.Cos(delt) * Math.Tan(nab));
longitude = ((delt * (180.0 / Math.PI)) + s) + diflon;
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)) * (180.0 / Math.PI)) + diflat;
}
Ok!! Vou tentar adptar o código para Asp.net Vb mas vou precisar muito da ajuda de vocês. Vejam o que eu fiz. Já sei que tem muito trecho errado:
Abaixo estão os erros que já localizei e não sei como corrigir:
Na linha
Na linha
A linha mais maluca é
Daà para baixo, onde faz referência á variável y dá erro
Pode me ajudar por favor??
Private Function ToLatLon(ByVal utmX As Double, ByVal utmY As Double, ByVal utmZone As String, ByRef latitude As Double, ByRef longitude As Double)
Dim isNorthHemisphere As Boolean = utmZone.Last() >= [ô]N[ô]
Dim diflat As Double = -0.00066286966871111107
Dim diflon As Double = -0.00038680605779999998
Dim zone As Double = Int.Parse(utmZone.Remove(utmZone.Length - 1))
Dim c_sa As Double = 6378137.0
Dim c_sb As Double = 6356752.3142449996
Dim e2 As Double = Math.Pow((Math.Pow(c_sa, 2) - Math.Pow(c_sb, 2)), 0.5) / c_sb
Dim e2cuadrada As Double = Math.Pow(e2, 2)
Dim c As Double = Math.Pow(c_sa, 2) / c_sb
Dim x As Double = utmX - 500000
Dim y As Double = isNorthHemisphere ? utmY : utmY - 10000000
Dim s As Double = ((zone * 6.0) - 183.0)
Dim lat As Double = y / (c_sa * 0.99960000000000004)
Dim v As Double = (c / Math.Pow(1 + (e2cuadrada * Math.Pow(Math.Cos(lat), 2)), 0.5)) * 0.99960000000000004
Dim a As Double = x / v
Dim a1 As Double = Math.Sin(2 * lat)
Dim a2 As Double = a1 * Math.Pow((Math.Cos(lat)), 2)
Dim j2 As Double = lat + (a1 / 2.0)
Dim j4 As Double = ((3 * j2) + a2) / 4.0
Dim j6 As Double = ((5 * j4) + Math.Pow(a2 * (Math.Cos(lat)), 2)) / 3.0
Dim alfa As Double = (3.0 / 4.0) * e2cuadrada
Dim beta As Double = (5.0 / 3.0) * Math.Pow(alfa, 2)
Dim gama As Double = (35.0 / 27.0) * Math.Pow(alfa, 3)
Dim bm As Double = 0.99960000000000004 * c * (lat - alfa * j2 + beta * j4 - gama * j6)
Dim b As Double = (y - bm) / v
Dim epsi As Double = ((e2cuadrada * Math.Pow(a, 2)) / 2.0) * Math.Pow((Math.Cos(lat)), 2)
Dim eps As Double = a * (1 - (epsi / 3.0))
Dim nab As Double = (b * (1 - epsi)) + lat
Dim senoheps As Double = (Math.Exp(eps) - Math.Exp(-eps)) / 2.0
Dim delt As Double = Math.Atan(senoheps / (Math.Cos(nab)))
Dim tao As Double = Math.Atan(Math.Cos(delt) * Math.Tan(nab))
longitude = ((delt * (180.0 / Math.PI)) + s) + diflon;
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)) * (180.0 / Math.PI)) + diflat
End Function
Abaixo estão os erros que já localizei e não sei como corrigir:
Na linha
Dim isNorthHemisphere As Boolean = utmZone.Last() >= [ô]N[ô]
o sÃmbolo [Ô]=[Ô] está avisando [Ô]Expression Expected[Ô] Na linha
Dim zone As Double = Int.Parse(utmZone.Remove(utmZone.Length - 1))
o Int.Parse está dando [Ô]Overload resolution failed...[Ô]A linha mais maluca é
Dim y As Double = isNorthHemisphere ? utmY : utmY - 10000000
Essa parece estar toda errada. Não tenho a menor idéia de para que é esse [Ô]?[Ô]Daà para baixo, onde faz referência á variável y dá erro
Pode me ajudar por favor??
Dim isNorthHemisphere As Boolean = utmZone.Last() >= [ô]N[ô]
O [ô]N[ô] do C# é um literal para Char, no VB.Net fica
Dim isNorthHemisphere As Boolean = utmZone.Last() >= [Ô]N[Ô]C
Quando se tem uma string com uma única letra pode-se adicionar um C do lado de fora das aspas para marcar que é um Char em vez de String
Dim zone As Double = Int.Parse(utmZone.Remove(utmZone.Length - 1))
int no C# equivale a Integer no VB.Net, então o correto ai seria
Dim zone As Double = Integer.Parse(utmZone.Remove(utmZone.Length - 1))
Dim y As Double = isNorthHemisphere ? utmY : utmY - 10000000
Este é um caso mais complicado, se não me engano a partir do VS.Net 2008 pode-se usar um operador If, que é uma melhoria ao método IIf
Dim y As Double = If(isNorthHemisphere, utmY, utmY - 10000000)
Ele basicamente é
[ô]C#
retorno = Expressao de teste ? caso true : caso false;
[ô]VB.Net
retorno = If (Expressão de teste, Caso True, Caso False)
Antes dele existir podia-se usar o IIf, porém apesar de parecer a mesma coisa ele tem a diferença de ser uma função e não um operador, o que faz com que tanto o caso true quanto o caso false seja executado independente do valor que vai ser retornado.
Além disso eu não conferi o código, outro detalhe, só para explicar como funciona no C# e seu equivalente ao VB.Net
No C# fazer algo como
var zone = int.Parse(utmZone.Remove(utmZone.Length - 1));
Equivale a
Dim zone = Integer.Parse(utmZone.Remove(utmZone.Length - 1))
Repare que não declarei o tipo, porém a partir do VS.Net 2008 existe a inferência de tipos, por exemplo neste caso o compilador detecta que o código que atribui o valor a variável retorna um Integer, então ele automaticamente faz com que esta variável seja do tipo Integer mesmo você não tendo declarado isso, que é exatamente o que o var faz no C#, então vai de você querer declarar ou não o tipo quando ele pode ser inferido.
OCELOT, quero te agradecer do fundo do coração pela aula. Com suas instruções, o código funcionou sem problema algum. Que Deus te abençoe e retribua com saúde e dinheiro todo o tempo que você despreendeu comigo. MUITO OBRIGADO.
Tópico encerrado , respostas não são mais permitidas