J'ai des données avec la latitude et la longitude stockées dans ma base de données SQLite, et je veux obtenir les emplacements les plus proches des paramètres que j'ai mis (par exemple, ma position actuelle - lat / lng, etc.).
Je sais que cela est possible dans MySQL, et j'ai fait pas mal de recherches sur le fait que SQLite a besoin d'une fonction externe personnalisée pour la formule Haversine (calcul de la distance sur une sphère), mais je n'ai rien trouvé qui soit écrit en Java et fonctionne .
De plus, si je veux ajouter des fonctions personnalisées, j'ai besoin du org.sqlite
.jar (pour org.sqlite.Function
), et cela ajoute une taille inutile à l'application.
L'autre aspect de ceci est que j'ai besoin de la fonction Order by de SQL, car l'affichage de la distance seule n'est pas vraiment un problème - je l'ai déjà fait dans mon SimpleCursorAdapter personnalisé, mais je ne peux pas trier les données, car je je n'ai pas la colonne de distance dans ma base de données. Cela signifierait mettre à jour la base de données chaque fois que l'emplacement change et c'est un gaspillage de batterie et de performances. Donc, si quelqu'un a une idée sur le tri du curseur avec une colonne qui n'est pas dans la base de données, je lui en serais également reconnaissant!
Je sais qu'il existe des tonnes d'applications Android qui utilisent cette fonction, mais quelqu'un peut-il expliquer la magie.
Au fait, j'ai trouvé cette alternative: une requête pour obtenir des enregistrements basés sur Radius dans SQLite?
Cela suggère de créer 4 nouvelles colonnes pour les valeurs cos et sin de lat et lng, mais y a-t-il un autre moyen pas si redondant?