R语言栅格计算后如何保留原始分辨率与坐标参考系
问题根源
你将栅格对象转为普通数组时,所有和空间相关的元数据(坐标参考系、空间范围、分辨率、图层名等)都会被剥离,仅保留栅格的像元值,因此将数组转回栅格对象时,R会自动填充默认的空间属性,才会出现CRS丢失、范围变为0-1的问题。
解决方案
方案1:直接操作栅格对象(最推荐,无空间属性丢失风险)
不需要转为数组,直接在原始RasterStack上替换值即可,全程保留所有空间属性:
output_stack1 <- input_stack1 # 直接替换-3000为NA output_stack1[output_stack1 == -3000] <- NA
操作完成后output_stack1的所有空间属性、图层名均和input_stack1完全一致,无需额外处理。
方案2:必须转数组处理时,手动复制空间元数据
如果你的处理逻辑必须经过数组转换步骤,可在转回栅格后手动将原始栅格的空间属性赋值给输出对象:
# 保留你原有的数组处理逻辑 try <- array(input_stack1, dim=c(13056, 4846, 2,1)) try[try==-3000]<-NA input_array<-aperm(try, c(2,1,3,4)) output_stack1<-stack(brick(array(input_array, c(4846, 13056, 2)))) # 手动复制空间属性 # 复制坐标参考系 crs(output_stack1) <- crs(input_stack1) # 复制空间范围 extent(output_stack1) <- extent(input_stack1) # 复制图层名称(可选,根据需要选择是否执行) names(output_stack1) <- names(input_stack1)
注:你示例中输出栅格的最小值从-3000变为-2000属于数组处理逻辑的问题,和空间属性丢失无关,需要自行核对数组转换、转置步骤的代码是否符合你的预期。
内容的提问来源于stack exchange,提问作者Yiqian Zeng
相关产品推荐
相关产品推荐

