R
包sf
在“几何二元谓词”标题下有一套惊人的功能,详细描述了here。
如链接中所述,如果仅提供一个sf
对象,则函数将递归地应用于同一数据集中的所有几何(请参阅下面的示例)
如果缺少y,则有效地调用
st_predicate(x, x)
,并返回带有对角元素st_predicate(x[i], x[i])
的方阵。
但是现在,我正在构建一些工具,我将从ArcGIS中绑定arcpy
。在同一数据集中获取所有要素的方形矩阵以指示相应要素是否重叠的快速方法是什么?
arcpy.SpatialJoin_analysis()
仅比较两个数据集和arcpy.GenerateNearTable_analysis()
以及arcpy.Near_analysis()
仅计算要素之间的距离。
这就是st_overlaps()
在R
中的作用:
library(sf)
#> Warning: Paket 'sf' wurde unter R Version 3.5.2 erstellt
#> Linking to GEOS 3.6.1, GDAL 2.2.3, PROJ 4.9.3
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)
y = st_sfc(a0,a1,a2,a3)
plot(y)
st_overlaps(y,sparse = F)
#> [,1] [,2] [,3] [,4]
#> [1,] FALSE FALSE TRUE FALSE
#> [2,] FALSE FALSE TRUE FALSE
#> [3,] TRUE TRUE FALSE FALSE
#> [4,] FALSE FALSE FALSE FALSE
由reprex package创建于2019-04-16(v0.2.1)
实现此目的的一种方法:
示例python:
arcpy.analysis.Intersect("test.shp", "test_Intersect", "ONLY_FID", None, "INPUT")
arcpy.management.FindIdentical("test_Intersect", r"test_Intersect_FindIdentical", "Shape", None, 0, "ONLY_DUPLICATES")
arcpy.management.AddJoin("test", "FID", "test_Intersect", "FID_test", "KEEP_ALL")
arcpy.management.AddJoin("test", "test_Intersect.OBJECTID", "test_Intersect_FindIdentical", "IN_FID", "KEEP_ALL")