2016-12-05 461 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