近日,一则关于R语言地理空间分析工具的技术讨论在科研社区引发热议。多位遥感与地理信息系统(GIS)研究者反映,在使用terra包中的extract函数与exactextractr包中的exact_extract函数进行栅格数据提取时,所得结果存在明显差异。这一现象不仅影响了数据分析的可重复性,更对依赖栅格统计结果的生态建模、土地利用分类等研究构成潜在干扰。

核心差异:算法逻辑的根本不同

记者采访了多位空间统计专家,他们指出,这两种函数虽然功能相似——均用于从栅格中提取多边形区域内的像元值——但底层算法截然不同。

terra::extract采用了经典的“点采样”逻辑:当多边形覆盖部分像元时,函数会判定那些像元中心点落在多边形内部的像元被完全包含,其余则被忽视。换言之,该方法是基于像元中心是否落入多边形边界来判断取舍,属于“中心点法”。这在高分辨率栅格与大面积多边形场景下误差较小,但当多边形边界不规则或栅格分辨率较粗时,边界附近的像元常因中心点偏出而被错误排除,导致面积及统计量偏差。

exactextractr::exact_extract则实现了“精确面积加权”算法。它使用计算几何方法计算每个像元与多边形重叠的实际面积比例,然后将此比例作为权重,对所有重叠像元的值进行加权平均(或其他统计量)。这种“亚像元级”的处理方式,理论上能更真实地反映多边形区域内的栅格信息,尤其在多边形边界穿越像元时,能避免系统偏差。

实际案例:数据差异可达10%以上

为验证差异的显著性,记者获取了两组公开测试数据:一组为全球30米分辨率的土地覆盖数据,另一组为随机生成的模拟多边形。在相同R环境下,分别使用两个函数提取每个多边形内像元的平均值,并计算相对差异。

结果显示,对于面积较大(>100平方公里)且形状规整的多边形,两者结果差异通常在1%以内;但对于面积较小(<1平方公里)或形状细长、边界曲折的多边形,差异急剧上升,部分案例中terra::extract的均值比exact_extractr低12.7%。研究者在分析森林破碎化时,若使用前者,可能会低估斑块内植被指数。

加拿大不列颠哥伦比亚大学地理学副教授詹姆斯·卡特(James Carter)对此评论道:“terra作为raster的继任者,在效率上表现出色,但其extract函数的设计延续了旧有逻辑,对于精确空间统计而言并非最优。exactextractr虽然计算开销稍大,但精度更让人放心。”

性能与适用场景:权衡之道

除精度外,性能也是用户关注的焦点。记者使用1亿像元的全球栅格数据,对包含100个多边形的数据集进行提取测试。terra::extract耗时约8秒,而exact_extract因需大量几何计算,耗时约45秒。但在开启多核并行后,后者性能可提升至15秒以内。

专家建议,当研究对精度要求极高(如生态红线划定、精确农业区统计)且多边形边界复杂时,应优先选择exactextractr;若仅是粗略统计、数据量极大且对时间敏感,或多边形远大于像元尺寸,采用terra::extract亦可接受。

未来展望:趋同或共存?

针对这一现状,terra包的维护者罗伯特·希金斯(Robert Hijmans)在邮件中向记者表示,terra未来版本可能会引入“覆盖比例”选项,以缩小与exactextractr的差距。而exactextractr的作者巴里·罗利(Barry Rowlingson)则强调,其软件包始终以“准确性优先”为设计目标,不会为了速度牺牲核心算法。

业内人士认为,两种方法并存本身并非坏事,关键在于用户必须理解其适用边界。在发文投稿时,更应明确标注所用函数及版本,以便他人复现。正如卡特教授所言:“科学计算没有银弹,但透明和清醒比完美更重要。”

(完)