Se eu tiver uma leitura de latitude ou longitude no formato NMEA padrão, existe uma maneira / fórmula fácil de converter essa leitura em metros, que eu posso implementar em Java (J9)?
Edit: Ok, parece que o que eu quero fazer não é possível facilmente , no entanto, o que eu realmente quero fazer é:
Digamos que eu possua um ponto de latência e longitude e um usuário de latência e longitude há uma maneira fácil de compará-los e decidir quando informar ao usuário que eles estão a uma distância razoavelmente próxima do waypoint? Sei que razoável é o assunto, mas isso é facilmente factível ou ainda excessivamente matemático-y?
math
geolocation
geo
Adam Taylor
fonte
fonte
Respostas:
Aqui está uma função javascript:
Explicação: https://en.wikipedia.org/wiki/Haversine_formula
fonte
Dado que você está procurando uma fórmula simples, esta é provavelmente a maneira mais simples de fazê-lo, supondo que a Terra seja uma esfera com uma circunferência de 40075 km.
Comprimento em metros de 1 ° de latitude = sempre 111,32 km
Comprimento em metros de 1 ° de longitude = 40075 km * cos (latitude) / 360
fonte
Para aproximar distâncias curtas entre duas coordenadas, usei fórmulas em http://en.wikipedia.org/wiki/Lat-lon :
.
No código abaixo, deixei os números brutos para mostrar sua relação com a fórmula da wikipedia.
A entrada da Wikipedia afirma que a distância calculada está dentro de 0,6 m por 100 km longitudinalmente e 1 cm por 100 km latitudinalmente, mas não verifiquei isso, pois em qualquer lugar próximo dessa precisão é bom para o meu uso.
fonte
Latitudes e longitudes especificam pontos, não distâncias; portanto, sua pergunta é um tanto absurda. Se você está perguntando sobre a menor distância entre dois pontos (lat, lon), consulte este artigo da Wikipedia sobre distâncias de grandes círculos.
fonte
Existem muitas ferramentas que tornarão isso fácil. Veja a resposta de monjardin para mais detalhes sobre o que está envolvido.
No entanto, fazer isso não é necessariamente difícil. Parece que você está usando Java, então eu recomendaria procurar algo como o GDAL . Ele fornece wrappers java para suas rotinas e eles têm todas as ferramentas necessárias para converter de Lat / Lon (coordenadas geográficas) para UTM (sistema de coordenadas projetadas) ou alguma outra projeção de mapa razoável.
O UTM é bom, porque é medidor, muito fácil de trabalhar. No entanto, você precisará obter a zona UTM apropriada para fazer um bom trabalho. Existem alguns códigos simples disponíveis no Google para encontrar uma zona apropriada para um par de lat / long.
fonte
A terra é uma superfície irritantemente irregular, então não existe uma fórmula simples para fazer isso exatamente. Você tem que viver com um modelo aproximado da Terra e projetar suas coordenadas nela. O modelo que normalmente vejo usado para isso é o WGS 84 . É isso que os dispositivos GPS costumam usar para resolver exatamente o mesmo problema.
O NOAA possui algum software que você pode baixar para ajudar com isso em seu site .
fonte
Aqui está a versão R da função bh- , apenas no caso de:
fonte
Uma milha náutica (1852 metros) é definida como um minuto de arco de longitude no equador. No entanto, você precisa definir uma projeção de mapa (consulte também UTM ) na qual você está trabalhando para que a conversão faça realmente sentido.
fonte
Existem algumas maneiras de calcular isso. Todos eles usam aproximações de trigonometria esférica onde o raio é o da Terra.
tente http://www.movable-type.co.uk/scripts/latlong.html para conhecer alguns métodos e códigos em diferentes idiomas.
fonte
fonte
Para converter latitude e longitude nas representações x e y, você precisa decidir que tipo de projeção de mapa usar. Quanto a mim, o Elliptical Mercator parece muito bem. Aqui você pode encontrar uma implementação (em Java também).
fonte
Se estiver suficientemente perto, você poderá tratá-las como coordenadas em um plano. Isso funciona no nível da rua ou da cidade, se não for necessária uma precisão perfeita e tudo o que você precisa é de uma estimativa aproximada da distância envolvida para comparar com um limite arbitrário.
fonte
Baseado na distância média para ingressar na Terra.
1 ° = 111km;
Convertendo isso para radianos e dividindo por metros, é um número mágico para o RAD, em metros: 0,000008998719243599958;
então:
fonte
Se você deseja uma solução simples, use a fórmula Haversine, conforme descrito nos outros comentários. Se você tem uma aplicação sensível à precisão, lembre-se de que a fórmula Haversine não garante uma precisão melhor que 0,5%, pois assume que a Terra é uma esfera. Para considerar que a Terra é um esferóide oblato, considere o uso das fórmulas de Vincenty . Além disso, não tenho certeza de qual raio devemos usar com a fórmula Haversine: {Equador: 6.378.137 km, Polar: 6.356.752 km, Volumétrica: 6.371,0088 km}.
fonte
it is assuming the earth is a circle
^^ Algumas pessoas estranhas fazem isso hoje em dia ... mas o que você quer dizer é provavelmente um poucoit is assuming the earth is a sphere
;)Você precisa converter as coordenadas em radianos para fazer a geometria esférica. Depois de convertido, você pode calcular uma distância entre os dois pontos. A distância então pode ser convertida para qualquer medida que você desejar.
fonte