【问题标题】:Efficiently count intersections of each polygon in a list with polygons in another list using Shapely [duplicate]使用 Shapely [重复] 有效地计算列表中每个多边形与另一个列表中多边形的交叉点
【发布时间】:2020-08-14 12:07:13
【问题描述】:

如何通过列表理解来简化这个 for 循环并获得更快的速度?

import numpy as np
import shapely

#buffer_original_points --> shapely polygons in a list
#raster --> shapely polygons in a list


raster_array = np.zeros((len(raster)))

for i in range(0, len(buffer_original_points)):
    for j in range(0, len(raster)):
        if buffer_original_points[i].intersects(raster[j]) or raster[j].contains(buffer_original_points[i]):
            raster_array[j] += 1

raster_array = raster_array.reshape(rows, columns)

我试过这个,但是 raster_array 结果是错误的,并且被填充了:

raster_array=[raster_array[j]+1 for i in range(0, len(buffer_original_points)) for j in range(0, len(raster)) if (buffer_original_points[i].intersects(raster[j]) or raster[j].contains(buffer_original_points[i]))]

【问题讨论】:

  • 这个理解只返回值,不会改变raster_array 中的值。由于您不想更改循环内的变量,因此循环似乎是正确的方法。
  • @Georgy 感谢您的支持。您能否给我一些建议以在我的情况下实施 Mike T 的解决方案?我对 Rtree 这个话题有点不知所措,不明白如何在我的情况下使用它。我的目标是建立一个矩阵,其中单元格值取决于位于栅格单元格中的点数。
  • 我建议改用second answer,这样您就不必安装其他库了。通过栅格多边形列表初始化STRtree,然后迭代buffer_original_points 并使用query 方法获取与当前迭代中的多边形相交的那些栅格多边形。要跟踪计数,您还可以使用 collections.Counterrasters 作为键,最后您会将其转换回计数数组。
  • @Georgy 如果我错了,请纠正我。 STRtree 被初始化为s=STRtree(raster)。之后,我使用列表理解查询结果并将结果存储在列表result=[s.query(buffer_original_points[i] for i in range(0,len(buffer_original_points) 中。然后我测试了[raster[i] in result for i in range(0,len(raster)) 是否有任何结果为真,但整个列表是false。对不起,我的误解,但我是新手。
  • 非常感谢@Georgy。你的笔记本帮了我很大的忙!从两分钟运行时间到

标签: python shapely


【解决方案1】:

您可能可以尝试以下方法:

raster_array = [sum([buffer_original_points[i].intersects(raster[j]) or raster[j].contains(buffer_original_points[i])) for i in range(0, len(buffer_original_points))] for j in range(0, len(raster))] 

但由于清晰度降低,我不确定这不是一个好的编码习惯。

【讨论】:

  • 感谢您的帮助,但是您的代码 sn-p 给我返回了一个语法错误,我无法弄清楚问题出在哪里。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-12-29
  • 1970-01-01
  • 2013-02-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-14
相关资源
最近更新 更多