Requête SQL pour Effectuer le Rayon de Recherche en fonction de la Latitude Longitude

Nous avons une table de restaurant qui a lat-long les données pour chaque ligne.

Nous devons écrire une requête qui effectue une recherche afin de trouver tous les restaurants au sein de la condition de rayon par exemple, 1 km, 5 km etc.

Nous avons la requête suivante:

***Parameters***

Longitude: -74.008680
Latitude: 40.711676
Radius: 1 mile

***Query***

SELECT *
FROM restaurant
WHERE (
POW( ( 69.1 * ( Longitude - -74.008680 ) * cos( 40.711676 / 57.3 ) ) , 2 ) + POW( ( 69.1 * ( Latitude - 40.711676 ) ) , 2 )
) < ( 1 *1 );

La table a environ 23k lignes. La taille de l'ensemble de résultats est bizarre des fois par exemple, pour un 5.4 mile de recherche, il donne de l'880 lignes et de 5,5 kilomètres, il donne de l'21k lignes.

Ce tableau contient les données des restaurants à new york - de sorte que la distribution réelle n'est pas comme pour le jeu de résultats.

Question: EST-IL quelque CHOSE de MAL Avec cette requête?

De base de données: MySQL, Longitude: DÉCIMAL(10,6), Latitude: DÉCIMAL(10,6)

Quel est le problème? Pour commencer, vous voulez être à l'aide de l'UTM plutôt que les coordonnées Lat/Long parce qu'ils ont de la marge d'erreur pour l'aplatissement des...
Découvrez la réponse à question. Problème similaire.

OriginalL'auteur Puneet | 2009-11-13