代码之家  ›  专栏  ›  技术社区  ›  Ratnanil

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

  •  1
  • Ratnanil  · 技术社区  · 7 年前

    这个 R 包裹 sf 在“几何二进制谓词”的标题下有一组惊人的函数,详细描述了这些函数 here .

    如链接中所述,函数递归应用于所有几何体 在同一数据集中 如果只有一个 科幻小说 -对象(参见下面的示例)

    如果y不见了, st_predicate(x, x) 有效地调用,并返回带有对角元素的方阵 st_predicate(x[i], x[i]) .

    然而现在,我正在构建一些工具,我必须 arcpy 来自ArcGIS。如何快速获得同一数据集中所有特征的方阵,以指示各自的特征是否重叠?

    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
    

    于2019年4月16日由 reprex package (v0.2.1)

    0 回复  |  直到 7 年前
        1
  •  1
  •   Anna Forrest    7 年前

    实现这一点的一种方法:

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