海上计算器距离,中间坐标?

时间:2010-03-24 23:59:28

标签: python maps distance geo

如何计算海上2个坐标之间的距离?我还希望能够在两个坐标之间绘制路线。

到目前为止,我找到的唯一解决方案是将地图拆分为像素,将每个像素标识为LAND或SEA,然后尝试使用A *算法查找路径。然后将像素转换为相对坐标。

我可以购买一些软件包但没有一个在线扩展。计算海港之间距离并绘制地图上路径的服务为searates.com

3 个答案:

答案 0 :(得分:2)

请注意地图可能会扭曲距离。例如,在墨卡托中,远离赤道的投影段表示的实际距离小于等长赤道附近的段。如果你只为像素/方块/等分配统一的成本,最终会得到非最佳路由和错误的距离计算。

如果您在地图上投影网格(像素只是许多可能的网格中的一个特定网格)并使用A *搜索最佳路径,那么您需要做的就是让搜索算法正常​​运行边缘权重根据球体(地球)表面的实际距离而不是地图上的距离。

请注意,简单地说“海洋或非海洋”不足以确定航行性。还存在深度问题,交通路线(例如,认为英吉利海峡被分成车道的航运交通)和政治考虑(领海等)。您还希望手动为太小而无法在地图上显示的频道(巴拿马,苏伊士)添加路线,并调整其成本以弥补所产生的任何开销。

答案 1 :(得分:1)

你需要将大海分成像素并做一些类似A *的事情。你可以通过将连续的像素合并到更大的区域来优化它,但如果你保持一切正方形,它可能会使搜索更容易。搜索将不再是曼哈顿风格,但如果你有足够大的方块,额外的连接决定时间将超过弥补。

或者,您可以迭代地“增长”来自所有端口的多边形,构建凸多边形(以便多边形内的任何点都可以从任何其他点到达而无需外出,例如,您希望避免使用PacMan形状) ,虽然这是我首先提到的“正方形”方法的改进/复杂/优化。关键是你知道一旦你进入一个你可以到达该地区其他地方的地区。

我不知道这是否有帮助,对不起。这是漫长的一天。祝你好运。这听起来很有趣!

编辑:忘记提及,您也可以将您的区域预处理为四叉树。也就是说,将整个地图纵向和横向分成两半(你不需要同时进行两次分割,如果你想花一些时间进行“更好”的分割,你可以稍后再这样做)并递归地执行,直到每个节点完全是陆地或海洋。从这里你可以轻松地建立一个连接网络(只是连接相邻的叶子),A *应该很容易从那里实现。无论如何,这可能是实施我的第一个建议的最简单方法。 :)

答案 2 :(得分:1)

我达成了满意的解决方案。它与你的建议和我最初想到的一致,但我花了一段时间来弄清楚软件和GIS的概念,我是一个GIS新手。如果有人再碰到类似的东西,我的设置就是:PostgreSQL的PostGISNatural Earth的地图,GIS编辑软件qGisOpenJUmp,路由算法pgRouting

自然地球地图需要一些处理才有用,我加入了海洋多边形和河流,以便能够获得一些到达内陆点的准确路径。然后我使用1度刻度来获取从一个大陆到另一个大陆的路径(我需要找到比这更优雅的解决方案,因为有些路径看起来像象棋方块)。所有这些操作都可以通过使用PostGIS从命令行完成,我发现使用桌面软件更容易(下一步,下一步)。自然地球地图的替代方案可能是OpenStreetMap,但是planet.osm转储是200Gb,这让我气馁。

我认为这个设置也解决了距离精度问题,PostGIS考虑了地球的实际形态,距离应该非常准确。

我仍然需要进行一些测试和微调,但我可以说它可以计算并绘制世界海岸线上任意2个点的路线(还没有小的孤岛)并显示路线点名称(通道,海洋,河流,海洋)。