So überprüfen Sie, ob sich der Benutzer in einem Kreis Google Maps v2 befindet

8

Ich habe einen Kreis auf meiner Karte. Jetzt möchte ich feststellen, ob der Benutzer (oder ich) innerhalb des Kreises ist.

%Vor%

Ich habe diesen Code:

%Vor%

Und auf myLocationListener habe ich folgendes:

%Vor%

Es funktioniert korrekt, wenn ich innerhalb von distanceBetween Parameter die Koordinaten von Marker, aber der Toast zeigt Außerhalb obwohl meine Position innerhalb des Radius ist.

Irgendwelche Ideen, wie man das richtig macht? Bitte helfen Sie. Danke!

BEARBEITEN

Ich habe etwas Seltsames entdeckt.

Auf dem Bild können Sie sehen, dass ich eine textView darüber habe, die 5 Zahlen hat (Kreis Breite, Kreis Länge, Abstand bei Index 0, Abstand bei Index 1, Abstand 2 ). distance ist ein Float-Array zum Speichern der Entfernung zwischen der Mitte des Kreises und der Benutzerposition. Ich setze den Radius auf 100, und ich denke, die Einheit ist Meter, aber wie Sie sehen können, sind die Werte im Array distance : 1.334880E7 , -81.25308990478516 , -10696092987060547 . Wie lautet die Formel für die Berechnung der Entfernung? Und auch, 1. etwas 10 erhöhen auf 7 ist etwa 13 Millionen, die wirklich größer als 100 ist. Bitte helfen, es ist wirklich sehr verwirrend. Nach der Dokumentation von Circle (Der Radius des Kreises, in Metern angegeben. Es sollte Null oder größer sein.) Und DistanceBetween (Berechnet die ungefähre Entfernung in Metern zwischen zwei Standorten), so dass ich nicht weiß, warum dies das Ergebnis ist.

    
Jeongbebs 18.11.2013, 09:20
quelle

3 Antworten

3

tl; dr ? jsFiddle hier - schauen Sie sich Ihre Konsolenausgabe an.

Grundsätzlich gibt es zwei Möglichkeiten, dies zu tun:

  1. Überprüfen Sie, ob der (Marker) des Benutzers innerhalb der Circle Bounds liegt
  2. Berechnen Sie den Abstand zwischen dem Benutzer und der Mitte des Kreises. Überprüfen Sie dann, ob es gleich oder kleiner als der Kreisradius ist. Diese Lösung benötigt die spherical -Bibliothek, um zu funktionieren.

Kreisgrenzen

Fügen Sie einfach einen Kreis hinzu:

%Vor%

und dann prüfen, ob der Marker innen ist:

%Vor%

Auf den ersten Blick denkt , dass das funktioniert. Aber das tut es nicht. Im Hintergrund verwendet Google (noch) ein Rechteck, so dass alles innerhalb der rechteckigen Begrenzungsbox, aber außerhalb des Kreises als innerhalb der latLng Grenzen erkannt wird. Es ist falsch und ein bekanntes Problem, aber es scheint Google egal.

Wenn Sie jetzt denken, dass es mit rechteckigen Grenzen arbeiten würde, liegen Sie falsch. Die funktionieren auch nicht.

Kugelabstand

Der einfachste und beste Weg ist es, die Entfernung zu messen. Fügen Sie die sphärische Bibliothek hinzu, indem Sie &library=spherical an Ihren Google Maps-Skriptaufruf anhängen. Dann geh mit

%Vor%     
kaiser 18.11.2013 09:57
quelle
1

Ich weiß, dass diese Frage vor mehr als einem Jahr gestellt wurde, aber ich habe es getan das gleiche Problem und behoben es mit der distanceBetween statische Funktion von Location.

%Vor%     
Christian Abella 25.06.2015 03:56
quelle
0

Verwenden Sie GoogleMap.setOnMyLocationChange(OnMyLocationChangeListener) anstelle von LocationManager . Auf diese Weise erhalten Sie Location s, die den blauen Punkten entsprechen.

    
MaciejGórski 18.11.2013 09:44
quelle

Tags und Links