将“map”对象转换为“SpatialPolygon”对象

时间:2014-09-26 14:45:09

标签: r maps maptools sp

我猜我有一个简单的解决方案,但我遇到了一些问题。

我正在尝试转换以下map对象:

require(maps)
usa <- map("state")

使用SpatialPolygon函数进入map2SpatialPolygons对象:

require(maptools)
usa.sp <- map2SpatialPolygons(usa, IDs=usa$names,proj4string=CRS("+proj=longlat"))

我一直收到以下错误:

Error in map2SpatialPolygons(usa, IDs = usa$names, proj4string = CRS("+proj=longlat")) : 
  map and IDs differ in length

经过一些研究后,在应用函数map(我无法找到源代码)后,看起来ID的长度为63,.NAmat2xyList(cbind(map$x, map$y))对象的长度为169.

有人有什么想法吗?以下是usa地图对象的结构:

> str(usa)
List of 4
 $ x    : num [1:1705] -88.4 -88.1 -88 -87.9 -87.8 ...
 $ y    : num [1:1705] 30.4 30.4 30.8 30.6 30.3 ...
 $ range: num [1:4] -124.7 -67 25.1 49.4
 $ names: chr [1:63] "alabama" "arizona" "arkansas" "california" ...
 - attr(*, "class")= chr "map"

2 个答案:

答案 0 :(得分:16)

刚刚在文本中找到了一些代码&#34;应用空间数据分析与R&#34;。它很棒!

require(maps)
usa <- map("state", fill = TRUE)

require(sp)
require(maptools)
IDs <- sapply(strsplit(usa$names, ":"), function(x) x[1])
usa <- map2SpatialPolygons(usa, IDs=IDs, proj4string=CRS("+proj=longlat +datum=WGS84"))

答案 1 :(得分:6)

多边形具有表面(区域),因此

中的关键参数为fill = TRUE
usa <- map('state', fill = TRUE)

将参数值更改为TRUE会停止错误消息。