2010-02-17 12 views
4

J'ai une base de données Microsoft SQL Server avec un tableau d'emplacements. Chaque emplacement a son adresse et ses coordonnées de latitude et de longitude.Recherche de distance SQL Server

Dans mon application, l'utilisateur peut entrer un code postal et nous renvoyons une liste d'emplacements proches. C'est mon approche. a) En utilisant un code postal DB, je recherche le lat, lon pour le code postal (c'est le point central). b) je lance une recherche comme celui-ci

SELECT Position_ID, distance(pos_lon,pos_lat,zip_lon,zip_lat) dist 
FROM Positions 
ORDER BY dist 

« distance » est une fonction qui calcule la distance entre deux points.

Le problème est que mon DB d'emplacement augmente le temps d'exécution de ces recherches commence à croître.

Y a-t-il une meilleure approche?

+1

Quelle version de SQL? Si 2008, référez-vous à la réponse de Mark Byers ci-dessous. –

Répondre

1

je ferais un calcul de la boîte entourant votre code postal à la distance spécifiée pour obtenir les valeurs de latitude/longitude pour les quatre coins. Ensuite, faites une simple comparaison de vos valeurs de position pour sélectionner celles qui tombent à l'intérieur du carré. De cette façon, vous n'avez pas besoin de calculer la distance entre votre code postal et chaque point de votre base de données pour chaque recherche.