2010-06-01 2 views
5

Ich habe eine Liste von Koordinaten in der Datenbank als POI identifiziert. Für eine Stadt könnte> 100 Datensätze sein.Etwas tun, wenn das Telefon einen bestimmten Standort erreicht?

Ich möchte benachrichtigt werden, wenn das Telefon in 150 Meter Reichweite eines der Lage kommt. Die Positionskoordinaten haben auch einen Fehler/Radius, normalerweise 10 bis 100 Meter. Da ich es nicht gut finde, jeden Ort (könnte Hunderte sein) für einen Trigger hinzuzufügen, wie kann ich den Weckcode optimieren?

Habe ich auch Optionen, um eine vorherige Setup-Benachrichtigung aus der Warteschlange zu entfernen?

Antwort

2

Sie könnten Ihre POIs in einer intelligenten Hash-Tabelle speichern, indem Sie die Koordinaten verwenden, um einen eindeutigen Hashwert zu berechnen. Jedes Mal, wenn ein Standort-Update eintrifft, suchen Sie in Ihrer Hash-Tabelle nach, ob sich POIs in der Nähe des aktuellen Standorts befinden. Diese Suche sollte nur O (1) enthalten, da es sich um eine Hash-Suche handelt.

Der gewünschte Bereich sollte bei der Berechnung der Hashwerte und beim Speichern der POIs berücksichtigt werden.

Nur eine Idee!

Mit freundlichen Grüßen, Mefix

+0

Soweit ich weiß in Android, Sie Benachrichtigung Benachrichtigung Trigger in der Weise, dass Sie sagen, das System 'zu summen, wenn das Telefon in Koord x erreicht, y 'Sie bereits sagen die Koordinaten. Ich könnte Benachrichtigungen für alle meine pois einrichten, aber das würde wahrscheinlich nicht gut mit Hunderten von Datensätzen funktionieren. Das Abhören von Standortaktualisierungen könnte ein Batterieentladeprozess sein und erfordert daher, dass die App ausgeführt wird. – Pentium10

+0

Android SDK verfügt über eine 'addProximityAlert'-Methode, die genau für diesen Zweck verwendet werden kann. – Pentium10

0

Es gibt eine App namens Locale, die verschiedene Ereignisse basierend auf Ihrer GPS-Position oder verfügbare Wifi-Netzwerk oder Zell-Station-ID, etc.

Es hat auch ein Plug-in Schnittstelle umschalten . Es könnte für Sie nützlich sein, diese App zu untersuchen und vielleicht ein Plugin dafür zu schreiben.

+0

Ich weiß über die Existenz von Locale, ich möchte etwas sehr ähnliches tun, aber für andere Zwecke. Ich kann das Locale-Plugin SDK nicht verwenden. – Pentium10

0

Dieses Problem erinnert mich an Grafiken in Videospielen. Es ist nicht nötig, die Punkte zu laden, die weit außerhalb des Bewegungsbereichs liegen. Ich würde die Karte in ein Gitter zerlegen, Trigger für die 8 angrenzenden Gitterblöcke und dann für jeden POI innerhalb des aktuellen Gitterblocks setzen. Wenn ein neuer Gitterblock erreicht wird, werden die Auslöser aktualisiert. Es wäre wahrscheinlich klug, die Rasterblöcke zu überlappen, wenn man den Fehlerbereich berücksichtigt.