Wie erkenne ich, ob ein Lat,Lng Punkt in einem Kreis enthalten?
Ok, ziemlich selbsterklärend. Ich bin über google maps, und ich bin versucht, herauszufinden, ob ein lat,long point ist innerhalb eines Kreises von radius-sagen wir x (x ist vom Benutzer ausgewählt).
Bounding box wird nicht für diese Arbeit. Ich habe bereits versucht mit dem folgenden code:
distlatLng = new google.maps.LatLng(dist.latlng[0],dist.latlng[1]);
var latLngBounds = circle.getBounds();
if(latLngBounds.contains(distlatLng)){
dropPins(distlatLng,dist.f_addr);
}
Dies führt immer noch in der Marker wird an Orten außerhalb des Kreises.
Ich denke, dies ist eine einfache Mathematik erfordert die Berechnung der Krümmung oder auf einer Fläche, aber ich bin nicht sicher, wo zu beginnen. Irgendwelche Vorschläge?
InformationsquelleAutor der Frage Stuart Beard | 2010-12-16
Du musst angemeldet sein, um einen Kommentar abzugeben.
Funktionierende Lösung mit dragable center marker
Haben Sie jemals versucht,
contains
? Werfen Sie einen Blick auf dieLatLngBounds
Konstruktor.Schrieb ich einen Artikel über ihn, enthält einen link zu einer funktionierenden JSFiddle.net Beispiel.
Aktualisierte version.
InformationsquelleAutor der Antwort kaiser
Leider Pythagoras ist keine Hilfe auf einer Kugel. So Stuart BART ' s Antwort ist falsch; longitude Unterschiede nicht in einem festen Verhältnis zu m, sondern hängt von der geographischen Breite.
Dem richtigen Weg ist, um die Formel für die Großkreis-Entfernungen. Eine gute Näherung, unter der Annahme einer kugelförmigen Erde, ist das (in C++):
wo
und
InformationsquelleAutor der Antwort Graham Asher
Verwenden die Google Maps API geometrie-Bibliothek zum berechnen der Entfernung zwischen dem Kreis-Mittelpunkt und Ihre marker, und dann vergleichen Sie es mit Ihrem radius.
InformationsquelleAutor der Antwort zavidovych
Der folgende code funktioniert für mich: meine marker nicht gezogen werden, außerhalb des Kreises, sondern es hängt nur an seinem Rand (in jede Richtung) und die zuletzt als gültig erkannte position beibehalten.
Die Funktion aus dem eventhandler für Marker 'drag' - Ereignis.
Dank http://unserkaiser.com/code/google-maps-marker-check-if-in-circle/
und http://www.mvjantzen.com/blog/?p=3190 .
InformationsquelleAutor der Antwort Risadinha
Es ist sehr einfach. Sie müssen nur berechnen Abstand zwischen Zentrum und Bezugspunkt und vergleichen Sie auf radius. Erhalten Sie Hilfe zur Berechnung der Distanz zwischen zwei lat lang von hier
InformationsquelleAutor der Antwort Ashutosh
Habe ich schon ein bisschen albern, wirklich. Denken Sie können wir verwenden, Pythagorus' theorem.
Haben wir eine maximale Entfernung von einem Punkt (X km), und zwei breiten und zwei Längen. Wenn wir ein Dreieck bilden mit diesen dann lösen wir für die Entfernung von dem Punkt.
Also sagen, wir wissen
point1
mit Koordinatenlat1,lng1
ist das Zentrum des Kreises und diepoint2
mit Koordinatenlat2,lng2
ist der Punkt, den wir versuchen zu entscheiden, ist in den Kreis oder nicht.Wir die form eines rechtwinkligen Dreiecks mit einem Punkt, bestimmt durch
point1
undpoint2
. Diespoint3
hätte Koordinatenlat1,lng2
oderlat2,lng1
(egal welche). Wir berechnen dann die Unterschiede (oder, wenn Sie bevorzugen) Entfernungen -latDiff = lat2-lat1
undlngDiff = lng2-lng1
wir berechnen dann den Abstand von der Mitte mit Pythagorus -
dist=sqrt(lngDiff^2+latDiff^2)
.Müssen wir übersetzen alles in Meter, so dass es korrekt funktioniert mit google maps Meilen multipliziert 1609 (ca) und den Breitengrad/Längengrad von 111000 (ca). Das ist nicht gerade genau, aber es macht einen angemessenen job.
Hoffe, dass alle Sinn macht.
InformationsquelleAutor der Antwort Stuart Beard