2016-10-25 4 views
1

J'ai une liste de magasins chaque magasin a des données comme adresse de la rue, longitude, latitude.Comment puis-je interroger la base de données SQL Server pour le magasin le plus proche dans le voisinage d'un visiteur?

Maintenant, lorsqu'un utilisateur visite mon site, je veux lui montrer/elle tous les magasins disponibles dans leur quartier (au sein des radios 10 miles « le plus proche à la plus éloignée »)

Voici ce que je l'ai fait. Je crée une nouvelle colonne appelée StPoint avec le type geography. J'ai utilisé la fonction geography::Point(latitude, longitude, 4326) pour convertir la longitude/latitude de chaque magasin à un point comme si

UPDATE stores 
SET StPoint = CASE WHEN latitude IS NOT NULL AND longitude IS NOT NULL 
    THEN geography::Point(latitude, longitude, 4326) 
    ELSE NULL END 

J'ai essayé de trouver la distance entre le point actuel du visiteur et tous les magasins comme si

SELECT 
CASE WHEN StPoint IS NOT NULL THEN StPoint.STIntersection(geography::Point(42.2974416, -71.4478897, 4326)).STAsText() ELSE NULL END AS distance 
FROM stores 

mais cela me donne quelque chose comme

GEOMETRYCOLLECTION VIDES

ou quelque chose comme ça

POINT (-99,4478897 56,2974416)

Enfin, j'ai essayé d'utiliser la fonction STDistance qui renvoie une valeur (je ne suis pas sûr de ce que l'unité est utilisée ici)

SELECT StPoint.STDistance(geography::Point(42.2974416, -71.4478897, 4326)) 
FROM stores 

Voici échantillon de ce que la requête ci-dessus montre

27376.5070395886 
3973.49722397033 
27620.9636451663 
50346.8940144233 
7425.98548351235 
34193.3513625182 

Comme vous pouvez le voir, les résultats ne sont pas en miles. Comment puis-je obtenir correctement le magasin le plus proche avec quelle distance forme le visiteur de chaque magasin?

+0

'suivante Comme vous pouvez le voir, le résultat est en miles . »- Mais vous ne nous montrez pas les résultats;) – MatBailie

+0

Désolé j'ai oublié de coller cela. J'ai mis à jour la question. – Jaylen

Répondre

1

Il semble que STDistance renvoie des valeurs dans l'unité Geog. pour le convertir en Miles vous devrez diviser Vy 1609.344 (1 mile = 1609.344 mètres)

SQL Server 2008 GEOGRAPHY STDistance() value

Essayez le

SELECT StPoint.STDistance(geography::Point(42.2974416, -71.4478897, 4326))/1609.344 
FROM stores 
+0

Merci beaucoup. J'ai également validé les résultats sont exacts! – Jaylen