J'ai une table avec les utilisateurs et je dois trouver les utilisateurs les plus proches en fonction de latitude, à long. J'ai aussi besoin de la distance. Je me bats avec la formule et les alternatives de haversine pendant deux jours, mais je fais face à quelques erreurs.Problèmes pour trouver la distance à d'autres utilisateurs Sql Server 2005 - Haversine
Disons par exemple que j'utilise lat, long pour Kuala Lumpur, en Malaisie (à peu près 3,2, 102).
Utilisation: Pythagoras
SELECT top 10 *,
SQRT(SQUARE(ABS(latitude - 3.2)) + SQUARE(ABS(longitude - 102))) AS distance
FROM lfuser
ORDER BY distance
Il me donne des résultats "corrects" (utilisateurs près de ce point). Mais je ne peux pas obtenir la distance (en KM) de cela et je sais que ce n'est pas tout à fait correct. Donc, j'ai essayé d'utiliser la haversine:
SELECT TOP 10 *,
ROUND(2 * ASIN(SQRT(POWER(SIN(((3.2/180) * PI()
- (latitude/180) * PI())/2) ,2) + COS((3.2/180) * PI())
* COS((latitude/180) * PI()) * POWER(SIN(((102/180) * PI()
- (longitude/180) * PI())/2), 2))) * 6367, 4) AS distance
FROM lfuser
ORDER BY distance
La chose étrange est que cela me donne des utilisateurs ailleurs. En fait, le premier résultat est un utilisateur au Ghana avec lat = 5,55 et long = -0,20.
Ce me rend fou ... Je pourrais bien sûr calculer une distance approximative en multipliant les pythagore résultat avec 110 kms mais je voudrais le résultat plus correct.
J'espère que quelqu'un peut remarquer ce qui est faux.
S'il vous plaît ne pas poster des liens vers les différentes implémentations de formule de Haversine etc. J'ai regardé les deux jours maintenant.
Salut Luka, Il semble bien fonctionner. Merci beaucoup. – Jesper