我有两个 GIS 层——调用它们Soils
并Parcels
存储为SpatialPolygonsDataFrame
s( SPDF
s),并且我想“覆盖”它们,在此处描述的意义上。
叠加操作的结果应该是一个新的 SPDF,其中:
该
SpatialPolygons
组件包含由两层相交形成的多边形。(想想在投影仪上覆盖两个聚酯薄膜形成的所有原子多边形)。该组件记录每个原子多边形所属的多边形和多边形
data.frame
的属性。Soils
Parcels
我的问题:是否存在执行此操作的现有 R 函数?(我什至很乐意学习一个函数,它只是让SpatialPolygons
组件正确,计算从两层的交叉点形成的原子多边形。)我觉得rgeos应该至少有一个函数(1),但它好像没有……
这是一个可以帮助我更清楚我所追求的图,然后是创建图中所示的Soils
和层的代码。Parcels
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)))
})