光栅分辨率显示不正确

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。

【讨论】:

以上是关于光栅分辨率显示不正确的主要内容,如果未能解决你的问题,请参考以下文章

解决Mac外接显示器分辨率不正确问题

FlashDevelop 调试器窗口显示不正确的分辨率

为啥聚合/裁剪后我的光栅文件大小会增加?

如图所示,无法将 gplot 保存到 R 中的文件

光栅尺测量数据的修正

光栅尺测量数据的修正