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