Sql server 2008 两个地理坐标之间的距离

Sql server 2008 两个地理坐标之间的距离,sql-server-2008,tsql,geocoding,spatial-query,Sql Server 2008,Tsql,Geocoding,Spatial Query,我刚刚开始使用SQL Server(2008 r2)中的空间数据。我想计算两个坐标之间的距离(英里) 我的查询结果为3.827英里,但我对照下面链接的站点进行了检查,结果显示距离为3.85英里。我做得不对吗 我不认为你做错了什么。您的SQL查询在我看来是合理的。但是 我远非空间参考系统和测地线方面的专家(你考虑过请GIS SE的专家过来吗?);然而,我想到了三种可能性: 也许他们计算的是沿直线的距离,而不是测地线距离(即沿曲线的距离,地球毕竟不是平的)。SQL Server的地理类型应该考虑到

我刚刚开始使用SQL Server(2008 r2)中的空间数据。我想计算两个坐标之间的距离(英里)

我的查询结果为3.827英里,但我对照下面链接的站点进行了检查,结果显示距离为3.85英里。我做得不对吗


我不认为你做错了什么。您的SQL查询在我看来是合理的。但是

我远非空间参考系统和测地线方面的专家(你考虑过请GIS SE的专家过来吗?);然而,我想到了三种可能性:

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

    考虑到“他们的”距离比“你的”距离大,这似乎不太可能:你会期望直线距离比测地距离小

  • 也许他们可以比SQL Server更准确地进行计算(请参见上的注释)‌​:

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

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


但我可能完全错了。

谢谢你的指导和洞察力。我认为你的第三点很有道理。不管怎样,就我的目的而言,我现在不需要非常准确。
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