只是为了覆盖到达这里的人们在使用带有 GEOMETRY 类型的 STDistance 时寻找答案,结果“以与坐标值本身相同的测量单位表示”(来自“使用 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;
使用 GEOMETRY 类型的前 3 行的结果是:
ST距离几何: 5.39881707506376,与毕达哥拉斯的距离: 5.39881707506376
GEOGRAPHY 类型的结果是:
STDistance Geog: 534226.761544321,转换为英里: 331.953119745885
GEOGRAPHY 计算中的“331 英里”左右的转换与 Bing 地图上显示的两点之间的距离非常吻合(显然这不能证明任何事情,但它暗示了类似的基础计算)。
GEOMETRY 计算输出的数字有望证明结果非常清楚地以度为单位,该值显然是使用毕达哥拉斯计算的(如果我们得到点和多边形之间的距离,基础计算会更加复杂)。