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

时间:2019-03-01 15:01:24

标签: r tmap

我正在使用

library(tmap)
qtm("London")

要获取伦敦地图,但找不到找到形状的方法?

tm_shape

否则,我只能在查看模式下使用它,而不能在绘图模式下使用

1 个答案:

答案 0 :(得分:0)

是的,这是正确的。您必须执行另一种方法才能在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软件包提供了执行该功能的功能read_osm()。要获取图块,请执行lonmap <- bb("London") %>% read_osm(type = "osm"),它会返回一个栅格对象。

2。。另一种替代方法是使用openmap()软件包中的OpenStreetMap,如下所示:

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

3。。当然,get_map()软件包中有ggmap,您现在需要一个API密钥。但是,这不能直接放入tm_shape()中。

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

  

java.lang.NullPointerException

我无法找到解决方案。

4。。因此,我什至使用另一个:getTiles()软件包中的cartography函数。 getTiles仅接受sfsp对象,并返回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) 

哪个给你的?

London Map

能够使用边界框的解决方法是:

lonmap <-  bb("London") %>% 
            matrix(ncol = 2, byrow = TRUE) %>%
                SpatialPoints(proj4string = CRS("+init=epsg:4326")) %>%
                    getTiles(type = "osm")

lndSpatialPolygonsDataFrame。没关系的内容。您可以从这里获取: https://github.com/Robinlovelace/Creating-maps-in-R/blob/master/data/london_sport.shp