我有一堆谷歌地图上有一堆多边形。
这是我感兴趣的一个问题:给定一个lat,lng点,确定这一点所在的所有多边形的最佳方法是什么。
显而易见的方法是迭代地为每个多边形运行“多边形点”算法,但我想知道是否有一个有效的算法来回答这些查询,如果你有数千个多边形。
答案 0 :(得分:0)
改进“for each polygon”算法的唯一方法是创建一组元数据,允许您跳过一些多边形。例如,如果您的数千个多边形中包含彼此重叠的所有多边形的列表或列表集,那么您将能够快速消除许多多边形点比较。即找到包含点的第一个多边形,然后仅比较与初始多边形相交/重叠的多边形,因为包含该点的任何多边形也必须与包含该点的其他多边形重叠。最坏的情况是N比较,例如你的每个实现。
您还可以创建多边形的逻辑/物理区域,例如某些区域中多边形的象限。在象限示例中,您将/应该能够消除3/4的多边形以进行比较。这完全取决于您的多边形的排列方式。
但无论如何,我认为for-each算法的改进在于在多边形集合中创建/组织一些逻辑组。
答案 1 :(得分:0)
我不知道它下面是什么,但是将空间滤镜应用到包含多边形特征的图层为我预先选择多边形...示例就是这个,void GRLayer::SetSpatialFilter ( OGRGeometry * poFilter)
http://www.gdal.org/ogr/classOGRLayer.html#0b4ab45cf97cbc470f0d60474d3e4169。我想很多GIS环境都有类似的功能。