terra提取分类栅格值偏移错误及extract函数效率咨询
问题解答
分类栅格提取值偏移1的原因
- 第一是活跃类别设置代码错误:你写的
activeCat(Veg) <- is.factor("CONDENSED")存在逻辑错误,is.factor("CONDENSED")是判断字符串"CONDENSED"是否为因子类型,返回值永远是FALSE,转为数值后为0,相当于你把活跃类别设置为了索引为0的COUNT字段,并没有启用你需要的CONDENSED类别字段。正确的设置方式为直接传入字段名:activeCat(Veg) <- "CONDENSED"。 - 第二是老旧版本terra的已知bug:你使用的terra 1.4.11是2021年发布的老旧版本,该版本对带属性表的GTiff栅格处理存在索引映射问题:内部默认类别索引从0开始计数,而你在ArcGIS中设置的
CONDENSED字段值从1开始,就会出现提取结果整体偏移1的问题。升级到terra最新稳定版即可修复该问题。
提取效率问题
terra::extract()接收Raster*和sf对象时,会在内部自动转换为SpatRaster和SpatVector格式再执行提取,效率依然远高于raster::extract(),尤其是在点数量多、栅格尺寸大的场景下,terra底层C++实现的性能优势会更明显。不过更推荐显式将数据转为terra原生的Spat*格式再执行操作,避免自动转换过程中出现属性丢失的异常。
内容的提问来源于stack exchange,提问作者Charlie_J
相关产品推荐
相关产品推荐

