从详细的shapefile创建新的多边形

时间:2014-10-13 15:01:21

标签: r map plot subset shapefile

有没有快速的方法来构建一个使用更详细的新shapefile?以下示例将显示问题。

使用此link中提供的数据,可以获得圣保罗市政当局。

if(require(rgdal) == F){install.packages('rgdal'); require(rgdal)}
if(require(ggplot2) == F){install.packages('ggplot2'); require(ggplot2)}
setwd("..data directory..")
sp4.rg <- readOGR(".", "35MUE250GC_SIR")
plot(sp4.rg, axes=TRUE, border="gray")

sao paulo municipalities

在这个地块中有645个市镇。我想做同样的情节,但现在我想在一个新的区域(多边形)中聚集一些这样的城市。例如:我们将这个新区域称为“SPABCD”。该地区由以下城市组成:“圣保罗”,“圣奥德纳多坎普”,“圣安德烈”,“圣卡塔诺”和“DIADEMA”。

sp <- fortify(sp4.rg, region = "NM_MUNICIP")
spabcd <- c("SÃO PAULO", "SÃO BERNARDO DO CAMPO",  "SANTO ANDRÉ", "SÃO CAETANO DO SUL", "DIADEMA")
sp$region <- ifelse(sp$id %in% spabcd, "SPABCD", sp$id)

我的问题是:有一种快速的方法(一种已经创建的功能)可以选择围绕这个新区域的纬度和经度,以便可以绘制它吗?

1 个答案:

答案 0 :(得分:3)

使用您的数据的一个快速 /玩具示例(因为我相信,您需要做更多的工作才能做到这一点):

library(maptools)

regs <- c("S\xc3O PAULO", "S\xc3O BERNARDO DO CAMPO", 
          "SANTO ANDR\xc9", "S\xc3O CAETANO DO SUL", "DIADEMA")

# make a copy of all the IDs
sp2 <- sp$ID

# filter out only the ones we want dissolved:
sp2[which(!sp$NM_MUNICIP %in% regs)] <- NA
sp.u <- unionSpatialPolygons(sp, sp2)

# sample new plot
plot(sp.u)

enter image description here

# showing this region on the whole map

plot(sp, axes=TRUE, border="gray")
plot(sp.u, col="red", add=TRUE)

enter image description here

现在,只有边界:

# make one "bin"
sp.u.s <- getSpPPolygonsLabptSlots(sp.u)

outline <- cut(sp.u.s[,1], range(sp.u.s[,1]), include.lowest=TRUE)

# one more dissolve
dissolved <- unionSpatialPolygons(sp.u ,outline)

plot(sp, axes=TRUE, border="gray")
plot(dissolved, add=TRUE)

enter image description here