2010-06-01 5 views
5

J'ai une liste de coordonnées dans la base de données identifiée comme POI. Pour une ville pourrait être> 100 enregistrements.Faire quelque chose lorsque le téléphone atteint un ensemble de lieux?

Je souhaite recevoir une notification lorsque le téléphone se trouve à 150 mètres de l'un des emplacements. Les coordonnées de localisation ont également une erreur/rayon, généralement de 10 à 100 mètres. Puisque je ne trouve pas bon d'ajouter chaque emplacement (pourrait être des centaines) pour un déclencheur, comment puis-je optimiser le code de réveil?

De même, ai-je des options pour supprimer une notification d'installation précédente de la file d'attente?

Répondre

2

Vous pouvez stocker vos POI dans une sorte de table de hachage intelligente en utilisant les coordonnées pour calculer un hachage unique. Chaque fois qu'une mise à jour d'emplacement arrive, vous faites une recherche dans votre table de hachage pour voir s'il y a des POI près de l'emplacement actuel. Cette recherche ne devrait prendre que O (1), puisqu'il s'agit d'une recherche de hachage.

La plage souhaitée doit être prise en compte lors du calcul des hachages et du stockage des POI.

Juste une idée!

Cordialement, Mefix

+0

Pour autant que je sache dans Android, vous configurez le déclencheur de notification de telle sorte que vous dites au système de me «bourdonner quand le téléphone atteint en coordonnées x, y» Vous dites déjà les coordonnées. Je pourrais configurer des notifications pour tous mes pois, mais cela ne fonctionnerait probablement pas bien avec des centaines d'enregistrements. L'écoute des mises à jour de localisation peut être un processus d'épuisement de la batterie, et nécessite donc que l'application soit en cours d'exécution. – Pentium10

+0

Android SDK a une méthode 'addProximityAlert' qui peut être utilisée à cette fin. – Pentium10

0

Il y a une application appelée Locale, qui peut basculer divers événements en fonction de votre position GPS OU disponible réseau Wifi OU id station cellulaire, etc

Il dispose également d'une interface de plug-ins . Il pourrait être utile pour vous d'examiner cette application et, peut-être, d'écrire un plugin pour cela.

+0

Je connais l'existence de Locale, je veux faire quelque chose de très similaire, mais à des fins différentes. Je ne peux pas utiliser le plugin sdk Locale. – Pentium10

0

Ce problème me rappelle les graphiques dans les jeux vidéo. Il n'y a pas besoin de charger les points qui sont bien en dehors de votre plage de mouvement. Je décomposais la carte en une grille, définissais les triggers pour les 8 blocs de grille adjacents et ensuite pour chacun des POI dans le bloc de grille courant. Lorsqu'un nouveau bloc de grille est atteint, les déclencheurs sont mis à jour. Il serait probablement judicieux de chevaucher les blocs de la grille en tenant compte de la plage d'erreur.