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