0

我想合并 gadm 数据中的一些区域,然后绘制地图。到目前为止,我有以下内容:

#install.packages("sp",dependencies=TRUE)
#install.packages("RColorBrewer",dependencies=TRUE)
#install.packages("maptools",dependencies=TRUE)
library(sp)
library(maptools)
#library(RColorBrewer)

# get spatial data
con <- url("http://gadm.org/data/rda/CZE_adm2.RData")
print(load(con))
close(con)

IDs <- gadm$ID_2
IDs[IDs %in% c(11500:11521)] <- "11500"
gadm_new <- unionSpatialPolygons(gadm, IDs)

# plot map
spplot(gadm_new, "NAME_2", col.regions=col, main="Test",colorkey = FALSE, lwd=.4, col="white")

但是,这会导致错误:

Error in function (classes, fdef, mtable)  : 
  unable to find an inherited method for function "spplot", for signature "SpatialPolygons"

现在我不知道什么可以解决这个错误。

4

1 回答 1

2

我不确定你想在这里做什么。

该错误是由于spplot用于绘制具有属性的空间对象,即具有关联数据的事实。您的gadm对象属于类SpatialPolygonsDataFrame,因此它定义了可以通过插槽访问的多边形和相关数据gadm@data。当你使用 时UnionSpatialPolygons,你只会得到一个SpatialPolygons类对象,它可以用 绘制plot,但不能用绘制spplot

IDs <- gadm$ID_2
IDs[IDs %in% c(11500:11521)] <- "11500"
gadm_new <- unionSpatialPolygons(gadm, IDs)
plot(gadm_new)

如果你想使用spplot,你必须手动合并你的关联数据,就像你合并你的多边形一样,然后重新构建一个SpatialPolygonsDataFrame. 一种方法如下:

gadm_new <- gadm
## Change IDs
gadm_new$ID_2[gadm_new$ID_2 %in% c(11500:11521)] <- "11500"
## Merge Polygons
gadm_new.sp <- unionSpatialPolygons(gadm_new, gadm_new$ID_2)
## Merge data
gadm_new.data <- unique(gadm_new@data[,c("ID_2", "ENGTYPE_2")])
## Rownames of the associated data frame must be the same as polygons IDs
rownames(gadm_new.data) <- gadm_new.data$ID_2
## Build the new SpatialPolygonsDataFrame
gadm_new <- SpatialPolygonsDataFrame(gadm_new.sp, gadm_new.data) 

然后您可以使用spplot 关联属性绘制地图​​:

spplot(gadm_new, "ENGTYPE_2", main="Test", lwd=.4, col="white")

请注意,这里我只使用了ENGTYPE_2您的数据变量,而不是NAME_2变量,因为我看不到表示每个值对于每个多边形都是唯一的变量的意义。

于 2013-03-04T13:18:16.247 回答