使用SQL Server计算两点之间的陆地距离

5

我希望能够在SQL Server 2008中计算两个点之间的最短距离,只考虑陆地上的情况。

我使用了地理数据类型和STDistance()函数来计算直线距离,但有时会穿过海洋,而我想避免这种情况。

我还创建了一个包围陆地边界的多边形。

我相信我需要将这两种方法结合起来,以确保STDistance始终保持在多边形内 - 除非有更简单的解决方案。

感谢任何建议。

1个回答

1
使用STIntersects - http://msdn.microsoft.com/en-us/library/bb933899%28v=SQL.105%29.aspx来找出线的哪一部分在陆地上。
阅读您的评论后,您的要求很有意义。但我非常确定 SQL Server 中没有内置的技术可以做到这一点。我假设您忽略了道路,采用直线距离的方法,但仅限于陆地。
我能想到的唯一方法是将您的区域转换为栅格(网格单元),并执行成本路径分析。您将设置海洋区域具有极高的成本,因此算法会绕过海洋。请参见此链接以获取该技术的描述:

http://webhelp.esri.com/arcgisdesktop/9.3/index.cfm?TopicName=cost_path

否则尝试实现下面的算法!

http://bit.ly/ckvciz

可能有其他的库可以做到这一点。或者,你可以考虑在两个城市之间使用新的Google Directions API - 这样你就可以得到实际的道路距离。

http://code.google.com/apis/maps/documentation/directions/


谢谢回复。除非我误解了,否则这不会给我最短的陆地距离,它只是让我区分陆地距离和海洋距离。也许一个实际例子可以帮助我解释。从鸟瞰角度来看,马拉加(西班牙)比马德里更靠近丹吉尔(摩洛哥)。如果我们只能通过陆路旅行,丹吉尔仍然可达(经过漫长的欧洲、中东等旅程),但现在它比马德里、巴黎等地远得多。因此,我正在尝试计算仅在陆地上的距离。 - Daryl Wenman-Bateson
SQL Server 不区分陆地或海洋(或山丘,同样如此)。 - Brent Ozar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接