光栅分辨率显示不正确
Posted
技术标签:
【中文标题】光栅分辨率显示不正确【英文标题】:raster resolution not displaying properly 【发布时间】:2017-05-16 04:34:49 【问题描述】:我在绘制某个栅格时看到了一些奇怪的行为。 这是我从 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
有什么想法吗?如何让这些栅格正确显示?
> 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】:这取决于对raster::plot
的调用中的maxpixels
参数:
最大像素 整数 > 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)
仍然不是“好”,因为先验裁剪了一个(因为我仍然没有使用“所有”像素),但已经更好了。
实际上,这完全是渲染时间/内存和输出质量之间的折衷。显然,如果您只需要绘制区域的一部分,那么预先裁剪图像会更有效。
HTH。
【讨论】:
以上是关于光栅分辨率显示不正确的主要内容,如果未能解决你的问题,请参考以下文章