SQL2008 中用于地理数据类型的距离算法

Posted

技术标签:

【中文标题】SQL2008 中用于地理数据类型的距离算法【英文标题】:Distance Algorithm used in SQL2008 for Geography Data Types 【发布时间】:2010-03-02 20:31:40 【问题描述】:

我想知道在地理数据类型上计算距离时 SQL2008 使用什么算法。

有几种这样的算法,例如 Haversine 和 Vincenty,但是我没有找到 SQL2008 实际使用的参考。

【问题讨论】:

【参考方案1】:

这完全取决于与地理类型关联的Spatial Reference Identifier。

SRID 代表地理类型中的确切单位,并将指示坐标系。该系统将指示正在使用哪些算法。

话虽如此,在对地理实例执行计算时,SQL Server 2008 仅支持一组特定的 SRID(请参阅上面链接中标题为“地理实例必须使用支持的 SRID”的部分)。

您可能可以从 SQL Server 2008 用于地理/几何类型的规范中获得更多信息,Open Geospacial Consortium'sSimple Feature Access specification。

【讨论】:

【参考方案2】:

我认为您对地理类型以及它如何计算距离感兴趣。 本章可能会有所帮助(以及此博客) http://blogs.msdn.com/edkatibah/archive/2009/12/17/inside-microsoft-sql-sever-2008-t-sql-programming-chapter-14-spatial-data.aspx

Codeplex 上还有 MS SQLSpatialTools。他们对地理类型的插值函数可能会提示您他们在幕后所做的事情

http://sqlspatialtools.codeplex.com/wikipage?title=Current%20Contents&referringTitle=Home

我能问一下,只要答案是正确的,你为什么关心正在使用什么功能?

【讨论】:

嘿,谢谢你的信息。计算可能需要在法律事务中产生。 那么也许值得致电 MS 支持并让他们向您发送直接答复。另一种选择是使用 PostGIS - 1.5 支持地理类型,所有源代码都开放供您查看。【参考方案3】:

看来您现在真正关心的是 SQL Server 如何计算距离,但它实际上如何定义地球上的距离,因为有许多替代定义。最好的参考是 Michael Kallay Defining edges on a round earth 的论文。

Isaac Kunen 还写了一篇whitepaper,关于在 2d 坐标中表示圆形表面,这是非常好的背景阅读。

【讨论】:

Michael Kallay 的文章似乎不是免费提供的。 OP 正在询问 SQL 服务器使用什么算法。是文森蒂吗?你能引用你链接到的论文吗?

以上是关于SQL2008 中用于地理数据类型的距离算法的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server 2008 地理空间查询

使用实体框架/休眠与 sql2008 地理数据类型

Visual Studio 2010 数据库项目无法识别 SQL 2008 地理数据类型

SQL Server 2008 - 从记录中获取地理位置

NHibernate.Spatial 和 Sql 2008 地理类型 - 如何配置

查询以将在特定地理距离内的行返回到给定行(使用 sql server 2008)