gpt4 book ai didi

r - 如何将 basemap 添加到 R 中的 tmap 图中?

转载 作者:行者123 更新时间:2023-12-03 18:05:45 26 4
gpt4 key购买 nike

我想知道当 tmap 模式设置为绘图而不是交互模式时,是否可以将 basemap 添加到 tmap 中制作的 map 。

这是我用来制作 map 的代码

library(sf)

library(spData)

library(tmap)

tm_shape(nz) +
tm_polygons(
"Median_income",
palette = "Blues",
n = 10,
) +
tm_layout(basemaps = leaflet::providers$OpenStreetMap)

使用此代码,我可以在 Plot 中查看 basemap ,因为我只想可视化新西兰而不是周围的海洋。

这是我的代码生成的 map enter image description here

最佳答案

至少有两种方式:

使用 tmaptools :

通过 read_osm函数在 tmaptools它使用 OpenStreetMap包获得瓷砖。这里的例子直接从文档中撕下来:

> library(tmaptools)
> library(tmap)
Warning message:
replacing previous import ‘gdalUtils::gdal_rasterize’ by ‘sf::gdal_rasterize’ when loading ‘mapview’
> data(NLD_muni)
> osm_NLD <- read_osm(NLD_muni, ext=1.1)
> tm_shape(osm_NLD) + tm_rgb()
>

map image

请注意,如果要通过删除此 rgb 图层并添加标准 basemap 图层来制作交互式 Web 浏览器 map ,则应修改映射链。

或者:

使用 rosm .

调用 osm.raster获取给定空间对象的光栅图像。将栅格重新投影到源坐标系。
> bg = osm.raster(NLD_muni)
Zoom: 8
> bg
class : RasterBrick
dimensions : 1046, 1074, 1123404, 3 (nrow, ncol, ncell, nlayers)
resolution : 373, 372 (x, y)
extent : -28610.91, 371991.1, 303384.1, 692496.1 (xmin, xmax, ymin, ymax)
crs : +init=epsg:28992 +proj=sterea +lat_0=52.15616055555555 +lon_0=5.38763888888889 +k=0.9999079 +x_0=155000 +y_0=463000 +ellps=bessel +towgs84=565.4171,50.3319,465.5524,-0.398957388243134,0.343987817378283,-1.87740163998045,4.0725 +units=m +no_defs
source : memory
names : layer.1, layer.2, layer.3
min values : -6.848990, 41.156879, 1.062173
max values : 266.3927, 290.5641, 263.3747

这不适用于 tm_rgb()然而,因为某些层的最小值-最大值在 0-255 之外。我认为这是因为内部使用的投影函数正在执行在某些地方进行外推的插值。大致修复:
> bg[bg[]>255]=255
> bg[bg[]<0]=0

然后你可以
> tm_shape(bg) + tm_rgb() + tm_shape(NLD_muni) + tm_borders()

请注意,投影结果是非方形栅格,因此它周围有 NA 值。

enter image description here

关于r - 如何将 basemap 添加到 R 中的 tmap 图中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56903210/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com