Wie berechne ich die Entfernung zwischen zwei GPS-Koordinaten (unter Verwendung von Breiten- und Längengrad)?
Berechne die Entfernung zwischen zwei Koordinaten nach Breiten- und Längengrad, einschließlich einer Javascript-Implementierung.
West und Süd Standorte sind negativ. Denken Sie daran, dass Minuten und Sekunden aus 60 bestehen, so dass S31 30' -31,50 Grad ist.
Vergessen Sie nicht, Grad in Bogenmaß zu konvertieren. Viele Sprachen haben diese Funktion. Oder es ist eine einfache Berechnung: "Radiant = Grad * PI / 180".
function degreesToRadians(degrees) {
return degrees * Math.PI / 180;
}
function distanceInKmBetweenEarthCoordinates(lat1, lon1, lat2, lon2) {
var earthRadiusKm = 6371;
var dLat = degreesToRadians(lat2-lat1);
var dLon = degreesToRadians(lon2-lon1);
lat1 = degreesToRadians(lat1);
lat2 = degreesToRadians(lat2);
var a = Math.sin(dLat/2) * Math.sin(dLat/2) +
Math.sin(dLon/2) * Math.sin(dLon/2) * Math.cos(lat1) * Math.cos(lat2);
var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
return earthRadiusKm * c;
}
Hier sind einige Beispiele für die Verwendung:
distanceInKmBetweenCoordinates(0,0,0,0) // Abstand zwischen gleichen Punkten sollte 0 sein 0 distanceInKmBetweenCoordinates(51.5, 0, 38.8, -77.1) // Von London nach Arlington 5918.185064088764
Dieser Lua-Code ist von Sachen auf Wikipedia und in Robert Lipe's [GPSbabel] (http://www.gpsbabel.org/) Werkzeug gefunden angepasst:
local EARTH_RAD = 6378137.0
-- earth's radius in meters (official geoid datum, not 20,000km / pi)
local radmiles = EARTH_RAD*100.0/2.54/12.0/5280.0;
-- earth's radius in miles
local multipliers = {
radians = 1, miles = radmiles, mi = radmiles, feet = radmiles * 5280,
meters = EARTH_RAD, m = EARTH_RAD, km = EARTH_RAD / 1000,
degrees = 360 / (2 * math.pi), min = 60 * 360 / (2 * math.pi)
}
function gcdist(pt1, pt2, units) -- return distance in radians or given units
--- this formula works best for points close together or antipodal
--- rounding error strikes when distance is one-quarter Earth's circumference
--- (ref: wikipedia Great-circle distance)
if not pt1.radians then pt1 = rad(pt1) end
if not pt2.radians then pt2 = rad(pt2) end
local sdlat = sin((pt1.lat - pt2.lat) / 2.0);
local sdlon = sin((pt1.lon - pt2.lon) / 2.0);
local res = sqrt(sdlat * sdlat + cos(pt1.lat) * cos(pt2.lat) * sdlon * sdlon);
res = res > 1 and 1 or res < -1 and -1 or res
res = 2 * asin(res);
if units then return res * assert(multipliers[units])
else return res
end
end
Ich vermute, du willst es entlang der Erdkrümmung. Deine beiden Punkte und der Erdmittelpunkt liegen in einer Ebene. Der Erdmittelpunkt ist der Mittelpunkt eines Kreises auf dieser Ebene und die beiden Punkte liegen (ungefähr) auf dem Umfang dieses Kreises. Daraus kannst du die Entfernung berechnen, indem du herausfindest, wie groß der Winkel von einem Punkt zum anderen ist.
Wenn die Punkte nicht die gleiche Höhe haben oder wenn man berücksichtigen muss, dass die Erde keine perfekte Kugel ist, wird es etwas schwieriger.