2016-10-25 13 views
1

У меня есть список магазинов, в каждом магазине есть данные, такие как street_address, долгота, широта.Как я могу запросить базу данных SQL Server для ближайшего магазина в окружении посетителя?

Теперь, когда пользователь посещает мой сайт, я хочу, чтобы показать ему/ей все доступные магазины в их районе (в пределах 10 миль радио «ближе всего к наиболее далеко»)

Вот что я сделал. Я создаю новый столбец под названием StPoint с типом geography. Я использовал функцию geography::Point(latitude, longitude, 4326) для преобразования долготы/широты каждого магазина до точки, как так

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

Я пытался найти расстояние между текущей точкой посетителя и все магазины, как так

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 

Но это дает мне что-то вроде

GEOMETRYCOLLECTION EMPTY

или что-то вроде этого

POINT (-99,4478897 56,2974416)

Наконец, я попытался с помощью STDistance функцию, которая возвращает значение (я не уверен, что устройство используется здесь)

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

Вот пример того, что приведенный выше запрос показывает

27376.5070395886 
3973.49722397033 
27620.9636451663 
50346.8940144233 
7425.98548351235 
34193.3513625182 

Как вы можете видеть, результаты не в милях. Как я могу правильно получить ближайший магазин вместе с тем, как далеко от посетителей каждый магазин?

+0

'Как вы можете видеть, результат не в милях . - Но вы не показываете нам результаты;) – MatBailie

+0

Извините, я забыл вставить это. Я обновил вопрос. – Jaylen

ответ

1

Похоже, STDistance возвращает значения в Geog единица. чтобы преобразовать его в Miles вам нужно разделить VY 1609.344 (1 милю = 1609.344 метров)

SQL Server 2008 GEOGRAPHY STDistance() value

Попробуйте следующее

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

спасибо. Я также подтвердил правильность результатов! – Jaylen