空间多边形数据框架中重叠多边形属性值的R求和
我有一个形状文件,其中包含许多部分重叠的空间多边形。这些多边形属于田间杀菌剂施用,每个多边形都有一个相关的施用率属性 我想得到的是,在考虑重叠区域的情况下更正应用的贴图,这意味着如果两个(或更多)多边形重叠,则应将速率相加并合并 以下示例代码创建了一个空间多边形数据框,简化了问题:空间多边形数据框架中重叠多边形属性值的R求和,r,polygon,geospatial,r-raster,R,Polygon,Geospatial,R Raster,我有一个形状文件,其中包含许多部分重叠的空间多边形。这些多边形属于田间杀菌剂施用,每个多边形都有一个相关的施用率属性 我想得到的是,在考虑重叠区域的情况下更正应用的贴图,这意味着如果两个(或更多)多边形重叠,则应将速率相加并合并 以下示例代码创建了一个空间多边形数据框,简化了问题: library(raster) library(sp) p<-SpatialPolygons(list(Polygons(list(Polygon(cbind(c(1,4,4,3,3,1,1),c(1,1,3
library(raster)
library(sp)
p<-SpatialPolygons(list(Polygons(list(Polygon(cbind(c(1,4,4,3,3,1,1),c(1,1,3,3,4,4,1)),hole = F)), "1_ "),
Polygons(list(Polygon(cbind(c(3,4,4,3,3),c(3,3,4,4,3)),hole = F)), "1_2"),
Polygons(list(Polygon(cbind(c(3,4,4,3,3),c(3,3,4,4,3)),hole = F)), "2_1"),
Polygons(list(Polygon(cbind(c(4,4,5,5,3,3,4),c(4,3,3,5,5,4,4)),hole = F)),"2_")))
pid <- sapply(slot(p, "polygons"), function(x) slot(x, "ID"))
p.df <- data.frame( ID=1:length(p), row.names = pid)
p <- SpatialPolygonsDataFrame(p, p.df)
p$Rate <- c(100, 100, 100, 100)
crs(p) <- "+proj=longlat +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0"
plot(p)
库(光栅)
图书馆(sp)
p我认为你所追求的确实是union
。它合并并标识重叠的多边形。有了这些,你就可以算出价格了
# example data
library(raster)
p1 <- cbind(c(1,4,4,1),c(1,1,4,4))
p2 <- cbind(c(3,5,5,3),c(3,3,5,5))
p <- spPolygons(p1, p2, crs="+proj=longlat +datum=WGS84",
attr=data.frame(ID=1:2, Rate =c(50,100)))
#data.frame(p)
# ID Rate
#1 1 50
#2 2 100
#示例数据
图书馆(光栅)
p1我已经更改了代码,以便它现在可以处理您的数据。您可以尝试开发版本:install.packages(“raster”,repos=“)这修复了警告,谢谢!不幸的是,一些错误仍然存在。请查找上面的详细信息。此外,我使用:install.packages(“raster”,repos=“)获得了开发版本,因为您的命令缺少http部分。示例2对我来说很好。也许您需要更新rgeos
?我很乐意看其他案例,但不是通过那个讨厌的文件共享。如果你愿意,你可以给我发电子邮件。我需要更新的不是rgeos
,而是sp
软件包。所以非常感谢你的帮助!:)还有一句话:我发布的将光栅包更新为开发版本的命令也不正确。以下操作正在运行:install.packages(“光栅”,repos=“)
Error in if (is.numeric(i) && i < 0) { :
missing value where TRUE/FALSE needed
# example data
library(raster)
p1 <- cbind(c(1,4,4,1),c(1,1,4,4))
p2 <- cbind(c(3,5,5,3),c(3,3,5,5))
p <- spPolygons(p1, p2, crs="+proj=longlat +datum=WGS84",
attr=data.frame(ID=1:2, Rate =c(50,100)))
#data.frame(p)
# ID Rate
#1 1 50
#2 2 100
x <- union(p)
ud <- data.frame(x)
ud$count <- NULL
udRate <- t( t(ud) * p$Rate )
x$Rate <- rowSums(udRate)
data.frame(x)
# ID.1 ID.2 count Rate
#1 1 0 1 50
#2 0 1 1 100
#3 1 1 2 150