Невозможно наложить полигон на растровый слой, используя уровень - PullRequest
0 голосов
/ 10 апреля 2020

Я пытаюсь создать карту, наложив файл формы многоугольника на растровый слой с помощью пакета rasterVis. Я могу выполнить эту функцию без проблем с функцией plot () в растровом пакете, но я бы хотел настроить цвета. По некоторым причинам levelplot () не позволяет мне накладывать растры и полигоны. Моей первой попыткой было:

план уровня (растр, поле = FALSE, col.regions = viridis, at = seq (0,1, len = 100) + layer (sp.polygons (polygon))))

и я получаю эти ошибки: Ошибка в +.trellis (seq (0, 1, len = 100), слой (sp.polygons (polygon))): наследует (объект, "решетка") не TRUE

Затем я попытался использовать latticeExtra:

levelplot (растр, margin = FALSE, col.regions = viridis, at = seq (0,1, len = 100) + latticeExtra :: layer (sp .polygon (polygon)))

Я получаю ту же ошибку, что и выше. Я также пробовал другие предложенные решения, такие как запуск строки dev.off () и перезапуск R, и я получаю:

Ошибка в dev.off (): не удается выключить устройство 1 (нулевое устройство)

И, наконец, я попытался отключить ggplot2, но я все еще получаю то же сообщение об ошибке «шпалеры». Я не знаю, как интерпретировать это сообщение об ошибке. Я дважды проверил, что оба файла имеют одинаковую CSR на случай, если это проблема. Также обратите внимание, что растровый слой наносится без проблем, добавление многоугольника приводит к ошибке. Есть идеи?

1 Ответ

0 голосов
/ 10 апреля 2020

Это должно работать:

p <- levelplot(raster, layers=1, margin = FALSE, col.regions=viridis, at=seq(0,1, len=100))
p + layer(sp.polygons(polygon, lwd=0.8, col='darkgray'))

Вот воспроизводимый пример:

library(sp)
#get raster
data(meuse.grid)
coordinates(meuse.grid) = ~x+y
proj4string(meuse.grid) <- CRS("+init=epsg:28992")
gridded(meuse.grid) = TRUE
meuse.r<- raster(meuse.grid)  
#get polygon
data("meuse.area")
meuse.area = SpatialPolygons(list(Polygons(list(Polygon(meuse.area)), "area")))

#plot
library(rasterVis)
library(viridis)
p <- levelplot(meuse.r, layers=1, margin = FALSE, col.regions=viridis, at=seq(0,1, len=100))
p + layer(sp.polygons(meuse.area, lwd=0.8, col='darkgray'))

enter image description here

...