2012-06-19 3 views
4

Я пытаюсь использовать map2SpatialPolygons для создания графика плотности ядра на карте, показывающей подмножество штатов США. Я продолжаю ошибаться, говоря, что «карта и идентификаторы отличаются по длине».R: IDs в map2SpatialPolygons

Я знаю, что этот код работает (с помощью для map2SpatialPolygons):

nor_coast_poly <- map("world", "norway", fill=TRUE, col="transparent", plot=FALSE, ylim=c(58,72)) 
IDs <- sapply(strsplit(nor_coast_poly$names, ":"), function(x) x[1]) 
nor_coast_poly_sp <- map2SpatialPolygons(nor_coast_poly, IDs=IDs, proj4string=CRS("+proj=longlat +datum=wgs84")) 

этот код работает (при отображении всего США):

usmap <- map('usa', fill=TRUE, col="transparent", resolution=0, plot=FALSE) 
uspoly <- map2SpatialPolygons(usmap, IDs=usmap$names, proj4string=CRS("+proj=longlat +datum=WGS84")) 

но этот код не будет:

states.to.plot=c("illinois", "indiana", "ohio") 
dmap<-map("state", regions=states.to.plot, col="transparent", plot=FALSE) 
dpoly <- map2SpatialPolygons(dmap, IDs=dmap$names, proj4string=CRS("+proj=longlat +datum=WGS84")) 

Он бросает ошибку:

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

Как правильно получить идентификаторы при использовании карты («состояние» ...)?

ответ

6

От ?map:

The return value is a list with x, y, range, and names components. ... If fill is FALSE, the x and y vectors are the coordinates of successive polylines, separated by NAs. If fill is TRUE, the x and y vectors have coordinates of successive polygons, again separated by NAs.

Так с по умолчанию fill = FALSE, вы получите кучу ломаных «кучу» быть более трех государств вы хотели построить, и именно поэтому вы получите ошибку выше , Однако даже при правильном количестве идентификаторов вы все равно получите ошибку, так как map возвращает полилинии вместо полигонов.

С fill = TRUE, вы получите многоугольники, что вы после этого:

dmap<-map("state", regions=states.to.plot, col="transparent", plot=FALSE, fill = TRUE) 

dpoly <- map2SpatialPolygons(dmap, IDs = dmap$names, 
    proj4string=CRS("+proj=longlat +datum=WGS84")) 
+0

отличного ответа, пришли сюда с точно такой же вопрос. – tomw