添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

反距离加权法又称N-P法,是非规则分布点变成规则分布点常用的网格化方法之一。该方法的基本思想是离所估算的网格点距离越近的离散点对该网格点的影响越大,越远的离散点影响越小,甚至可以认为没有影响。在估算某一网格点的值时,假设离网格点最近的N个点对其有影响,那么这N个点对该网格点的影响与他们之间的距离成反比。

首先,需要计算所有离散数据点与所求网格点的距离,在二维平面空间,离散点(xi,yi)到网格(A,B)的距离Di为:

然后,需要找出离网格点(A,B)最近的N个离散点的距离,则网格点(A,B)上的估算值为:

其中, 为离散点 上的观测值, 为网格点(A, B)上的估算值, 为参与计算的样本个数, 为插值点与第 个站点间的距离, 是距离的幂,一般取2。

根据一些离散点(包含x,y,z坐标),定义一个包含着些离散点的的M*N的网格,求网格上的没一点的高程。

设网格点的x,y分别为lon,lat。离散采样点的集合为:lst

代码实现:

# lon和lat分别是要插值的点的x,y
# lst是已有数据的数组,结构为:[[x1,y1,z1],[x2,y2,z2],...]
# 返回值是插值点的高程
def interpolation(lon, lat, lst):
    p0 = [lon, lat]
    sum0 = 0
    sum1 = 0
    temp = []
    # 遍历获取该点距离所有采样点的距离
    for point in lst:
        if lon == point[0] and lat == point[1]:
            return point[2]
        Di = distance(p0, point)
        # new出来一个对象,不然会改变原来lst的值
        ptn = copy.deepcopy(point)
        ptn.append(Di)
        temp.append(ptn)
    # 根据上面ptn.append()的值由小到大排序
    temp1 = sorted(temp, key=lambda point: point[3])
    # 遍历排序的前15个点,根据公式求出sum0 and sum1
    for point in temp1[0:15]:
        sum0 += point[2] / math.pow(point[3], P)
        sum1 += 1 / math.pow(point[3], P)
    return sum0 / sum1
# 计算两点间的距离
def distance(p, pi):
    dis = (p[0] - pi[0]) * (p[0] - pi[0]) + (p[1] - pi[1]) * (p[1] - pi[1])
    m_result = math.sqrt(dis)
    return m_result

其中P=2。

三维效果图

定义: 反距离加权法又称N-P法,是非规则分布点变成规则分布点常用的网格化方法之一。该方法的基本思想是离所估算的网格点距离越近的离散点对该网格点的影响越大,越远的离散点影响越小,甚至可以认为没有影响。在估算某一网格点的值时,假设离网格点最近的N个点对其有影响,那么这N个点对该网格点的影响与他们之间的距离成反比。 首先,需要计算所有离散数据点与所求网格点的距离,在二维...
本文我们将介绍IDW(距离加权法(Inverse Distance Weighted))插值Python计算方法及插值结果的可视化绘制过程。主要涉及的知识点如下: IDW简介 自定义Python代码计算空间IDW 分别使用plotnine、Basemap进行IDW插值结果可视化绘制 IDW简介 距离权重 (IDW)插值假设:彼此距离较近的事物要比彼此距离较远的事物更相似。当为任何未测量的位置预测值时,距离权重法会采用预测位置周围的测量值与距离预测位置较远的测量值相..
前言: 研一,刚开始学python,初衷其实是想以arcgis软件上没有的插值方法进行空间插值,奈何人菜瘾大,只能先从基础的插值方法开始,这次的IDW插值算是一个开始吧,我会慢慢记录自己的成长 拉格朗日插值多项式:当节点数n较大时,拉格朗日插值多项式的次数较高,可能出现不一致的收敛情况,而且计算复杂。随着样点增加,高次插值会带来误差的震动现象称为龙格现象。 分段插值:虽然收敛,但光滑性较差。 样条插值:样条插值是使用一种名为样条的特...
python调用c/c++代码以及解决ctypes.ArgumentError: argument 1: class 'TypeError': Don't know how to convert 10936