我以前问过a very similar question。由于arcpy
解决方案非常麻烦,我现在在geopandas
中寻找基本相同的特性。问题是:应用二进制谓词函数(e.g. ^{x
的每个特征与x
或不同数据集y
的每个特征进行比较。我希望输出类似于R中的默认行为:
If y is missing,
st_predicate(x, x)
is effectively called, and a square matrix is returned with diagonal elementsst_predicate(x[i], x[i])
.
用一些伪数据和函数st_overlaps()
来举例说明这一点:
library(sf)
b0 = st_polygon(list(rbind(c(-1,-1), c(1,-1), c(1,1), c(-1,1), c(-1,-1))))
a0 = b0 * 0.8
a1 = a0 * 0.5 + c(2, 0.7)
a2 = a0 + 1
a3 = b0 * 0.5 + c(2, -0.5)
x = st_sfc(a0,a1,a2,a3)
plot(x)
st_overlaps(x)
#> Sparse geometry binary predicate list of length 4, where the predicate was `overlaps'
#> 1: 3
#> 2: 3
#> 3: 1, 2
#> 4: (empty)
如何在python
/geopandas
中实现类似的行为?显然,geopandas
自动对齐x
和x
/y
,并执行元素比较(参见this SO question和this issue on github)。在python中,运行x.overlaps(x)
只返回一个带有四个True
值的pandas序列。你知道吗
import geopandas as gpd
x.overlaps(x)
0 True
1 True
2 True
3 True
Python的惯用表达方式是使用列表理解,例如,要创建由元组(index:(overlapping index))组成的列表,您可以编写
结果:
但正如martinfleis所指出的,这并不是一种超高效的方法,因为它不使用任何类型的空间索引。你知道吗
使用覆盖操作可能会获得更好的性能,请参见http://geopandas.org/set_operations.html
这绝对不是最快的方法,因为它只是一个简单的迭代器,但如果您的数据不是很大,它可能会做的工作。你知道吗
它会让你明白你的价值观。你知道吗
但是,请注意,它会先检查A->;B,然后检查B->;A,并且它还会检查多边形,即使它们明显远离。为了加快速度,可以使用rtree空间索引只检查那些可能重叠的多边形,而不是检查每个多边形(两次)。你知道吗
相关问题 更多 >
编程相关推荐