QUE LINGUAGEM É ESSA?

MLALEX 29/06/2015 16:34:25
#448289
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) ??

  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;
}
ALEXPASSOS 29/06/2015 16:43:24
#448290
Amigo essa linguagem é JAVA ou C# mesmo.
GUIMORAES 29/06/2015 16:52:30
#448292
isto é C#, devido a classe Math
TUNUSAT 29/06/2015 17:12:41
#448294
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[ô] [Ô]

bool isNorthHemisphere = utmZone.Last() >= [ô]N[ô];


[][ô]s,
Tunusat.
KURTGU 29/06/2015 17:42:00
#448297
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;
}
MLALEX 30/06/2015 10:11:23
#448329
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:


   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??
OCELOT 30/06/2015 10:38:45
#448331
Resposta escolhida
 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.
MLALEX 30/06/2015 16:08:57
#448350
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