2016-12-05 257 views
7

我有一个shapefile(可以在这里下载http://www.car.gov.br/publico/municipios/downloads?sigla=MA(任何会这样做)),其中每个多边形代表农村私有财产,因为所有者支持它。但是,多边形重叠。对于我需要运行的分析,一个区域不能被计入两次(即在两个属性中)。因此,在重叠的区域,我想将这个重复区域分配给面积最小的多边形,并从另一个区域中擦除。将多边形重复区域(重叠)分配给只有一个多边形

我看了其他问题,如this one。但没有人真的这样做。

回答

3

您可以使用rgeos::gDifference从较大的多边形中减去较小的多边形。

一个例子:

首先我们做一些虚拟的多边形来演示在

library(sp) 
library(rgeos) 
p1 <- Polygon(matrix(c(
    100, 100, 
    100, 500, 
    900, 500, 
    900, 100, 
    100, 100), ncol=2, byrow = T)) 
p2 <- Polygon(matrix(c(
    50, 400, 
    50, 600, 
    800, 600, 
    800, 400, 
    50, 400), ncol=2, byrow = T)) 
p1 <- SpatialPolygons(list(Polygons(list(p1), "p1"))) 
p2 <- SpatialPolygons(list(Polygons(list(p2), "p2"))) 
plot(p1) 
plot(p2, add=T) 

enter image description here

我们可以用gArea找出哪一个较小

a1 = gArea(p1) 
## [1] 320000 
a2 = gArea(p2) 
## [1] 150000 

现在我们可以从较大的地方移除交叉点多边形是这样的:

if (a1>a2){ 
    p3 = gDifference(p1,p2) 
    p4 = p2 
} else { 
    p3 = gDifference(p2,p1) 
    p4 = p1 
} 
plot(p3) 

enter image description here

两个多边形在一起,看起来像这样

plot(p4, add=T) 

enter image description here