如何在 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
只接受 sf
或 sp
对象和 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
我正在使用
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
只接受 sf
或 sp
对象和 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