• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

LuBoc

Converter código Javascript em ASP.NET 2.0

2 mensagens neste tópico

Olá,

Tenho um conjunto de funções em Javascript que convertem as coordenadas do Google Maps para GPS, tentei converter isso para ASP.NET, mas não estou a conseguir que funcione!

Deixo aqui o código javascript e se alguém tem oportunidade de realizar a conversão:

function DMS_to_Degrees(d,m,s,dir) {
var deg = parseFloat(Math.abs(d)) + parseFloat(Math.abs(m)/60) + parseFloat(Math.abs(s)/3600);
if (dir == 'W' || dir == 'S') { deg = parseFloat(-1*deg); }
if (d == '' && m == '' && s == '') { deg = ''; }
return comma2point(deg);
}

function Degrees_to_DMM(deg,type,spacer,minutemark) {
if (!deg.toString().match(/[0-9]/)) { return ''; }
if (!spacer) { spacer = ''; }
if (!minutemark) { minutemark = ''; }
if (type == 'lat') {	
	if (parseFloat(deg) < 0) { var dir = 'S'; } else { var dir = 'N'; }
} else {
	if (parseFloat(deg) < 0) { var dir = 'W'; } else { var dir = 'E'; }
}
var d = Math.floor(Math.abs(parseFloat(deg)));
var m = 60 * (Math.abs(parseFloat(deg)) - parseFloat(d))
m = Math.round(1000000 * m) / 1000000;
if (type == 'lon') {
	if (d < 10) { d = '00'+d; } else if (d < 100) { d = '0'+d; }
} else {
	if (d < 10) { d = '0'+d; }
}
if (parseFloat(m) == Math.floor(parseFloat(m))) { m = m + '.0'; }
return dir + spacer + d + String.fromCharCode(176) + spacer + comma2point(m) + minutemark;
}

function Degrees_to_DMS(deg,type,spacer) {
if (!deg.toString().match(/[0-9]/)) { return ''; }
if (!spacer) { spacer = ''; }
if (type == 'lat') {	
	if (parseFloat(deg) < 0) { var dir = 'S'; } else { var dir = 'N'; }
} else {
	if (parseFloat(deg) < 0) { var dir = 'W'; } else { var dir = 'E'; }
}
var d = Math.floor(Math.abs(parseFloat(deg)));
var mmm = 60 * (Math.abs(parseFloat(deg)) - parseFloat(d))
mmm = Math.round(1000000 * mmm) / 1000000;
var m = Math.floor(parseFloat(mmm));
var s = 60 * (parseFloat(mmm) - parseFloat(m))
s = Math.round(1000 * s) / 1000;
return dir + spacer + d + String.fromCharCode(176) + spacer + m + '\'' + spacer + comma2point(s) + '"';
}

function deg2rad (deg) {
return (parseFloat(comma2point(deg)) * 3.14159265358979/180);
}
function rad2deg (radians) {
return (Math.round(10000000 * parseFloat(radians) * 180/3.14159265358979) / 10000000);
}
function comma2point (number) {
number = number+''; // force number into a string context
return (number.replace(/,/g,'.'));
}

function parseCoordinate(coordinate,type,format,spaced) {
coordinate = coordinate.toString();
var neg = 0; if (coordinate.match(/(^-|[WS])/i)) { neg = 1; }
if (coordinate.match(/[EW]/i) && !type) { type = 'lon'; }
if (coordinate.match(/[NS]/i) && !type) { type = 'lat'; }
coordinate = coordinate.replace(/[NESW\-]/gi,' ');
if (!coordinate.match(/[0-9]/i)) {
	return '';
}
parts = coordinate.match(/([0-9\.\-]+)[^0-9\.]*([0-9\.]+)?[^0-9\.]*([0-9\.]+)?/);
if (!parts || parts[1] == null) {
	return '';
} else {
	n = parseFloat(parts[1]);
	if (parts[2]) { n = n + parseFloat(parts[2])/60; }
	if (parts[3]) { n = n + parseFloat(parts[3])/3600; }
	if (neg && n >= 0) { n = 0 - n; }
	if (format == 'dmm') {
		if (spaced) {
			n = Degrees_to_DMM(n,type,' ');
		} else {
			n = Degrees_to_DMM(n,type);
		}
	} else if (format == 'dms') {
		if (spaced) {
			n = Degrees_to_DMS(n,type,' ');
		} else {
			n = Degrees_to_DMS(n,type,'');
		}
	} else {
		n = Math.round(10000000 * n) / 10000000;
		if (n == Math.floor(n)) { n = n + '.0'; }
	}
	return comma2point(n);
}
}

// lat - Gmap Lat coordinate
// lng - Gmap Lng coordinate
// space - True/False (space between values)
function Convert_Coordinates(lat,lng, space) { 
var lat = lat;
var lon = lng;
var spaced = space;


      //DDD - Decimal Degrees
      //DMM - Degrees Minutes  (GPS)
      //DMS - Degrees Minutes Seconds

      var coordinates_lat_ddd;
      var coordinates_lat_dmm;
      var coordinates_lat_dms;
      var coordinates_lng_ddd;
      var coordinates_lng_dmm;
      var coordinates_lng_dms;
      var coordinates_pair_ddd;
      var coordinates_pair_dmm;
      var coordinates_pair_dms;

       
coordinates_lat_ddd = parseCoordinate(lat,'lat','ddd',spaced);
coordinates_lat_dmm = parseCoordinate(lat,'lat','dmm',spaced);
coordinates_lat_dms = parseCoordinate(lat,'lat','dms',spaced);

coordinates_lon_ddd = parseCoordinate(lon,'lon','ddd',spaced);
coordinates_lon_dmm = parseCoordinate(lon,'lon','dmm',spaced);
coordinates_lon_dms = parseCoordinate(lon,'lon','dms',spaced);

coordinates_pair_ddd = coordinates_lat_ddd+', '+coordinates_lon_ddd;
coordinates_pair_dmm = coordinates_lat_dmm+', '+coordinates_lon_dmm;
coordinates_pair_dms = coordinates_lat_dms+', '+coordinates_lon_dms;

      alert("Coordinates: DDD = "+coordinates_pair_ddd+" / DMM= "+coordinates_pair_dmm+" / DMS="+coordinates_pair_dms);
}


Mas caso alguém já tenha algo que realize esse tipo de operação (Gmap -> GPS), por favor, partilhe esse código.

Obrigado,

LB

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Olá,

Não consegui converter este Javascript, mas vendo aqui este processo de conversão de Lat/Lng para Graus Minutos Segundos (DMS): http://geography.about.com/library/howto/htdegrees.htm pode-se fazer a seguinte rotina em C#:

    protected string decimal2degree(string decimal_coord, string latorlon)
    {
        int decpos=decimal_coord.IndexOf(',');
        int whole_part=Convert.ToInt32(decimal_coord.Substring(0,decpos));

        decimal decimal_part=Math.Abs(Convert.ToDecimal(decimal_coord)-whole_part);

        decimal minutes=decimal_part*60;
        string minutes_part = Convert.ToString(minutes);
        int minutes_part_pos = minutes_part.IndexOf(',');
        decimal decimal_minutes = (decimal_part * 60) - Convert.ToDecimal(minutes_part.Substring(0,minutes_part_pos));

        decimal seconds = Math.Round(decimal_minutes * 60);
        string L="";
        if (latorlon=="LAT")
        {if (whole_part<0)
	        {
	        whole_part=(whole_part*(-1));
	        L="S";
	        }
        else
	        {
	        L="N";
	        }
        }//end if
        else
        {if(latorlon=="LON")
	        {if (whole_part<0)
		        {
		        whole_part=(whole_part*(-1));
		        L="W";
		        }
	        else
		        {
		        L="E";
		        }
	        }//end if
        }//end if

        string degree = L;
        degree+= Convert.ToString(whole_part) + 'o' + minutes_part.Substring(0, minutes_part_pos) + ''' + Convert.ToString(seconds) + '"';        
        return degree;
    }

Para usar esta rotina, chama-se da seguinte forma:

(...)
// a variavel GPS fica com o resultado final (do tipo DMS): N40o 18' 39" / W7o 33' 36"
string GPS = decimal2degree("40,311014296", "LAT")+ " / " + decimal2degree("-7,5601387", "LON");
(...)

NOTA: Como não consegui colocar aqui os símbolos de graus (bolinha) e minutos (plica esquerda) substituí pelos caracteres - o - e o - ' -, mas que devem mudar quando programarem.

Ok, este código bem que podia ser optimizado, mas fica de forma a que todos consigam entender da melhor forma.

O que ainda não consegui encontrar foi uma forma de colocar em Graus e Minutos (DMM), usado por muitos aparelhos GPS.

Abraços,

LB

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora