У меня есть список магазинов, в каждом магазине есть данные, такие как 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
Как вы можете видеть, результаты не в милях. Как я могу правильно получить ближайший магазин вместе с тем, как далеко от посетителей каждый магазин?
'Как вы можете видеть, результат не в милях . - Но вы не показываете нам результаты;) – MatBailie
Извините, я забыл вставить это. Я обновил вопрос. – Jaylen