Значение SQL Server 2008 GEOGRAPHY STDistance () - PullRequest
36 голосов
/ 26 июля 2010

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

Ответы [ 2 ]

62 голосов
/ 26 июля 2010

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

8 голосов
/ 12 декабря 2014

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

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

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 строк, использующих типы GEOMETRY:

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

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

STDistance Geog: 534226.761544321, Пересчитано в милях: 331.953119745885

«331 миль» или около того из расчета ГЕОГРАФИЯ с преобразованием хорошо согласуется с показанным на картах Bing как расстояние между двумя точками (ясно, что это не является доказательством чего-либо, но предполагает аналогичные базовые вычисления).

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

...