我正在寻找一种优化几何操作性能的方法。我的目标是计算一系列多边形(21,562)中有多少点(205,779)。最好使用 python 和 R 以及 GIS 软件,如 ArcGIS、QGIS。
这是我搜索和编写的解决方案。
使用 ArcGIS:其中一个示例在http://support.esri.com/cn/knowledgebase/techarticles/detail/30779 -> 虽然我没有尝试过,但在空间连接中总是需要大量时间,基于我以前的经历。
使用 GDAL、OGR:这是一个示例: http: //geoexamples.blogspot.tw/2012/06/density-maps-using-gdalogr-python.html -> 每个多边形需要 5 到 9 秒。
使用带有循环的 Shapely 准备的几何操作:这是我的示例,每个多边形需要 2.7 到 3.0 秒。(注意点是列表中的点对象)
prep_poly=[] for i in polygons: mycount=[] for j in points: if prep(i).contains(j): mycount.append(1) #count how many points within polygons prep_poly.append(sum(mycount)) #sum once for every polygon mycount=[]
使用带有过滤器的 Shapely Prepared geometry 操作:这是我的示例,每个多边形大约需要 3.3 到 3.9 秒。(注意点是 MultiPoint 对象)
prep_poly=[] for i in polygons: prep_poly.append(len(filter(prep(i).contains, point1)))
尽管准备好的几何操作确实提高了性能,但处理大量多边形仍然很耗时。有什么建议吗?谢谢!