gpt4 book ai didi

r - 如何执行两个SpatialPolygonsDataFrame对象的矢量叠加?

转载 作者:行者123 更新时间:2023-12-04 10:38:53 24 4
gpt4 key购买 nike

我有两个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/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com