2011-07-26 4 views
6

J'ai une base de données intégrée dans mon application qui a toutes les Latitude et Longitude de certains points intéressés et j'ai besoin de connaître ma distance de ces points (obtenir ma position en utilisant le GPS). Mon problème est le suivant: je viens de me rendre compte que SQLite ne peut pas calculer la distance en utilisant la requête que j'ai car elle ne calcule pas les fonctions de trigonométrie (SIN, COS ...). J'essayais d'éviter de calculer ces distances par programmation en utilisant cette requête:IPhone - distance SQLite par Latitude et Longitude

NSLog(@"SELECT ((ACOS(SIN(%@ * PI()/180) * SIN(lat * PI()/180) + COS(%@ * PI()/180) * COS(lat * PI()/180) * COS((%@ – lon) * PI()/180)) * 180/PI()) * 60 * 1.1515) AS `distance` FROM `members` HAVING `distance`<=’1000′ ORDER BY `distance`", Latitude,Latitude, Longitude); 

Est-ce que quelqu'un a une solution?

Cordialement!

Répondre

9

Do it in Objective C.

ce gars-là a eu le même problème: http://www.thismuchiknow.co.uk/?p=71

+0

Grand. Merci beaucoup! – Claudio

+3

Le lien vers la réponse est vraiment très bon. Définir une fonction c appelée depuis sqlite pour calculer la distance. C'est rapide et ça marche. La seule chose que je dirais est que vous pouvez affiner votre recherche en utilisant une déclaration BETWEEN. J'utilise ceci: SELECT * FROM Emplacements WHERE lat ENTRE% f ET% f ET lon ENTRE% f ET% f ORDER BY distance (lat, lon,% f,% f) LIMIT 25 –

+0

@KennyWinker Veuillez indiquer la valeur% f –

0

Oui, vous pouvez faire une requête simple basée sur un rectangle autour de l'emplacement, puis utilisez la formule Haversine pour calculer la distance exacte.

L'avantage est que vous utilisez des index sur la table SQLite.

En savoir plus sur la formule Haversine: http://en.wikipedia.org/wiki/Haversine_formula

+0

Avez-vous un lien avec un exemple? – Claudio

Questions connexes