【发布时间】:2016-10-07 12:52:04
【问题描述】:
我有一个包含许多部分重叠的 SpatialPolygons 的形状文件。这些多边形属于杀真菌剂在田间的应用,每个多边形都有一个相关的施用率作为属性。
我想要获得的是在考虑重叠区域的情况下更正 AsApplied 地图,这意味着如果两个(或更多)多边形重叠,则应将速率求和并合并。
以下示例代码创建了一个 SpatialPolygonsDataFrame 来简化问题:
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)
您可以从四个部分重叠的多边形中看到两个正方形。每个多边形的相关比率为 100。 我想要的是三个多边形。两个不重叠的应该有 100 的比率,两个重叠的应该连接到一个值为 200 的多边形。
我已经尝试过栅格包的联合或相交功能,但只能获得多边形重叠的信息,而不能获得求和和合并的信息。此外,我正在明确寻求 R 中的解决方案。
非常感谢任何解决此问题的帮助。
更新: 下面提供的 RobertH 提供的解决方案适用于我的简单示例。已经非常感谢了!
但是,当切换到我的真实用例时,我会遇到以下错误和警告:
Error in if (is.numeric(i) && i < 0) { :
missing value where TRUE/FALSE needed
In addition: Warning messages:
1: In RGEOSUnaryPredFunc(spgeom, byid, "rgeos_isvalid") :
Too few points in geometry component at or near point 8.3634020800000002 50.056772690000003
...
此处上传了一个示例形状文件:(已过时)
任何想法如何处理这个问题?
更新 #2 使用当前的开发版本 2.5-10 确实修复了 RGEOSUnaryPredFunc 中的警告。但是,如果多边形仅重叠很少,我仍然会收到错误:
Error in if (is.numeric(i) && i < 0) { :
missing value where TRUE/FALSE needed
在此处上传了发生这种情况的示例形状文件:http://www.share-online.biz/dl/O4ZIVH8OBW。更精确的字段如下所示:
标记为红色的两个多边形会导致错误,如果删除两个多边形之一,则联合工作正常。
非常感谢您的大力帮助!
【问题讨论】:
-
我已经更改了代码,以便它现在可以处理您的数据。可以试试开发版:install.packages("raster", repos="R-Forge.R-project.org")
-
这修复了警告,谢谢!不幸的是,一些错误仍然存在。请在上面找到详细信息。另外,我得到了开发版本: install.packages("raster", repos="R-Forge.R-project.org") 因为你的命令缺少 http 部分。
-
示例 2 适合我。也许您需要更新
rgeos?我很乐意看看其他情况,但不是通过那个烦人的文件共享。如果你愿意,可以给我发电子邮件。 -
我必须更新的不是
rgeos,而是sp包。所以非常感谢你的帮助! :) -
再说明:我发布的将光栅包更新到开发版本的命令也是不正确的。以下是有效的: install.packages("raster", repos="R-Forge.R-project.org")
标签: r polygon geospatial r-raster