将“地图”对象转换为“SpatialPolygon”对象

Posted

技术标签:

【中文标题】将“地图”对象转换为“SpatialPolygon”对象【英文标题】:Converting a "map" object to a "SpatialPolygon" object 【发布时间】:2014-11-21 15:00:36 【问题描述】:

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

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

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

使用map2SpatialPolygons 函数进入SpatialPolygon 对象:

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

经过一些研究,在应用函数.NAmat2xyList(cbind(map$x, map$y))(我找不到其来源)后,ID 的长度似乎为 63,map 对象的长度为 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"

【问题讨论】:

【参考方案1】:

刚刚在“Applied Spatial Data Analysis with R”一文中找到了一些代码。效果很好!

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"))

【讨论】:

当通过指定世界数据库使用地图并通过地区名称访问国家时,地区可以以更一般的方式访问:德国 【参考方案2】:

多边形有表面(面积),因此关键参数是fill = TRUE in

usa <- map('state', fill = TRUE)

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

【讨论】:

+1 好点。如果 ?map 引用指定“填充”参数具有这种下游效果,那将很有帮助。它目前的编写方式(2.3-11 版),读起来好像只影响地图在屏幕上的绘制方式。

以上是关于将“地图”对象转换为“SpatialPolygon”对象的主要内容,如果未能解决你的问题,请参考以下文章

如何将地图数据转换为颤动中的对象列表?

使用谷歌地图将海里转换为给定纬度的经度

Terraform - 如何将列表转换为地图(如何使用 terraform 获取 AMI 标签)

将火花行对象转换为 java pojo

将Google Map DIV转换为图像

将对象列表转换为映射Java 8流