Rsf在标题“几何二进制谓词”下具有一组惊人的功能,在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(v0.2.1)于2019-04-16创建

最佳答案

一种实现此目的的方法:


使用“相交”工具将所有重叠的多边形分开。
使用“查找重复项”工具生成具有相同形状的多边形列表。
使用对象ID将这些过程的结果连接到原始表。连接到位后,您将在“ Feat_Seq”字段中看到标记有相同值的重叠多边形。


示例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")

关于python - 同一数据集内所有对象在arcpy中的重叠(st_overlaps),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55716263/

10-09 15:22