我正在开发一个必须实现以下功能的项目。
我完全完成了第一部分的预测而不考虑海岸线信息。我有 功能2和3的问题。
功能2中的问题 有时,您预测的位置可能落入陆地区域,这是完全不可接受的。 我正在使用以下沿海地区的shp文件http://openstreetmapdata.com/data/coastlines 此文件已转换世界海岸线数据的XY值。 我已将此shp文件加载到postgreSQL中,并使用postgis从数据库中读取它。
所以我的想法是遍历所有多边形(基于多边形定义的海岸线)并检查连接当前位置和预测位置的线 穿过多边形。如果它穿过,那意味着我们必须首先找到船只拦截海岸线的地方。 因此,如果我按照这种方法遍历所有多边形,那么它将永远需要时间。 (它有大约62000个多边形,每个多边形都有1000个 点)。那有什么建议吗?我想最初将世界地图划分为层次区域(1级:10个多边形,2级:每个多边形内部有10个多边形)。 但我不确定如何将上面的shp文件划分为我需要的多边形水平。 或者postgis的任何功能都有用吗?或为此目的的任何其他图书馆。我相信这种功能应该已经可用。但我不能 能够把它弄清楚。
功能3
从现在开始我们知道船首先拦截海岸线的位置,我们可以使用我们知道的最短路径算法沿着海岸线预测它
目的地信息。但要做到这一点,您需要将上面的海岸线地图划分为网格,以便可以使用最短路径。
那你如何沿着海岸线制作基于此的网格呢?我这边不做图像处理。我现在拥有的是这个shp文件。任何建议表示赞赏。
或者我应该采用一些图像处理方法,并使网格海岸线。若有,请提供一些链接。
答案 0 :(得分:0)
首先,PostGIS相当快,并且使用适当的索引,只要保持多边形相当小,就应该能够通过良好的索引和重叠的操作符支持来弥补它们的数量(重叠的多边形可以使用GIST
和GIN
索引,后者在读取时表现优于前者,对写入表现更差。
全球62000个多边形都不算什么。当你需要检查超过几千个边界框与你的线重叠时回写....
对于第三个问题,你是朝着一个方向,对吗?我想知道编写一个tangent(point, vector, polygon)
函数有多难,它会沿着某个向量返回一个多边形的最接近的切线(一个向量可以用(point, point)
元组表示)。如果您要将其与KNN搜索相结合,您应该能够使用WITH RECURSIVE
查询来绘制课程。