比较多边形的最快方法

Posted

技术标签:

【中文标题】比较多边形的最快方法【英文标题】:The fastest way to compare polygons 【发布时间】:2016-12-13 23:03:09 【问题描述】:

我需要解析地理点的地址组件(红色)。

mongodb 中的交叉点查询为我找到了一些多边形(见图)。绿色多边形是市辖区,蓝色是城市,棕色是乡村。我想将地址显示为“国家、城市、市辖区”。

问题是按多边形的大小对结果进行排序。用python计算面积或乘以边界框边大约需要一秒钟,这很慢。

是什么?

【问题讨论】:

“大约需要一秒钟”如果你的多边形那么大,是什么让你认为有一种快速的方法来比较它们? 多边形是如何定义的?如果它只是围绕周长的线段列表,它不应该花费那么长时间,您可以使用格林定理。 多边形定义为geojson。我认为这种快速方法在 postgis 或 mongodb 的 R-Tree 索引中使用。这些系统每小时计算数百万个边界框(我的速度是每小时数千个)。 你为什么不能预先计算每个多边形的面积并将它们全部存储在数据库中? > 为什么不能只预先计算每个多边形的面积并将它们全部存储在数据库中,因为我的数据库中有 100 000 个文档。我只有在速度快的情况下才能计算面积。 > 计算多边形的面积或边界框是一个简单的操作如何得到多边形的边界框? 【参考方案1】:

postgresql 中的 ST_Area 在 1 分钟内计算 100 000 个区域。

【讨论】:

以上是关于比较多边形的最快方法的主要内容,如果未能解决你的问题,请参考以下文章

多边形碰撞 -- SAT方法

在多个多边形中搜索点的最佳方法

cesium线段大小保持不变

判断一个多边形是顺时针还是逆时针的方法

Python Esri Arcpy 比较多边形和折线的几何图形

判断点与多边形关系