两个地理坐标之间的距离

Distance Between Two Geo Coordinates

我刚开始在 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 查询在我看来很合理。但是……

我远不是空间参考系统和测地线方面的专家(您是否考虑过向 GIS SE 的专家请教?);尽管如此,我想到了三种可能性:

  • 也许他们计算的是直线距离而不是测地距离(即曲线距离,地球毕竟不是平的)。 SQL 服务器的 geography 类型应说明这一点。

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

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

    "STDistance() returns the shortest LineString between two geography types. This is a close approximate to the geodesic distance. The deviation of STDistance() on common earth models from the exact geodesic distance is no more than .25%. This avoids confusion over the subtle differences between length and distance in geodesic types."

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

但我可能完全错了。