Подтвердить что ты не робот

Значение STDistance() для геоданных SQL Server 2008

Я использую geography.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)
4b9b3361

Ответ 1

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

Ответ 2

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

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

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;

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

STDistance Geom: 5.39881707506376, Расстояние от Пифагора: 5.39881707506376

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

STDistance Geog: 534226.761544321, Преобразован в мили: 331.953119745885

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

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