R中mapview/editMap加载Sentinel栅格影像超限报错(设maxpixels=Inf仍无效)问询
报错本质
4194304字节(4MB)的报错是mapview内置的单块栅格前端传输大小硬阈值,和你在viewRGB里设置的maxpixels参数不在同一个控制链路:
maxpixels仅决定后端从原栅格中抽取多少像素参与渲染计算,不控制单块数据序列化为前端可识别图片时的最终文件大小- 即使将
maxpixels设为Inf,只要序列化后的单块栅格体积超过4MB,就会被拦截触发报错 - 你当前的Sentinel影像总大小约19MB,完全在本地前端的可承载范围内,报错本质是默认阈值设置过严,不是影像本身大到无法渲染
可落地的解决路径
- 修改mapview全局参数,调高默认传输阈值
在脚本开头加载完mapview包后,直接把单块栅格的传输限制从默认4MB调高到匹配当前影像的大小,不需要降低影像分辨率即可解决拦截问题:mapviewOptions( raster.size = 8 * 1024^2, raster.default = TRUE ) - 取消不必要的全像素渲染设置
监督分类勾样本的场景,完全不需要全分辨率影像作为底图——目视判读仅需清晰识别地类边界即可,设置合理的抽稀参数可在不影响勾图精度的前提下大幅压缩渲染体积:points <- viewRGB( Sentinel, r = 4, g = 3, b = 2, maxpixels = 1e6, method = "ngb" ) %>% editMap() - 预先生成勾图专用的降采样底图
Sentinel原生分辨率为10m,直接加载全分辨率版本会生成远超人类视觉识别极限的冗余像素。可先对原影像做聚合降采样,生成适合屏幕判读的低分辨率底图,勾取的样本点保持原投影坐标对齐,可直接匹配原分辨率影像开展分类,不影响训练样本的空间精度:# 聚合生成30m分辨率的勾图底图 Sentinel_coarse <- raster::aggregate(Sentinel, fact = 3, fun = mean) # 加载编辑功能 points <- viewRGB(Sentinel_coarse, r = 4, g = 3, b = 2, maxpixels = Inf) %>% editMap() - 分块处理大区域影像
若Sentinel影像覆盖范围极广,可先按研究子区裁剪为多个小尺寸栅格,分块加载、分块勾取训练样本,既规避大小限制,也能提升地图操作的流畅度。
内容的提问来源于stack exchange,提问作者Johnny
相关产品推荐
相关产品推荐

