2011-03-25 2 views
0

j'ai un petit problème,Trouver les points autour d'un rayon d'un point spécifié (formule Haversine q)

je testais simplement l'utilisation de la formule de Haversine pour mon projet donné dans le projet, je précise un point et je veux trouver tous les points dans un rayon donné du point que j'ai fourni. Après beaucoup de google, j'ai essayé cette requête de formule haversine.

SELECT service_id, (3959 * acos(cos(radians(51.500152)) * cos(radians(latitude)) * cos(radians(longitude) - radians(-0.126236)) + sin(radians(51.500152)) * sin(radians(latitude)))) AS distance 
FROM sys_t_taxi_real_time_servce HAVING distance < 25 ORDER BY distance LIMIT 0 , 20; 

j'ai eu la latitude et la longitude pour Londres puis spécifié les données comme indiqué dans l'ordre (service_id, driver_id, journey_id, longitude, latitude, driver_status)

4, 1, , 51.5034, -0.174751, '' 
5, 1, 2, 51.477106, -0.137329, '' 

Donc, pour l'ensemble de résultats mais je ne reçois rien, aucune ligne retourné

cependant, quand je retire la clause having je reçois le résultat suivant set (service_id, distance)

5, 4655.154600 
4, 4658.309966 

Je suis reqally coincé sur ce problème et est incapable d'aller de l'avant à cause de cela et toute aide serait grandement appréciée.

La requête et tel a été obtenu à partir du lien suivant http://code.google.com/apis/maps/articles/phpsqlsearch.html

ne plus que quelqu'un sait toute autre méthode pour résoudre le même problème, j'ai vu des choses connexes mysql spacial, mais avait choisi cet car il était plus facile à utiliser

Cordialement, MilindaD

Répondre

0

Je n'ai pas utilisé la formule que vous avez décrit, mais peut-être une autre approche résout votre problème: Comme vous avez soulevé une requête SQL, je suppose que vous utilisez au moins MySQL. Avez-vous essayé d'utiliser la fonctionnalité spatiale de la base de données? Il existe des fonctions appelées CONTAINS et WITHIN. Vous pouvez donc simplement créer un polygone tampon autour de votre coordonnée et inclure la fonction CONTAINS dans la clause where.

Si vous n'êtes pas limité à MySQL, PostgreSQL, SQL Server ou Oracle vous en donnerait beaucoup plus. PostgreSQL est Open Source et les autres sont libres d'utilisation à des fins éducatives (si je me souviens bien).

Cordialement, Martin

Questions connexes