为什么terra::cellSize()与raster::area()的栅格像元面积估算结果不同?
问题解答
一、二者返回值不一致的原因
raster::area()采用简化近似算法:计算每个像元面积时,仅代入像元中心点的纬度值,先计算该纬度下1度经度对应的地表距离、再乘以1度纬度对应的固定距离,二者乘积作为单个像元的面积。这种算法没有考虑像元南北边界纬度不同带来的经度跨度距离差异,属于快速近似计算。terra::cellSize()/terra::expanse()采用精确球面多边形计算:将每个像元视作由四个顶点坐标围成的球面四边形,基于默认的WGS84椭球参数,直接计算椭球面上该四边形的真实面积,没有做近似简化,计算精度更高。
二、哪个估算结果准确性更高
terra的计算结果准确性更高,你测试的1°×1°区域(北纬42°43°、西经84°83°)的理论真实面积和terra返回的9130.795 km²一致,raster的结果因为近似算法产生了约42 km²的误差,误差量级和栅格覆盖的纬度范围正相关:栅格南北跨度越大,raster::area()的累计误差就越高。
补充建议
如果要更新历史面积估算结果,直接迁移到terra的计算逻辑即可,terra作为raster的官方替代包,核心计算逻辑都经过了rspatial团队的校验,精度和运算效率都优于旧版raster包的实现。
内容的提问来源于stack exchange,提问作者Christopher L. Crawford
相关产品推荐
相关产品推荐

