时间:2010-07-26 14:27:24

标签: sql sql-server-2008 geography

2 个答案:

答案 0 :(得分:62)

答案 1 :(得分:8)

只是为了覆盖到达此处寻找答案的人在寻找使用具有GEOMETRY类型的STDistance时的答案,结果是"以与坐标值本身相同的测量单位表示" (来自' Beginning Spatial with SQL Server 2008')对于WGS84 / SRID 4326数据是以度为单位。

以下SQL应在SQL Server 2008 R2及更高版本上运行。 (爱丁堡Waverley和伦敦Charing十字车站地图的位置数据来源):

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行的结果是:

STDistance Geom: 5.39881707506376,与毕达哥拉斯的距离: 5.39881707506376

GEOGRAPHY类型的结果是:

STDistance Geog: 534226.761544321,转换为里程:331.953119745885

' 331英里'或者来自GEOGRAPHY的计算与转换关系很好地与Bing地图上显示的两个点之间的距离(显然这不是任何证据,但它表明类似的基础计算)。

GEOMETRY计算输出的数字有希望证明结果非常明显,并且显然是使用毕达哥拉斯计算的(如果我们得到点和多边形之间的距离,则基础计算会更复杂)。 / p>