В качестве альтернативы вы также можете использовать типы данных географии SQL Server 2008. Если вы в настоящее время сохраняете долготу / широту как varchar () в БД, вам нужно будет сохранить их как тип данных geograpghy, а затем использовать функцию типа STIntersects (), чтобы получить расстояние.

учаю почтовый индекс из формы. Затем я могу преобразовать этот почтовый индекс в координаты lng, lat, поскольку они хранятся в таблице.

SELECT lng, lat from postcodeLngLat WHERE postcode = 'CV1'

У меня есть еще один стол, в котором хранятся номера различных мест.

SELECT v.lat, v.lng, v.name, p.lat, p.lng, p.postcode, 'HAVERSINE' AS distance FROM venuepostcodes v, postcodeLngLat p WHERE p.outcode = 'CB6' ORDER BY distance

Я пытаюсь создать сетку данных, которая показывает расстояние каждого места от почтового индекса (в данном случае CV1). Я знаю, что формула Хаверсайна должна делать то, что я пытаюсь достичь, но я теряюсь в том, с чего мне начать включать ее в мой запрос. Я думаю, что формула должна идти туда, куда я положил'HAVERSINE' в запросе выше.

Есть идеи?

РЕДАКТИРОВАТЬ

SELECT o.outcode AS lead_postcode, v.venue_name, 6371.0E * ( 2.0E *asin(case when 1.0E < (sqrt(square(sin(((RADIANS(CAST(o.lat AS FLOAT)))-(RADIANS(CAST(v.lat AS FLOAT))))/2.0E)) + (cos(RADIANS(CAST(v.lat AS FLOAT))) * cos(RADIANS(CAST(o.lat AS FLOAT))) * square(sin(((RADIANS(CAST(o.lng AS FLOAT)))-(RADIANS(CAST(v.lng AS FLOAT))))/2.0E))))) then 1.0E else (sqrt(square(sin(((RADIANS(CAST(o.lat AS FLOAT)))-(RADIANS(CAST(v.lat AS FLOAT))))/2.0E)) + (cos(RADIANS(CAST(v.lat AS FLOAT))) * cos(RADIANS(CAST(o.lat AS FLOAT))) * square(sin(((RADIANS(CAST(o.lng AS FLOAT)))-(RADIANS(CAST(v.lng AS FLOAT))))/2.0E))))) end )) AS distance FROM venuepostcodes v, outcodepostcodes o WHERE o.outcode = 'CB6' ORDER BY distance

Ответы на вопрос(2)

Ваш ответ на вопрос