SQL Географическое вычисление широты / долготы

У меня проблемы с использованием географии для расчета расстояния в милях с использованием формата моей таблицы.

Широта и долгота обоих мест расположены рядом:

id | A_Latitude | A_Longitude | B_Latitude | B_Longitude

Я пытаюсь понять смысл Aвместе с точкой Bи вернуть расстояние между A а также B в милях

Я пробовал несколько вещей, в том числе что-то похожее на:

DECLARE @orig geography 
DECLARE @end geography
SELECT
@orig = geography::Point(A_LATITUDE, A_LONGITUDE, 4326) 
,@end = geography::Point(B_LATITUDE, B_LONGITUDE, 4326) 
FROM table1
SELECT 
    ROUND(@END.STDistance(@ORIG)/1609.344,2) AS MILES
    ,@END.STDistance(@ORIG) AS METERS
    ,table1.*
FROM table1;

Где я получаю повторяющиеся значения для миль и метров во всех рядах. Может ли кто-нибудь предложить, как мне следует структурировать этот запрос, чтобы получить то, что я ищу?

РЕДАКТИРОВАТЬ: Спасибо SQL Surfer!

WITH X AS 
(SELECT 
 geography::Point(A_LATITUDE, A_LONGITUDE, 4326) A
,geography::Point(B_LATITUDE, B_LONGITUDE, 4326) B
,ID
FROM TABLE1)

SELECT 
ROUND(X.B.STDistance(X.A)/1609.344,2) AS MILES
,X.B.STDistance(X.A) AS METERS
,T.*
FROM TABLE1 T
LEFT JOIN X ON T.ID = X.ID

1 ответ

Решение

Вот что я бы сделал:

WITH X AS 
(
   SELECT 
      geography::Point(A_LATITUDE, A_LONGITUDE, 4326) A
     ,geography::Point(B_LATITUDE, B_LONGITUDE, 4326) B
     ,*
   FROM TABLE1
)

SELECT 
   ROUND(B.STDistance(A)/1609.344, 2) AS MILES
   ,B.STDistance(X.A) AS METERS
   ,*
FROM X

Если вы планируете делать это часто (и на лету), рассмотрите возможность добавления вычисляемых столбцов в вашу таблицу не только для типов географии, но и для расстояния между ними. На данный момент, это просто простой запрос из таблицы!

Другие вопросы по тегам