Расстояние географии SQL Server 2008 R2?

Я создал таблицу со следующими столбцами:

Text:varchar(255)
Location:geography

они содержат несколько городов из Нидерландов в качестве данных (получили координаты из Google maps):

Rotterdam - POINT (51.925637 4.493408 4326)
Utrecht - POINT (52.055868 5.103149 4326)
Nijmegen - POINT (51.801822 5.828247 4326)
Breda - POINT (51.542919 4.77356 4326)

Я хочу знать расстояние между всеми городами в БД из Роттердама, поэтому я выполняю этот запрос:

Select 
    Text, Location, 
    Location.STDistance(geography::Point(51.925638, 4.493408, 4326)) as Distance 
from Messages

но в результате я получаю расстояние, близкое к 6800000 для каждого города.

что может быть причиной этого?

единственная причина, по которой я могу думать что я использую неправильный SRID, но я не могу понять, какой из них я должен использовать вместо этого.

спасибо!

Edit:

просто для этого я пошел играть с числами, и я получил некоторые странные результаты:

Distance from Rotterdam to Rotterdam: 6828459.57 (A) (weird but true)
Distance from Rotterdam to Breda: 6779956.10 (B)
Distance from Rotterdam to Nijmegen: 6695336.38 (C)

теперь вот где это становится интересным:

(A) - (B) = 48504 m = 48 km
(A) - (C) = 133123 m = 133 km

эти значения приблизительно расстояния между этими городами.

2 ответов


в соответствии с этим тестовым случаем, похоже, работает просто отлично:

DECLARE @rotterdam geography = geography::Point(51.925637, 4.493408,4326);
with tmp(txt, geo)
as
  (
   select 'Rotterdam',geography::Point(51.925637, 4.493408,4326)
   UNION ALL  
   select 'Utrecht',geography::Point(52.055868, 5.103149,4326)
   UNION ALL  
   select 'Nijmegen',geography::Point(51.801822, 5.828247,4326)
   UNION ALL  
  select 'Breda',geography::Point(51.542919, 4.77356,4326)
  )
  SELECT t.txt, t.geo.STDistance(geography::Point(51.925637, 4.493408,4326)) from tmp t 

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

также я рекомендую сохранить значение географии, с которым вы сравниваете, в отдельном значении, как в Примере @TrickyNixons.


попробуйте такую структуру.

DECLARE @a geography, @b geography
SET @a = geography::Point(51.925637, 4.493408,4326)
SET @b= geography::Point(51.542919, 4.77356,4326)
SELECT @a.STDistance(@b)