Расстояние между двумя географическими координатами

Я только начинаю работать с пространственными данными в SQL Server (2008 r2). Я хочу рассчитать расстояние между двумя координатами (мили).

DECLARE @source geography
DECLARE @target geography

SET @source = geography::STGeomFromText('POINT (43.420026 -83.974472)', 4326);
SET @target = geography::STGeomFromText('POINT (43.458786 -84.029471)', 4326);

SELECT @source.STDistance(@target)/1609.344 -- meters to miles

Мой запрос дает значение 3,827 мили, но я проверил его на сайте, указанном ниже, и они возвращают расстояние 3,85 мили. Я делаю это неправильно?

http://www.boulter.com/gps/distance/?from=43.420026+-83.974472&to=43.458786+-84.029471&units=m


person Steve Salowitz    schedule 24.07.2015    source источник


Ответы (1)


Я не думаю, что ты делаешь что-то не так. Ваш запрос SQL выглядит разумным для меня. Но…

Я далек от эксперта по системам пространственной привязки и геодезическим вещам (вы не думали пригласить экспертов из GIS SE?); тем не менее, вот три возможности, которые приходят мне на ум:

  • Возможно, они рассчитывают расстояние по прямой линии вместо геодезического расстояния (т. е. расстояние по кривой линии, Земля ведь не плоская). Тип geography SQL Server должен учитывать это.

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

  • #P5# <блочная цитата> #P6#
  • Или оба расчета несколько неточны, но в противоположных направлениях. Если я не ошибаюсь, два результата, которые вы цитируете, отличаются примерно на 0,5%, что может быть просто суммой их отклонения и SQL Server.

Но я могу быть совершенно неправ.

person stakx - no longer contributing    schedule 24.07.2015
comment
Спасибо за руководство и понимание. Я думаю, что ваш третий пункт имеет наибольший смысл. В любом случае, для моих целей мне не нужно быть предельно точным прямо сейчас. - person Steve Salowitz; 24.07.2015