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.
tl; dr ? jsFiddle hier - schauen Sie sich Ihre Konsolenausgabe an.
Grundsätzlich gibt es zwei Möglichkeiten, dies zu tun:
spherical
-Bibliothek, um zu funktionieren. 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.
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
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.
Verwenden Sie GoogleMap.setOnMyLocationChange(OnMyLocationChangeListener)
anstelle von LocationManager
. Auf diese Weise erhalten Sie Location
s, die den blauen Punkten entsprechen.
Tags und Links java android google-maps