【问题标题】:How to get a shape of a searched map in tmap如何在 tmap 中获取已搜索地图的形状
【发布时间】:2019-03-08 17:54:39
【问题描述】:

我正在使用

library(tmap)
qtm("London")

要获取伦敦地图,但找不到将其定型的方法?

tm_shape

否则,我只能在视图模式下,而不是在绘图模式下。

【问题讨论】:

    标签: r tmap


    【解决方案1】:

    是的,没错。您必须以另一种方式在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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-08-13
      • 1970-01-01
      • 1970-01-01
      • 2022-12-03
      • 2017-06-15
      • 1970-01-01
      • 2017-06-25
      相关资源
      最近更新 更多