Distancia em metros de coordenadas GPS

20 respostas
B

Fala galera, to querendo saber como eu faço pra pegar a distancia em metros de dois pontos que meu GPS me retornou, alguem pode ajudar ai?

valeus

20 Respostas

V

Que padrão usa o seu GPS? SIRF32, Garmin ou NMEA?

C

http://www.movable-type.co.uk/scripts/latlong.html

B

NMEA

B

opa, em primeiro lugar, valeu pela ajuda

mas eu ja tinha achado essa formula em outro site, mas ela nao ta funcionando… eu tenho um site aki q faz os calculos e to comparando com ele, enquanto nele uma distancia dá 500 metros, com essa formula ta dando 7 metros, e se alguem tiver certo, com certeza é o site hehehe

B

to postando aki o codigo q eu fiz, basicamente copiei de uma pagina q eu achei na net

public double getDistancia(double latitude, double longitude, double latitudePto, double longitudePto){ double dlon, dlat, a, distancia; dlon = longitudePto - longitude; dlat = latitudePto - latitude; a = Math.pow(Math.sin(dlat/2),2) + Math.cos(latitude) * Math.cos(latitudePto) * Math.pow(Math.sin(dlon/2),2); distancia = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); return 6378140 * distancia; /* 6378140 is the radius of the Earth in meters*/ }

eu pego as coordenadas e jogo no google maps pra ter uma noçao, e tambem jogo nesta pagina:
http://www.csgnetwork.com/gpsdistcalc.html

B

uma coisa q eu notei agora, as latitudes e longitudes q eu tenho q passar para a formula precisam estar em graus minutos e segundos???

pois as q eu passo já estao no formato de coordenadas, ja convertendo.

S

bz:
uma coisa q eu notei agora, as latitudes e longitudes q eu tenho q passar para a formula precisam estar em graus minutos e segundos???

pois as q eu passo já estao no formato de coordenadas, ja convertendo.

AS funções em Math como cos() e sin() aceitam radianos. atan2 retorna radianos também.
Se os seus valores latitude/longitude são em graus vc precisa converter utilizando a função Math.toRadians()

B

sergiotaborda:
bz:
uma coisa q eu notei agora, as latitudes e longitudes q eu tenho q passar para a formula precisam estar em graus minutos e segundos???

pois as q eu passo já estao no formato de coordenadas, ja convertendo.

AS funções em Math como cos() e sin() aceitam radianos. atan2 retorna radianos também.
Se os seus valores latitude/longitude são em graus vc precisa converter utilizando a função Math.toRadians()

eu creio q minhas coordenadas ja estejam em radianos, eu pego os dados NMEA do meu GPS e passo por uma formula q eu achei na internet q jah deixa as minhas coordenadas assim:

-8.072518624894545, -34.95867848396301

isso já tá em radiano certo?

é isso que eu to mandando pra calcular a distancia

B

é, faltava converter pra radianos mesmo :smiley:
valeu mto galera pela ajuda
abração

A

Desculpa a minha ignorancia, pessoal. Mas eu to esse mesmo problema aqui… preciso calcular a distancia entre 2 pontos vindos do GPS.

a latitude e longitude que o meu gps me retorna de um ponto sao:

double latitude = -2251.5071;
double longitude = -4312.5820;

o formato esta assim: .

pra transformar em decimal eu uso esse algoritmo que eu mesmo fiz:

int graus = (int) latitude/100;

int minutos = ((int) latitude%100)/60;

double segundos = (latitude - (int) latitude)/36.0;

latitude = graus + minutos + segundos;

no exemplo acima ficaria:

graus = -22;

minutos = 0.85;

segundos = 0.01408611111111111;

latitude = -22.86408611111111111;

eu usei isso num mapa de localizacao que eu fiz e funciona perfeitamente. Queria saber se isso eh o que vcs chamam de passar pra radianos ou se passar pra radianos eh alguma outra coisa. Se for outra coisa, com eu faria?

M

Na matemática, a métrica (SI) de ângulo não são graus ( de 0 a 360 graus para um ciclo) e sim radianos ( de o a 2 PI radianos para um ciclo). Para converter é simples e já tem método que faz isso. Se você tiver o valor em graus o método te retorna o equivalente em radianos.

Até!

R

basicamente, http://pt.wikipedia.org/wiki/Teorema_de_Pitágoras

B

Augusto_:
Desculpa a minha ignorancia, pessoal. Mas eu to esse mesmo problema aqui… preciso calcular a distancia entre 2 pontos vindos do GPS.

a latitude e longitude que o meu gps me retorna de um ponto sao:

double latitude = -2251.5071;
double longitude = -4312.5820;

o formato esta assim: .

pra transformar em decimal eu uso esse algoritmo:

int graus = (int) latitude/100;

int minutos = ((int) latitude%100)/60.0;

double segundos = (latitude - (int) latitude)/36.0;

latitude = graus + minutos + segundos;

no exemplo acima ficaria:

graus = -22;

minutos = 0.85;

segundos = 0.01408611111111111;

latitude = -22.86408611111111111;

eu usei isso num mapa de localizacao que eu fiz e funciona perfeitamente. Queria saber se isso eh o que vc chamam de passar pra radianos ou se passar pra radianos eh alguma outra coisa. Se for outra coisa, com eu faria?

cara, faz mto tempo q eu fiz esse projeto, mas pelo q eu me lembro eh essa formula ai mesmo ou alguma mto parecida q trasnforma para radianos

M

Pitágoras daria uma aproximação boa quando os dois pontos fossem relativamente próximos mas a distância requerida é a da superfície terrestre e não a distância linear de um ponto ao outro. Então a fórmula dada anteriormente no tópico é a que tem a melhor aproximação ( visto que ela entende a terra como uma esfera e não como um elipsóide, mas que para os fins ainda é uma ótima aproximação ).

Até!

A
maquiavelbona:
ricardosoares:
basicamente, http://pt.wikipedia.org/wiki/Teorema_de_Pit%C3%A1goras
Pitágoras daria uma aproximação boa quando os dois pontos fossem relativamente próximos mas a distância requerida é a da superfície terrestre e não a distância linear de um ponto ao outro. Então a fórmula dada anteriormente no tópico é a que tem a melhor aproximação ( visto que ela entende a terra como uma esfera e não como um elipsóide, mas que para os fins ainda é uma ótima aproximação ).

Até!

caraca, isso que eh resposta!! hhahaha meus parabens!

consegui fazer funcionar. Eu tenho que usar esse meu metodo no valor na latitude e na longitude antes de jogar no Math.toRadians. Deu a distancia certinha, 2 metros e meio.

pra quem quiser o metodo pronto eh esse aqui:

public double converte(double aux) {
	int graus = (int) aux/100;
	int minutos = ((int)aux%100)/60;
	double segundos = (aux - (int) aux)/36.0;
	
	aux = graus + minutos + segundos;
	
	return aux;
}

depois joga o valor que esse metodo retorna na Math.toRadians. Ai sim joga no método getDistancia do rapaz ai em cima.

Fica mais ou menos assim:

MinhaClasse mc = new MinhaClasse();
double distancia = mc.getDistancia(Math.toRadians(mc.converte(2251.5071)),...);

valeu pela ajuda, pessoal!

S

Augusto_:

no exemplo acima ficaria:

graus = -22;

minutos = 0.85;

segundos = 0.01408611111111111;

latitude = -22.86408611111111111;

eu usei isso num mapa de localizacao que eu fiz e funciona perfeitamente. Queria saber se isso eh o que vcs chamam de passar pra radianos ou se passar pra radianos eh alguma outra coisa. Se for outra coisa, com eu faria?

esse numero que resultou da conta está em graus : -22 graus !

vc precisa converter esse numero para radianos para alimentar as funções trignométricas do Math.

latituteRadianos = Math.toRadians(latitude);
A

entao po… eu fiz isso

esse -22 tah certo.

V

Vocês precisam da distância geodésica. Dá uma olhada no site:
http://obsn3.on.br/~jlkm/geopath/

É muito importante que seja um site nacional, pois o cálculo varia para o hemisfério norte e para o centro do globo.

R

Pitágoras daria uma aproximação boa quando os dois pontos fossem relativamente próximos mas a distância requerida é a da superfície terrestre e não a distância linear de um ponto ao outro. Então a fórmula dada anteriormente no tópico é a que tem a melhor aproximação ( visto que ela entende a terra como uma esfera e não como um elipsóide, mas que para os fins ainda é uma ótima aproximação ).

Até!

concordo, maquiavel…

foi por isso que eu disse “basicamente”.

a simples fórmula de pitágoras não prevê a circunferência da terra.

a fórmula completa de cálculo é umas das que eu acho mais interessante. mas apenas passeia a admirá-la, depois de compreendê-la.

nesse caso, Pitágoras é a base de tudo.

abraço

S

Amigos aqui não consegui calcular a distancia entre 2 pontos, segue abaixo meu exemplo.
Ponto1=-26.8981933333333333,-49.0074199999999999995
Ponto2=-26.9169083333333333,-49.06800333333333333

Utilizando o google ou o site http://www.movable-type.co.uk/scripts/latlong.html a distancia apresentada por ambos é algo em torno de 6.35Km.

Mas ao utilizar o algoritmo passado acima

public static double getDistancia(String lat1, String long1, String lat2, String long2) {
        double dlon, dlat, a, distancia, latt1, longg1, latt2, longg2;     
        latt1 = Double.parseDouble(lat1);
        longg1 = Double.parseDouble(long1);
        latt2 = Double.parseDouble(lat2);
        longg2 = Double.parseDouble(long2);
        dlon = longg2 - longg1;
        dlat = latt2 - latt1;
        a = Math.pow(Math.sin(dlat / 2), 2) + Math.cos(latt1) * Math.cos(latt2) * Math.pow(Math.sin(dlon / 2), 2);
        distancia = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
        return 6378140 * distancia;  
    }

é retornado um valor de 142698.[telefone removido]

Alguem consegue identificar onde está o problema?

Obrigado!

Criado 21 de maio de 2008
Ultima resposta 24 de jun. de 2010
Respostas 20
Participantes 8