【问题标题】:SQL Server 2008 GEOGRAPHY STDistance() valueSQL Server 2008 GEOGRAPHY STDistance() 值
【发布时间】:2011-03-21 03:07:30
【问题描述】:

我正在使用 geography.STDistance() 来返回两个单点位置之间的距离。我很好奇返回值使用哪种度量?是公里、英里还是其他?

我得到了超过 250k 的结果,但我不知道我的 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)

【问题讨论】:

    标签: sql sql-server-2008 geography


    【解决方案1】:

    只是为了覆盖到这里来寻找答案的人在将 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;
    

    使用 GEOMETRY 类型的前 3 行的结果是:

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

    GEOGRAPHY 类型的结果是:

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

    GEOGRAPHY 计算中的“331 英里”左右的转换与 Bing 地图上显示的两点之间的距离非常吻合(显然这不能证明任何事情,但它暗示了类似的基础计算)。

    GEOMETRY 计算输出的数字有望证明结果非常清楚地以度为单位,该值显然是使用毕达哥拉斯计算的(如果我们得到点和多边形之间的距离,基础计算会更加复杂)。

    【讨论】:

      【解决方案2】:

      我认为返回测量取决于Spatial Reference Identifiers (SRIDs) 您的地理数据类型。默认值为 4326,以米为单位。数据库中有一张表,您可以查看Select * from sys.spatial_reference_systems

      【讨论】:

        猜你喜欢
        • 2011-02-27
        • 1970-01-01
        • 1970-01-01
        • 2013-04-05
        • 1970-01-01
        • 2021-08-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多