WPS公式:三步实现反距离权重插值(IDW)
一、从实际问题说起
前几天做一个项目的时候,有这样一个需求:根据一个测点周边的三个观测站的数据,插值测点位置的数据。
这个问题很典型——气象、地质、环境领域经常会遇到。答案就是反距离权重法。
今天我就用WPS/Excel,手把手教你实现这个算法。
二、反距离权重法是什么?
简单说就是四个字:近大远小。
离目标点越近的站点,对估算值影响越大;越远的站点,影响越小。
数学表达式就是:
估算值 = Σ(权重 × 已知值)权重 = (1/距离) / Σ(1/距离)
三、数据准备
这是我们的基础数据(虚构数据):
|
站点 |
经度° |
纬度° |
PM2.5浓度/μg·m⁻³ |
|
公园站 |
118.78 |
32.04 |
42.5 |
|
学校站 |
118.73 |
32.08 |
38.2 |
|
商业区站 |
118.82 |
32.01 |
56.7 |
需要估算的四个位置:
|
位置 |
经度° |
纬度° |
PM2.5浓度/μg·m⁻³ |
|
居民区A |
118.76 |
32.05 |
? |
|
居民区B |
118.80 |
32.03 |
? |
|
办公区 |
118.75 |
32.06 |
? |
|
交通枢纽 |
118.78 |
32.02 |
? |
Step 1:认识LET函数
LET函数可以定义变量,让复杂公式变得清晰可读:
=LET(变量名1,值1,变量名2,值2,计算结果)
Step 2:计算距离
我们需要自定义一个「距离」函数,计算两点间的距离:
function 距离(a,b){function radians(k){return k*Math.PI/180.0}r=6370 //unit:kmx1=radians(a.Item(1).Value2)y1=radians(a.Item(2).Value2)x2=radians(b.Item(1).Value2)y2=radians(b.Item(2).Value2)d=r*Math.acos(Math.sin(y1)*Math.sin(y2)+Math.cos(y1)*Math.cos(y2)*Math.cos(x1-x2))return d}
参数a,b是两个点,每个点是相邻的两个单元格,一个经度,一个纬度。
Step 3:最终公式
在D8单元格输入:
=LET(ckz,$B$2:$D$4,zxd,B8:C8,dd,BYROW(ckz,LAMBDA(x,距离(x,zxd))),ddr,1/dd,SUM(ddr/SUM(ddr)*TAKE(ckz,,-1)))
公式解读:
-
输入区:固定引用观测站数据(ckz) -
当前点:要估算的位置(zxd) -
距离数组:计算到每个站点的距离(dd) -
权重:距离的倒数(ddr) -
标准化权重:所有权重之和为1
Step 4:拖动填充
选中D8单元格,向下拖动到D11,所有估算值一键生成!
五、计算结果

如果你在工作中也需要处理类似的空间插值问题,这个模板可以直接复制使用。
互动话题:你在工作中遇到过哪些需要复杂计算的场景?欢迎在评论区分享,我们一起探讨解决方案!
夜雨聆风