如何在 tmap 中获取搜索地图的形状

How to get a shape of a searched map in tmap

我正在使用

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"),其中 returns 是一个光栅对象。

2. 另一种选择是 openmap() 来自 OpenStreetMap-package,它看起来像这样:

london <- bb("London")
lonmap <- openmap(upperLeft = london[3:4], 
                  lowerRight = london[1:2], 
                  type = "osm",
                  mergeTiles = TRUE)

3. 当然还有 ggmap-包中的 get_map(),您现在需要一个 API-key。然而,这不能直接放入 tm_shape()

但老实说 read_osm()openmap() 都给我错误

java.lang.NullPointerException

我还没找到解决办法。

4. 所以我使用了另一个:cartography 包中的 getTiles() 函数。 getTiles 只接受 sfsp 对象和 returns 一个 RasterBrick-对象

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