Postgresql 避开陆块的预测

Postgresql 避开陆块的预测,postgresql,openstreetmap,postgis,shortest-path,shapefile,Postgresql,Openstreetmap,Postgis,Shortest Path,Shapefile,我正在从事一个项目,其中必须实现以下功能 预测船舶(在海洋环境中)在未来时间内的位置(可以使用卡尔曼滤波、IMM滤波和其他一些算法)。 船舶可以是世界的任何一部分 预测时避免陆块 沿海岸线的最短路径 我完全完成了第一部分,即预测,而不考虑海岸线信息。我有 函数2和3有问题 功能2出现问题 有时,你预测的位置可能会落入陆地区域,这是完全不可接受的。 我正在使用以下沿海地区shp文件 此文件已转换世界海岸线数据的XY值。 我已经将这个shp文件加载到postgreSQL中,并使用postgis从数据

我正在从事一个项目,其中必须实现以下功能

  • 预测船舶(在海洋环境中)在未来时间内的位置(可以使用卡尔曼滤波、IMM滤波和其他一些算法)。 船舶可以是世界的任何一部分
  • 预测时避免陆块
  • 沿海岸线的最短路径
  • 我完全完成了第一部分,即预测,而不考虑海岸线信息。我有 函数2和3有问题

    功能2出现问题
    有时,你预测的位置可能会落入陆地区域,这是完全不可接受的。 我正在使用以下沿海地区shp文件 此文件已转换世界海岸线数据的XY值。 我已经将这个shp文件加载到postgreSQL中,并使用postgis从数据库中读取它

    所以我的想法是遍历所有多边形(基于多边形定义的海岸线),检查连接当前位置和预测位置的线是否正确 穿过多边形。如果它穿过,那意味着我们必须找到船只首先拦截海岸线的位置。 所以如果我沿着这个方法穿过所有的多边形,这将永远需要时间。(它有大约62000个多边形,每个多边形有1000个 点)。有什么建议吗?我最初考虑将世界地图划分为层次区域(级别1:10个多边形,级别2:每个多边形内部有10个多边形)。 但我不知道如何将上面的shp文件中的世界地图划分为我需要的多边形级别。 或者postgis的任何功能对此有帮助?或任何其他为此目的的图书馆。我相信这种功能应该已经可以使用了。但我不能 到目前为止我都能弄明白

    功能3
    因为现在我们知道了船首先在哪里拦截海岸线,我们可以使用已知的最短路径算法沿海岸线预测它 目的地信息。但要做到这一点,您需要将上面的海岸线地图划分为网格,以便使用最短路径。 那么,如何在海岸线上基于此制作网格呢?我不是在这里做图像处理。我现在拥有的是这个shp文件。任何建议都将不胜感激。
    或者我应该用一些图像处理方法来绘制网格海岸线。如果是这样的话,请提供一些链接。

    首先,PostGIS速度非常快,有了适当的索引,只要您将多边形保持在合理的小范围内,您就可以通过良好的索引和重叠操作符支持来弥补它们的数量(重叠多边形可以使用
    GIST
    GIN
    索引,后者的读取性能优于前者,写入性能较差)

    全球62000个多边形算不了什么。当您必须检查数千个边界框与直线重叠的多边形时,请回信


    对于第三个问题,你是朝一个方向走,对吗?我想知道写一个
    切线(点、向量、多边形)
    函数有多难,它将返回沿某个向量与多边形最近的切线(向量可以用
    (点、点)
    元组表示)。如果您将此与KNN搜索相结合,您应该能够使用带递归查询的
    绘制课程。

    考虑将此问题发布到gis.stackexchange.com。那里有许多gis专家可以为您的问题提供很好的解决方法。关于函数2,您应该使用空间索引。请参阅感谢Iree我也在那里发了帖子,但还是没有回复。