【问题标题】:Distance Between Two Geo Coordinates两个地理坐标之间的距离
【发布时间】:2015-07-24 14:57:42
【问题描述】:

我刚刚开始在 SQL Server (2008 r2) 中处理空间数据。我正在寻找计算两个坐标(英里)之间的距离。

DECLARE @source geography
DECLARE @target geography

SET @source = geography::STGeomFromText('POINT (43.420026 -83.974472)', 4326);
SET @target = geography::STGeomFromText('POINT (43.458786 -84.029471)', 4326);

SELECT @source.STDistance(@target)/1609.344 -- meters to miles

我的查询结果为 3.827 英里,但我对照下面链接的站点进行了检查,他们返回的距离为 3.85 英里。我做错了吗?

http://www.boulter.com/gps/distance/?from=43.420026+-83.974472&to=43.458786+-84.029471&units=m

【问题讨论】:

    标签: sql-server-2008 tsql geocoding spatial-query


    【解决方案1】:

    我不认为你做错了什么。您的 SQL 查询对我来说看起来很合理。但是……

    我远不是空间参考系统和测地线方面的专家(您是否考虑过询问 GIS SE 的专家?);不过,我想到了以下三种可能性:

    • 也许他们计算的是沿直线的距离而不是测地线距离(即沿曲线的距离,地球毕竟不是平的)。 SQL Server 的 geography 类型应该考虑到这一点。

      这似乎不太合理,因为“他们的”距离大于“你的”:您会期望直线距离小于测地线距离。

    • 也许他们可以比 SQL Server 更准确地进行计算(请参阅the MSDN reference page for geography.STDistance 上的注释):

      "STDistance()返回两种地理类型之间最短的LineString。这是一个接近测地线距离的近似值。普通地球模型上STDistance()与精确测地线距离的偏差不超过.25%。这避免了对测地线类型中长度和距离之间细微差别的混淆。”

    • 或者,两种计算都有些不准确,但方向相反。如果我没记错的话,你引用的两个结果相差大约 0.5%,这可能只是它们的偏差和 SQL Server 的总和。

    但我可能完全错了。

    【讨论】:

    • 感谢您的指导和见解。我认为你的第三点最有道理。无论哪种方式,就我的目的而言,我现在不需要非常准确。
    猜你喜欢
    • 2016-02-22
    • 1970-01-01
    • 1970-01-01
    • 2010-11-23
    • 2016-07-16
    • 2012-08-06
    • 1970-01-01
    • 1970-01-01
    • 2016-05-30
    相关资源
    最近更新 更多