Преобразование объекта "карта" в объект "SpatialPolygon"
Я предполагаю, что есть простое решение проблемы, с которой я столкнулся, но у меня возникли некоторые проблемы.
Я пытаюсь преобразовать следующее 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
После некоторого исследования, похоже, что ID имеют длину 63 и map
объект имеет длину 169 после применения функции .NAmat2xyList(cbind(map$x, map$y))
(для которого я не могу найти источник).
У кого-нибудь есть идеи? Вот структура 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 ответа
Просто нашел какой-то код в тексте "Прикладной анализ пространственных данных с помощью 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"))
Полигоны имеют поверхность (площадь), поэтому ключевым аргументом является fill = TRUE
в
usa <- map('state', fill = TRUE)
Изменение значения аргумента на TRUE останавливает сообщение об ошибке.