我有两个GIS层-分别称为SoilsParcels-存储为SpatialPolygonsDataFrame s(SPDF s),我想对其进行“叠加” in the sense described here

覆盖操作的结果应为新的SPDF,其中:

  • SpatialPolygons组件包含由两层的相交形成的多边形。 (想一想在高射投影仪上叠加两个聚酯薄膜形成的所有原子多边形)。
  • data.frame组件记录每个原子多边形所属的SoilsParcels多边形的属性。

  • 我的问题:是否存在执行此操作的R函数? (我什至乐于学习一个仅使SpatialPolygons组件正确的函数,计算由两层的交点形成的原子多边形。)我觉得 rgeos 应该具有一个至少可以完成(1)的功能,但似乎不...

    这是一个图,可以帮助您更清楚地了解我所追求的目标,后面是创建图中所示的SoilsParcels层的代码。
    library(rgeos)
    
    ## Just a utility function to construct the example layers.
    flattenSpatialPolygons <- function(SP) {
        nm <- deparse(substitute(SP))
        AA <- unlist(lapply(SP@polygons, function(X) X@Polygons))
        SpatialPolygons(lapply(seq_along(AA),
                               function(X) Polygons(AA[X], ID=paste0(nm, X))))
    }
    
    ## Example Soils layer
    Soils <-
    local({
        A <- readWKT("MULTIPOLYGON(((3 .5,7 1,7 2,3 1.5,3 0.5), (3 1.5,7 2,7 3,3 2.5,3 1.5)))")
        AA <- flattenSpatialPolygons(A)
        SpatialPolygonsDataFrame(AA,
               data.frame(soilType = paste0("Soil_", LETTERS[seq_along(AA)]),
                          row.names = getSpPPolygonsIDSlots(AA)))
    })
    
    ## Example Parcels layer
    Parcels <-
    local({
        B <- readWKT("MULTIPOLYGON(((0 0,2 0,2 3,0 3,0 0),(2 0,4 0,4 3,2 3,2 0)),((4 0,6 0,6 3,4 3,4 0)))")
        BB <- flattenSpatialPolygons(B)
        SpatialPolygonsDataFrame(BB,
               data.frame(soilType = paste0("Parcel_", seq_along(BB)),
                          row.names = getSpPPolygonsIDSlots(BB)))
    })
    

    最佳答案

    自2014年1月起,栅格软件包包括union()函数,该函数使操作变得简单:

    library(raster)
    Intersects <- Soils + Parcels  ## Shorthand for union(Soils, Parcels)
    
    ## Check that it work
    data.frame(Intersects)
    ## soilType.1 soilType.2
    ## 1     Soil_A       <NA>
    ## 2     Soil_B       <NA>
    ## 3       <NA>   Parcel_1
    ## 4       <NA>   Parcel_2
    ## 5       <NA>   Parcel_3
    ## 6     Soil_A   Parcel_2
    ## 7     Soil_A   Parcel_3
    ## 8     Soil_B   Parcel_2
    ## 9     Soil_B   Parcel_3
    plot(Intersects, col = blues9)
    

    关于r - 如何执行两个SpatialPolygonsDataFrame对象的矢量叠加?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15075361/

    10-12 17:33
    查看更多