R中调用projectExtent报cannot do this transformation错误如何解决?
核心错误点
- 你创建
empty栅格时,使用raster::raster()默认生成的是**WGS84经纬度坐标系(单位:度)**的空栅格,但你直接把摩尔威德投影(+proj=moll,单位:米)的边界框坐标赋值给了它的extent,相当于把米级坐标直接当成经纬度度数处理,你赋值的extent数值(xmin371250)远大于经纬度坐标系的合理范围(经度±180,纬度±90),导致投影转换时绝大多数坐标都属于无效值,触发报错。 projectExtent的逻辑是对输入栅格的extent做坐标转换,你输入的empty本身CRS和extent就不匹配,自然无法完成转换。
正确操作步骤
第一步:正确定义和边界框CRS匹配的空栅格
不要用默认的raster()生成对象,直接从你的边界框对象继承CRS:
# 直接从原始边界框对象提取extent和CRS,不需要手动赋值 empty <- raster(ms[[ix]]$inverse_mask) # 确认extent和CRS和你的边界框一致 extent(empty) <- extent(ms[[ix]]$inverse_mask) crs(empty) <- crs(ms[[ix]]$inverse_mask)
第二步:将空栅格投影到目标CLC栅格的CRS
empty_proj <- projectExtent(empty, crs = crs(CLCF))
第三步:用投影后的extent裁剪CLC栅格
clc_crop <- crop(CLCF, empty_proj)
批量处理100个边界框的优化方案
如果需要处理100个边界框,可以用lapply批量执行上述逻辑,避免重复代码:
crop_results <- lapply(1:length(ms), function(ix){ bbox <- ms[[ix]]$inverse_mask empty <- raster(bbox) extent(empty) <- extent(bbox) crs(empty) <- crs(bbox) empty_proj <- projectExtent(empty, crs(CLCF)) return(crop(CLCF, empty_proj)) })
内容的提问来源于stack exchange,提问作者Florian Oswald
相关产品推荐
相关产品推荐

