Разрешение растра не отображается должным образом
Я вижу странное поведение, когда строю определенный растр. Это затененный рельефный растр, который я приобрел у naturalearthdata.com. Вы можете скачать это здесь.
Я обнаружил, что в зависимости от того, в каком пространственном масштабе я строю растр, он отображает разное разрешение, несмотря на то, что разрешение растра не изменяется.
library(raster)
relief <- raster('GRAY_50M_SR_W.tif')
# let's use Mexico as an example:
library(maptools)
data(wrld_simpl)
mx <- wrld_simpl[which(wrld_simpl@data$NAME == 'Mexico'),]
# Here I create a cropped version of the raster
reliefMX <- crop(relief, mx)
Чтобы проиллюстрировать проблему, я строю график Мексики, чтобы получить экстент карты, затем рисую полный экстент растра, а затем обрезанный растр сверху.
Вы можете видеть, что растры показывают очень разные разрешения, но у них действительно одинаковые разрешения.
plot(mx)
plot(relief, col = grey(0:100/100), legend = FALSE, axes = F, box = F, add=T)
plot(reliefMX, col = grey(0:100/100), legend = FALSE, axes = F, box = F, add=T)
> res(relief)
[1] 0.03333333 0.03333333
> res(reliefMX)
[1] 0.03333333 0.03333333
Есть идеи? Как я могу заставить эти растры правильно отображать?
> sessionInfo()
R version 3.4.0 (2017-04-21)
Platform: x86_64-apple-darwin15.6.0 (64-bit)
Running under: macOS Sierra 10.12.4
Matrix products: default
BLAS: /Library/Frameworks/R.framework/Versions/3.4/Resources/lib/libRblas.0.dylib
LAPACK: /Library/Frameworks/R.framework/Versions/3.4/Resources/lib/libRlapack.dylib
locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] maptools_0.9-2 raster_2.5-8 sp_1.2-4
loaded via a namespace (and not attached):
[1] compiler_3.4.0 rgdal_1.2-7 tools_3.4.0 foreign_0.8-68 Rcpp_0.12.10
[6] grid_3.4.0 lattice_0.20-35
1 ответ
Это зависит от maxpixels
аргумент в призыве к raster::plot
:
maxpixels integer> 0. Максимальное количество ячеек, используемых для графика. Если maxpixels
Когда вы строите "полную" карту, изображение автоматически сокращается, чтобы сэкономить память и сократить время рендеринга. Вы можете изменить значение maxpixels, чтобы получить желаемый уровень "детализации". см. например:
plot(relief, col = grey(0:100/100), legend = FALSE, axes = F, box = F, add=F)
plot(relief, col = grey(0:100/100), legend = FALSE, axes = F, box = F, add=F, maxpixels = 5000000)
Хотя при этом "уровне масштабирования" это не бросается в глаза, второе изображение более детально. Вы можете оценить это, "увеличив" на вашей обрезанной области:
plot(mx)
plot(relief, col = grey(0:100/100), legend = FALSE, axes = F, box = F, add = T, maxpixels = 5000000)
Все еще не "хорошо", как априори обрезанный (так как я все еще не использую "все" пиксели), но уже лучше.
На практике это все компромисс между временем рендеринга / памятью и качеством вывода. Очевидно, что если вам просто нужно построить часть области, гораздо эффективнее обрезать изображение заранее.
НТН.