两个地理坐标之间的距离

时间:2015-07-24 14:57:43

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

我刚开始使用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

1 个答案:

答案 0 :(得分:3)

我认为你做错了什么。您的SQL查询对我来说很合理。但...

我远远不是空间参考系统和测地学专家的专家(你考虑过在GIS SE上问专家吗?);尽管如此,我想到了三个可能性:

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

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

  • 也许他们可以比SQL Server更准确地进行计算(参见关于the MSDN reference page for geography.STDistance的说明):

      

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

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

但我可能完全错了。