2016-12-05 28 views
7

Her bir çokgenin sahibinin gönderdiği gibi bir kırsal özel mülkiyeti temsil ettiği bir şekil dosyam var (burada http://www.car.gov.br/publico/municipios/downloads?sigla=MA (herhangi biri yapar)). Ancak, çokgenler üst üste gelir. Analiz etmem gerekirse, bir alan iki kez hesaplanamaz (yani iki özellikte olabilir). Böylece, üst üste binen alanlarda, bu kopya alanını en küçük alana sahip poligona atamak ve diğerinden silmek istedim.Çokgen kopyalama alanı (üst üste binme) yalnızca tek bir poligona atama

this one gibi başka sorulara da baktım. Ama hiçbiri buna kesinlikle hitap etmiyor.

cevap

3

Bunu daha küçük olan poligonu rgeos::gDifference kullanarak daha büyük olandan çıkararak yapabilirsiniz.

Bir örnek:

Önce

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

Biz

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

Şimdi daha küçük olduğu bulmak için gArea kullanabilirsiniz bazı kukla çokgenler göstermek için yapmak kesişimi daha büyükten kaldırabilir Böyle ile poligon:

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

enter image description here

iki çokgenler birlikte bu

plot(p4, add=T) 

enter image description here

benziyor
İlgili konular