从map_data转到SpatialPolygonsDataFrame

时间:2017-05-23 01:10:56

标签: r ggplot2 sp

我想使用ggplot2中get_map的输出创建SpatialPolygonsDataFrame。经过一些试验和错误后,我找到了一种方法,但这对我来说似乎很复杂。有更干净的方式吗?

library(ggplot2)
library(sp)
library(plyr)
pnw.df <- map_data("state",region=c("washington","oregon","idaho"))
# delete islands from subregions
pnw.df$subregion[is.na(pnw.df$subregion)] <- "main" 
pnw.df <- subset(pnw.df,subregion == "main") 

getPolygons <- function(x) {
  Polygons(list(Polygon(x[,c("long","lat")])),ID=unique(x$region))
}

pnw.sp <- SpatialPolygons(dlply(pnw.df, .(region), getPolygons))
pnw.sp <- as(pnw.sp,"SpatialPolygonsDataFrame")
proj4string(pnw.sp) <- "+proj=longlat +ellps=WGS84"
plot(pnw.sp)

1 个答案:

答案 0 :(得分:0)

查看maptools::map2SpatialPolygons,试试其示例。 map_datamaps读取数据并将其放入data.frame,这不是很有用。 maptools函数从maps获取相同的数据,并将它们转换为SpatialPolygons对象。