【发布时间】:2019-03-08 17:54:39
【问题描述】:
我正在使用
library(tmap)
qtm("London")
要获取伦敦地图,但找不到将其定型的方法?
tm_shape
否则,我只能在视图模式下,而不是在绘图模式下。
【问题讨论】:
我正在使用
library(tmap)
qtm("London")
要获取伦敦地图,但找不到将其定型的方法?
tm_shape
否则,我只能在视图模式下,而不是在绘图模式下。
【问题讨论】:
是的,没错。您必须以另一种方式在tmap_mode("plot") 中获取地图图层。
在tmap_mode("view") 你可以这样做:
tm_shape(lnd) + tm_polygons(alpha = 0.7, col = "Pop_2001", legend.show = FALSE) +
tm_basemap(server = c('OpenStreetMap'))
tm_basemap(server = c('OpenStreetMap')) 不是必需的,但我还是把它放了,因为在这里您可以更改底图,例如更改为 stamen。
对于tmap_mode("plot"),您必须手动下载图块。有几种方法可以做到这一点。
1. tmaptools-package 提供了一个函数来实现 read_osm()。要获取 Tiles,请执行 lonmap <- bb("London") %>% read_osm(type = "osm"),它会返回一个栅格对象。
2. 另一种选择是来自OpenStreetMap-package 的openmap(),它看起来像这样:
london <- bb("London")
lonmap <- openmap(upperLeft = london[3:4],
lowerRight = london[1:2],
type = "osm",
mergeTiles = TRUE)
3.当然还有来自ggmap-package 的get_map(),您现在需要一个API 密钥。但是,这不能直接放入tm_shape()。
但说实话read_osm() 和openmap() 都给了我错误
java.lang.NullPointerException
我一直没能找到解决办法。
4. 所以我使用了另一个:cartography-package 中的 getTiles() 函数。 getTiles 只接受sf 或sp 对象并返回RasterBrick-object
library(tmap)
library(cartography)
lonmap <- getTiles(x = lnd, type = "osm")
tmap_mode("plot")
tm_shape(lonmap) + tm_rgb() + tm_shape(lnd) +
tm_polygons(alpha = 0.5,col = "Pop_2001", legend.show = FALSE)
这给了你这个:
能够使用边界框的解决方法是:
lonmap <- bb("London") %>%
matrix(ncol = 2, byrow = TRUE) %>%
SpatialPoints(proj4string = CRS("+init=epsg:4326")) %>%
getTiles(type = "osm")
lnd 是SpatialPolygonsDataFrame。别管内容。你可以从这里得到它:
https://github.com/Robinlovelace/Creating-maps-in-R/blob/master/data/london_sport.shp
【讨论】: