我正在开发一个必须实现以下功能的项目。
- 将船舶(在海洋环境中)的位置预测到未来的时间(可以用卡尔曼滤波器、IMM 滤波器和其他一些算法来完成)。船舶可以是世界的任何地方。
- 在预测期间避开陆地
- 沿海岸线的最短路径
我完全完成了在不考虑海岸线信息的情况下进行预测的第一部分。我对功能 2 和 3 有疑问。
功能 2 中的问题
有时,您的预测位置可能会落入完全不可接受的陆地区域。我正在使用以下沿海地区 shp 文件http://openstreetmapdata.com/data/coastlines
这个文件已经转换了世界海岸线数据的 XY 值。我已将此 shp 文件加载到 postgreSQL 并使用 postgis 从数据库中读取它。
所以我的想法是遍历所有多边形(基于多边形定义的海岸线)并检查连接当前位置和预测位置的线是否穿过多边形。如果它越过,这意味着我们必须首先找到船拦截海岸线的位置。因此,如果我按照这种方法遍历所有多边形,那将永远需要时间。(它有大约 62000 个多边形,每个多边形都有 1000 个点)。那么对此有什么建议吗?我最初考虑将世界地图划分为分层区域(级别 1:10 个多边形,级别 2:每个多边形内部有 10 个多边形)。但是我不确定如何将带有上述 shp 文件的世界地图划分为我需要的多边形级别。或者 postgis 的任何功能对此有帮助?或用于此目的的任何其他库。我相信这种功能应该已经可用。但到目前为止我无法弄清楚。
功能 3
由于现在我们知道船舶首先在哪里截断海岸线,因此我们可以在已知目的地信息的情况下使用最短路径算法沿海岸线进行预测。但要做到这一点,您需要将上述海岸线地图划分为网格,以便使用最短路径。那么如何沿着海岸线制作基于此的网格呢?我不在这里进行图像处理。我现在拥有的是这个 shp 文件。任何建议表示赞赏。或者我应该采用一些图像处理方法并制作网格海岸线。如果是这样,请提供一些链接。