2010-07-26 2 views
32

Я использую geography.STDistance(), чтобы вернуть расстояние между двумя точками. Мне любопытно, какое измерение используется для возвращаемого значения? Это в КМ, милях или, возможно, в другом?SQL Server 2008 ГЕОГРАФИЯ STDistance() значение

Я получаю результаты назад от 250 тыс., Но я понятия не имею, если я делаю что-то не так с моим TSQL, поскольку это исторические места (т. Е. Они больше не существуют), поэтому я не могу просто быстро просмотреть.

declare @p1 geography 

declare @p2 geography 

SELECT @p1 = Location from tblLocations where Id = 1 
SELECT @p2 = Location from tblLocations where Id = 2 

select @p1.STDistance(@p2) 

ответ

56

Я думаю, что измерение возврата зависит от Spatial Reference Identifiers (SRIDs) вашего географического типа данных. Значение по умолчанию - 4326, которое находится в метрах. Есть таблица в БД, вы можете проверить Select * from sys.spatial_reference_systems

7

Для того чтобы покрыть людей, прибывающих сюда, ища ответ при использовании STDistance с типами GEOMETRY, результат «выражается в той же единице измерения, что и сами значения координат» (от «Начальный пространственный с SQL Server 2008»), который для данных WGS84/SRID 4326 находится в градусах.

Следующий SQL должен работать на SQL Server 2008 R2 и выше. (Источник данных местоположения для Эдинбурга Уэверли и Лондона Charing Cross станции bing maps):

DECLARE @edinGeom GEOMETRY = GEOMETRY::STGeomFromText('POINT(-3.1917 55.9517)', 4326) 
DECLARE @cxGeom GEOMETRY = GEOMETRY::STGeomFromText('POINT(-0.1252 51.5083)', 4326) 
SELECT @edinGeom.STDistance(@cxGeom), sqrt(square(3.1917-0.1252) + square(55.9517-51.5083)) AS 'Distance from Pythagoras'; 

DECLARE @MetersPerMile FLOAT = 1609.344; 
DECLARE @edinGeog GEOGRAPHY = GEOGRAPHY::STGeomFromText('POINT(-3.1917 55.9517)', 4326) 
DECLARE @cxGeog GEOGRAPHY = GEOGRAPHY::STGeomFromText('POINT(-0.1252 51.5083)', 4326) 
SELECT @edinGeog.STDistance(@cxGeog), @edinGeog.STDistance(@cxGeog)/@MetersPerMile; 

Результаты для первого 3 линии с использованием типов геометрии:

STDistance геом: +5,39881707506376, Расстояние от Пифагора: 5,39881707506376

Результаты для типов географии:

STDistance GEOG: +534226,761544321, Преобразованные до миль: 331.953119745885

«331 миля» или около того из расчета GEOGRAPHY с показателями на картах Бинга как расстояния между двумя точками (очевидно, это не доказательство чего-либо, но оно предполагает аналогичные базовые вычисления).

Числа, выводимые на основе расчета GEOMETRY, надеются показать, что результат очень четко выражен в градусах, причем значение, по-видимому, вычисляется с использованием pythagoras (базовые вычисления были бы более сложными, если бы мы получали расстояние между точками и полигонами).

Смежные вопросы