Distancia em metros de coordenadas GPS

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

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

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

NMEA

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

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

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.

[quote=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.[/quote]

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()

[quote=sergiotaborda][quote=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.[/quote]

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()[/quote]

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

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

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?

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é!

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

[quote=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?[/quote]

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

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é!

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é![/quote]

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:

[code]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;

}[/code]

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!

[quote=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?[/quote]

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);

entao po… eu fiz isso

esse -22 tah certo.

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.

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é![/quote]

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