Как добавить базовую карту в график tmap в R? - PullRequest
0 голосов
/ 05 июля 2019

Мне интересно, возможно ли добавить базовую карту к карте, созданной в tmap, когда режим tmap настроен на график, а не интерактивный режим.

Это код, который я использовал для создания своей карты

library(sf)

library(spData)

library(tmap)

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

С помощью этого кода я могу просматривать базовую карту, пока она находится на графике, поскольку я просто хотел бы визуализировать Новую Зеландию, а не окружающий океан.

Это карта, которую создает мой код enter image description here

Ответы [ 2 ]

1 голос
/ 10 июля 2019

Существует как минимум два способа:

Использование 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 и добавив стандартный слой базовой карты.

Или альтернативно:

Используя 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.

enter image description here

0 голосов
/ 06 июля 2019

Согласно документации {tmap} функция базовой карты доступна только в режиме просмотра https://www.rdocumentation.org/packages/tmap/versions/2.2/topics/tm_basemap

Это кажется логичным, так как базовая карта приходит не непосредственно из tmap, а из пакета листовки js.

Если вам абсолютно положительно требуется базовая карта для статического графика r, вы сможете получить ее с помощью рабочего процесса {ggplot} / {ggmap} (например, ggmap::get_stamenmap() + обычные методы ggplot).

...