Ich verwende derzeit die folgende Funktion und sie funktioniert nicht richtig. Laut Google Maps beträgt der Abstand zwischen diesen Koordinaten (von 59.3293371,13.4877472
bis 59.3225525,13.4619422
) 2.2
Kilometer, während die Funktion 1.6
Kilometer zurückgibt . Wie kann ich diese Funktion veranlassen, den richtigen Abstand zurückzugeben?
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
quelle
quelle
Antworten:
Was Sie verwenden, heißt Haversine-Formel , die den Abstand zwischen zwei Punkten auf einer Kugel in Luftlinie berechnet . Der von Ihnen angegebene Google Maps-Link zeigt die Entfernung als 2,2 km an, da es sich nicht um eine gerade Linie handelt.
Wolphram Alpha ist eine großartige Ressource für geografische Berechnungen und zeigt auch eine Entfernung von 1,652 km zwischen diesen beiden Punkten .
Wenn Sie nach einer geradlinigen Entfernung suchen (wie bei den Crow-Dateien), funktioniert Ihre Funktion ordnungsgemäß. Wenn Sie eine Fahrentfernung (oder eine Fahrradentfernung oder eine Entfernung zu öffentlichen Verkehrsmitteln oder zu Fuß) wünschen, müssen Sie eine Karten-API verwenden ( Google oder Bing ist die beliebteste), um die entsprechende Route zu erhalten, die die Entfernung enthält.
Im Übrigen bietet die Google Maps-API in ihrem
google.maps.geometry.spherical
Namespace eine gepackte Methode für die sphärische Entfernung (suchen nachcomputeDistanceBetween
). Es ist wahrscheinlich besser als selbst zu rollen (für den Anfang wird ein genauerer Wert für den Erdradius verwendet).Für die Pingeligen unter uns meine ich, wenn ich "geradlinige Entfernung" sage, eine "gerade Linie auf einer Kugel", die eigentlich eine gekrümmte Linie ist (dh die Großkreisentfernung).
quelle
Ich habe vorher eine ähnliche Gleichung geschrieben - getestet und auch 1,6 km bekommen.
Auf Ihren Google Maps wurde die Fahrstrecke angezeigt.
Ihre Funktion berechnet in Luftlinie (geradliniger Abstand).
quelle
Dereks Lösung hat für mich gut funktioniert und ich habe sie einfach auf PHP konvertiert. Ich hoffe, sie hilft jemandem da draußen!
quelle
Versuche dies. Es ist in VB.net und Sie müssen es in Javascript konvertieren. Diese Funktion akzeptiert Parameter in Dezimalminuten.
Bearbeiten Die konvertierte Funktion in Javascript
quelle
const earthsMajorAccess = 6378137.0;
Keine hilfreichen Kommentare mehr erforderlich (da der Variablenname impliziert, was er ist)Berechnen Sie den Abstand zwischen zwei Punkten in Javascript
Weitere Informationen finden Sie unter: Referenzlink
quelle
Verwenden der Haversine-Formel, Quelle des Codes :
Der Beispielcode ist unter LGPLv3 lizenziert.
quelle
Ich habe die Funktion geschrieben, um den Abstand zwischen zwei Koordinaten zu finden. Die Entfernung wird in Metern zurückgegeben.
quelle
Großkreisabstand - Von der Akkordlänge
Hier ist eine elegante Lösung, die das Strategiedesignmuster anwendet. Ich hoffe es ist lesbar genug.
TwoPointsDistanceCalculatorStrategy.js :
GreatCircleTwoPointsDistanceCalculatorStrategy.js:
konvertiere Grad in Bogenmaß.js:
Dies folgt der Großkreisentfernung - Von der Akkordlänge, hier dokumentiert .
quelle
Besuchen Sie diese Adresse. https://www.movable-type.co.uk/scripts/latlong.html Sie können diesen Code verwenden:
quelle