python - arcpy 中同一数据集中所有对象的重叠 (st_overlaps)

标签 python r arcpy sf

Rsf 在“几何二元谓词”标题下有一组令人惊叹的函数,详细描述了 here .

如链接中所述,如果仅提供一个 sf 对象,则这些函数将递归地应用于同一数据集中的所有几何图形(参见下面的示例) p>

If y is missing, st_predicate(x, x) is effectively called, and a square matrix is returned with diagonal elements st_predicate(x[i], x[i]).

但是现在,我正在构建一些工具,将其绑定(bind)到 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年4月16日创建(v0.2.1)

最佳答案

实现此目的的一种方法:

  1. 使用“相交”工具将所有多边形在重叠处分开。
  2. 使用“查找重复项”工具生成具有相同形状的多边形列表。
  3. 使用对象 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/

相关文章:

python - 错误 : not all arguments converted during bytes formatting

python - MultinomialNB - 理论与实践

r - 在 ggplot 条形图和箱线图上放置星星 - 以指示显着性水平(p 值)

r - 如何在 R 中的 reshape 包中循环 dcast 函数

r - 主成分分析:Error in colMeans(x, na.rm = TRUE): 'x'必须为数字

python - 元素树xml

python - 按源优先级查找替换名称(python)

python - 使用 python 和 arcpy 删除地理数据库中的数据时出现错误

python - 为列表生成器结果分配不同的值

python - 如何在一个 NumPy 数组中搜索位置,以便在这些位置获取第二个 NumPy 数组中的值?