J'utilise actuellement la fonction ci-dessous et cela ne fonctionne pas correctement. Selon Google Maps, la distance entre ces coordonnées (de 59.3293371,13.4877472
à 59.3225525,13.4619422
) est en 2.2
kilomètres tandis que la fonction renvoie des 1.6
kilomètres. Comment puis-je faire en sorte que cette fonction renvoie la distance correcte?
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
la source
la source
Réponses:
Ce que vous utilisez s'appelle la formule haversine , qui calcule la distance entre deux points sur une sphère à vol d'oiseau . Le lien Google Maps que vous avez fourni indique que la distance est de 2,2 km, car ce n'est pas une ligne droite.
Wolphram Alpha est une excellente ressource pour faire des calculs géographiques et montre également une distance de 1,652 km entre ces deux points .
Si vous recherchez une distance en ligne droite (comme les fichiers Crow), votre fonction fonctionne correctement. Si vous voulez une distance en voiture (ou une distance à vélo ou une distance de transport en commun ou une distance de marche), vous devrez utiliser une API de cartographie ( Google ou Bing étant le plus populaire) pour obtenir l'itinéraire approprié, qui inclura la distance.
Incidemment, l'API Google Maps fournit une méthode packagée pour la distance sphérique, dans son
google.maps.geometry.spherical
espace de nom (recherchezcomputeDistanceBetween
). C'est probablement mieux que de rouler le vôtre (pour commencer, il utilise une valeur plus précise pour le rayon de la Terre).Pour les plus pointilleux d'entre nous, quand je dis «distance en ligne droite», je fais référence à une «ligne droite sur une sphère», qui est en fait une ligne courbe (c'est-à-dire la distance du grand cercle), bien sûr.
la source
J'ai déjà écrit une équation similaire - je l'ai testée et j'ai également obtenu 1,6 km.
Votre google maps indiquait la distance de CONDUITE.
Votre fonction calcule à vol d'oiseau (distance en ligne droite).
la source
La solution de Derek a bien fonctionné pour moi, et je l'ai simplement convertie en PHP, j'espère qu'elle aidera quelqu'un là-bas!
la source
Essaye ça. Il se trouve sur VB.net et vous devez le convertir en Javascript. Cette fonction accepte les paramètres en minutes décimales.
Modifier la fonction convertie en javascript
la source
const earthsMajorAccess = 6378137.0;
éliminer le besoin de commentaires utiles (puisque le nom de la variable implique ce que c'est)Calculer la distance entre deux points en javascript
Pour plus de détails, reportez-vous à: Lien de référence
la source
Utilisation de la formule Haversine, source du code :
L'exemple de code est sous licence LGPLv3.
la source
J'ai écrit la fonction pour trouver la distance entre deux coordonnées. Il renverra la distance en mètre.
la source
Distance du grand cercle - À partir de la longueur de la corde
Voici une solution élégante appliquant le modèle de conception de stratégie; J'espère que c'est assez lisible.
TwoPointsDistanceCalculatorStrategy.js :
GreatCircleTwoPointsDistanceCalculatorStrategy.js:
convert-degrés-en-radians.js:
Ceci suit la distance du grand cercle - De la longueur de la corde, documentée ici .
la source
Visitez cette adresse. https://www.movable-type.co.uk/scripts/latlong.html Vous pouvez utiliser ce code:
la source