Atualmente, estou usando a função abaixo e ela não funciona corretamente. De acordo com o Google Maps, a distância entre essas coordenadas (de 59.3293371,13.4877472
a 59.3225525,13.4619422
) é de 2.2
quilômetros, enquanto a função retorna 1.6
quilômetros. Como faço para que essa função retorne a distância correta?
function getDistanceFromLatLonInKm(lat1, lon1, lat2, lon2) {
var R = 6371; // Radius of the earth in km
var dLat = deg2rad(lat2-lat1); // deg2rad below
var dLon = deg2rad(lon2-lon1);
var a =
Math.sin(dLat/2) * Math.sin(dLat/2) +
Math.cos(deg2rad(lat1)) * Math.cos(deg2rad(lat2)) *
Math.sin(dLon/2) * Math.sin(dLon/2)
;
var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
var d = R * c; // Distance in km
return d;
}
function deg2rad(deg) {
return deg * (Math.PI/180)
}
jsFiddle: http://jsfiddle.net/edgren/gAHJB/
javascript
coordinates
distance
Airikr
fonte
fonte
Respostas:
O que você está usando é chamado de fórmula haversine , que calcula a distância entre dois pontos em uma esfera enquanto o corvo voa . O link do Google Maps que você forneceu mostra a distância em 2,2 km porque não é uma linha reta.
O Wolphram Alpha é um ótimo recurso para fazer cálculos geográficos e também mostra uma distância de 1,652 km entre esses dois pontos .
Se você está procurando uma distância em linha reta (como os arquivos crow), sua função está funcionando corretamente. Se o que você deseja é distância de carro (distância de bicicleta ou transporte público ou distância a pé), você precisará usar uma API de mapeamento ( Google ou Bing é a mais popular) para obter a rota apropriada, que incluirá a distância.
Aliás, a API do Google Maps fornece um método empacotado para distância esférica, em seu
google.maps.geometry.spherical
espaço de nome (procurecomputeDistanceBetween
). Provavelmente é melhor do que rodar o seu próprio (para começar, ele usa um valor mais preciso para o raio da Terra).Para os exigentes entre nós, quando digo "distância em linha reta", estou me referindo a uma "linha reta em uma esfera", que na verdade é uma linha curva (ou seja, a distância do grande círculo), é claro.
fonte
Eu escrevi uma equação semelhante antes - testei e também tenho 1,6 km.
Seu google maps estava mostrando a distância de CONDUÇÃO.
Sua função é calculada conforme o corvo voa (distância em linha reta).
fonte
A solução de Derek funcionou bem para mim, e eu simplesmente a converti para PHP, espero que ajude alguém lá fora!
fonte
Tente isso. Está no VB.net e você precisa convertê-lo para Javascript. Esta função aceita parâmetros em minutos decimais.
Editar A função convertida em javascript
fonte
const earthsMajorAccess = 6378137.0;
eliminando a necessidade de comentários úteis (desde o nome da variável implica o que é)Calcular a distância entre dois pontos em javascript
Para mais detalhes, consulte: Link de referência
fonte
Usando a fórmula Haversine, fonte do código :
O código de amostra é licenciado sob LGPLv3.
fonte
Eu escrevi a função para encontrar a distância entre duas coordenadas. Ele retornará a distância em metros.
fonte
Distância do grande círculo - Do comprimento do acorde
Aqui está uma solução elegante que aplica o padrão de design da estratégia; Espero que seja legível o suficiente.
TwoPointsDistanceCalculatorStrategy.js :
GreatCircleTwoPointsDistanceCalculatorStrategy.js:
convert-degrees-to-radians.js:
Isto segue a distância do Grande Círculo - Do comprimento do acorde, documentado aqui .
fonte
Visite este endereço. https://www.movable-type.co.uk/scripts/latlong.html Você pode usar este código:
fonte