基于python的IDW插值方法(一)(网转)
原文 https://blog.csdn.net/clearlove990/article/details/119984256
明确一下什么是IDW(反距离权重)插值算法。
给出以下定义:
以待估计点为中心,确立一个范围,在这个范围内的所有已知点, 都将以自身到待估计点的距离的反比作为权重,对待估计点造成影响,这就是IDW(反距离权重)插值算法。
我们可以很清楚的看到,在进行IDW插值算法时,必要的参数只有待估计点,点,,及其值(样本值)。另外,我们给出一个幂参数来控制已知点对内插值的影响。其中,幂参数是一个正实数,默认值为2。(一般0.5到3的值可获得最合理的结果)。
下面给出权重公式:
其中,为某已知点到待估计点的距离,
为幂参数。
在这些条件下,我定义了以下代码:
1 # 求距离反比平方之和 2 def getDsum(x,y,list=[]): 3 dsum = 0 4 for points in pointlist: 5 point_x = points[0] 6 point_y = points[1] 7 8 d = math.sqrt((point_x - x) ** 2 + (point_y - y) ** 2) 9 dsum = (1 / d)**2 + dsum 10 return dsum
1 # 求解各已知点的权重 2 def getWeight(x,y,list=[]): 3 dsum = getDsum(x,y,list) 4 weight = [] 5 for points in list: 6 dlist=[] 7 point_x = points[0] 8 point_y = points[1] 9 10 d = math.sqrt((point_x - x) ** 2 + (point_y - y) ** 2) 11 dlist.append(d) 12 wei = ((1/d)**2)/dsum 13 weight.append(wei) 14 return weight
1 # 求得待估计点 2 def IDW_self(x,y,weight,list = []): 3 i = 0 4 z=0 5 for points in list: 6 point_z = points[2] 7 z = point_z*weight[i]+z 8 i=i+1 9 Value = "点({0},{1})的插值为{2}".format(x,y,z) 10 return Value
接着给出以下参数(pointlist中的点参数对应的是点的xy坐标及样本值):
1 pointlist = [(1,2,20),(2,3,26),(3,4,23)] 2 x=0 3 y=0 4 weight = getWeight(x,y,pointlist) 5 pointvalue = IDW_self(x,y,weight,pointlist) 6 print pointvalue
结果如图:
1 点(0,0)的插值为21.8349514563
至此,对于单个待估计点的IDW插值已经完成,接下来要思考的,是如何实现遍历包含所有样本点在内的extent的所有点,并使用IDW插值算法得到所有待估计点的值;以及如何将这些点,在arcgis上建立栅格模型并进行显示。
————————————————
版权声明:本文为CSDN博主「大鱼的奇妙冒险」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/clearlove990/article/details/119984256
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)