光栅分辨率无法正常显示

时间:2017-05-16 04:34:49

标签: r raster r-raster

当我绘制某个光栅时,我看到了一些奇怪的行为。 这是我从naturalearthdata.com获得的阴影浮雕光栅。You can download it here.

我发现根据我绘制光栅的空间比例,它会绘制不同的分辨率,尽管光栅的分辨率没有改变。

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

enter image description here

有什么想法吗?如何让这些栅格正确显示?

> 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 个答案:

答案 0 :(得分:0)

这取决于maxpixels调用中的raster::plot参数:

  

maxpixels   整数&gt; 0.用于绘图的最大单元格数。如果maxpixels&lt; ncell(x),在绘图之前使用sampleRegular。如果gridded = TRUE,则可以忽略maxpixels以获得更大的样本

绘制“完整”地图时,图像会自动下采样以节省内存并缩短渲染时间。您可以更改“maxpixels”的值以获得所需的“细节”级别。例如:

plot(relief, col = grey(0:100/100), legend = FALSE, axes = F, box = F, add=F)

enter image description here

plot(relief, col = grey(0:100/100), legend = FALSE, axes = F, box = F, add=F, maxpixels = 5000000)

enter image description here

虽然在这个“缩放级别”不明显,但第二个图像更加详细。您可以通过“放大”裁剪区域来欣赏这一点:

plot(mx)
plot(relief, col = grey(0:100/100), legend = FALSE, axes = F, box = F, add = T, maxpixels = 5000000)

enter image description here

仍然没有“好”作为先验裁剪的(因为我还没有使用“全部”像素),但已经更好了。

在实践中,在渲染时间/内存和输出质量之间进行折衷。显然,如果你只需要绘制一部分区域,预先裁剪图像效率会更高。

HTH。