Hier ist eine einfache JavaScript-Funktion, die hilfreich sein könnte, von diesem Link... irgendwie relevant, aber wir verwenden das Google Earth JavaScript-Plugin anstelle von Karten
function getApproximateDistanceUnits(point1, point2) {
var xs = 0;
var ys = 0;
xs = point2.getX() - point1.getX();
xs = xs * xs;
ys = point2.getY() - point1.getY();
ys = ys * ys;
return Math.sqrt(xs + ys);
}
Die Einheiten sind jedoch keine Entfernungen, sondern ein Verhältnis zu Ihren Koordinaten. Es gibt andere damit verbundene Berechnungen, die Sie für die getApproximateDistanceUnits-Funktion ersetzen können Link hier
Dann verwende ich diese Funktion, um zu sehen, ob ein Breiten- und Längengrad innerhalb des Radius liegt
function isMapPlacemarkInRadius(point1, point2, radi) {
if (point1 && point2) {
return getApproximateDistanceUnits(point1, point2) <= radi;
} else {
return 0;
}
}
Ein Punkt kann wie folgt definiert sein
$$.getPoint = function(lati, longi) {
var location = {
x: 0,
y: 0,
getX: function() { return location.x; },
getY: function() { return location.y; }
};
location.x = lati;
location.y = longi;
return location;
};
dann können Sie prüfen, ob ein Punkt innerhalb einer Region mit einem Radius liegt, sagen wir:
// platziere es auf der Karte, wenn es innerhalb des Bereichs eines angegebenen Radius liegt, angenommen, 100.000.000 Einheiten
var iconpoint = Map.getPoint(pp.latitude, pp.longitude);
var centerpoint = Map.getPoint(Settings.CenterLatitude, Settings.CenterLongitude);
// ungefähr ~200 Einheiten, um nur die Hälfte des Globus vom Standard-Mittelradius aus anzuzeigen
if (isMapPlacemarkInRadius(centerpoint, iconpoint, 120)) {
addPlacemark(pp.latitude, pp.longitude, pp.name);
}
else {
otherSidePlacemarks.push({
latitude: pp.latitude,
longitude: pp.longitude,
name: pp.name
});
}
0 Stimmen
Für eine bessere Genauigkeit - siehe stackoverflow.com/questions/1420045/…
4 Stimmen
Beachten Sie, dass Sie die Haversine-Formel nicht auf einem Rotationsellipsoid wie WGS 84 anwenden können. Sie können diese Methode nur auf einer Kugel mit einem Radius anwenden.
8 Stimmen
Die meisten Antworten hier verwenden einfache sphärische Trigonometrie, daher sind die Ergebnisse im Vergleich zu den WGS84-Ellipsoidentfernungen, die im GPS-System verwendet werden, ziemlich grob. Einige der Antworten beziehen sich zwar auf die Vincenty-Formel für Ellipsoide, aber dieser Algorithmus wurde für die Verwendung auf Schreibtischrechnern aus den 1960er Jahren entwickelt und weist Stabilitäts- und Genauigkeitsprobleme auf; wir haben jetzt bessere Hardware und Software. Bitte sehen Sie GeographicLib für eine hochwertige Bibliothek mit Implementierungen in verschiedenen Sprachen.
0 Stimmen
@MikeT - das stimmt, obwohl viele der Antworten hier nützlich zu sein scheinen über kleine Entfernungen: Wenn Sie Breiten- / Längengrad von WGS 84 nehmen und Haversine wie wenn es Punkte auf einer Kugel anwenden, erhalten Sie Antworten, deren Fehler nur auf den Erdabplattungsfaktor zurückzuführen sind, vielleicht also innerhalb von 1% einer genaueren Formel? Mit der Einschränkung, dass es sich um kleine Entfernungen handelt, sagen wir innerhalb einer einzigen Stadt.
1 Stimmen
Für diese Plattformen: Mono/.NET 4.5/.NET Core/Windows Phone 8.x/Universal Windows Platform/Xamarin iOS/Xamarin Android siehe stackoverflow.com/a/54296314/2736742
0 Stimmen
Siehe auch diese großartige Python-Antwort: Schnelle Haversine-Approximation (Python/Pandas)