Существует как минимум два способа:
Использование 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()
>
Обратите внимание, что вы должны изменить свою цепочку отображения, если вы хотите создать интерактивную карту веб-браузераудалив этот слой RGB и добавив стандартный слой базовой карты.
Или альтернативно:
Используя 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()
, поскольку значения min-max находятся вне 0-255 для некоторых слоев.Я думаю, это потому, что внутренняя проекционная функция выполняет интерполяцию, которая экстраполирует местами.Исправьте примерно с помощью:
> bg[bg[]>255]=255
> bg[bg[]<0]=0
Тогда вы можете
> tm_shape(bg) + tm_rgb() + tm_shape(NLD_muni) + tm_borders()
отметить, что проекция приводит к неквадратному растру, поэтому вокруг него есть значения NA.