python按照给定坐标点进行插值并绘制等值线图
import matplotlib.pyplot as plt
import numpy as np
import math
import pandas as pd
import io
import copy
def get_gap(gap):
gap = str(gap)
gap_len = len(gap)
gap_list = list(map(int, gap))
top_value = int(gap_list[0])
gap_bottom = top_value * (10 ** (gap_len - 1))
gap_mid = gap_bottom + int((10 ** (gap_len - 1) / 2))
gap_top = (top_value + 1) * (10 ** (gap_len - 1))
gap_value = [gap_bottom, gap_mid, gap_top]
gap_bottom_dis = abs(int(gap) - gap_bottom)
gap_mid_dis = abs(int(gap) - gap_mid)
gap_top_dis = abs(int(gap) - gap_top)
range_list = [gap_bottom_dis, gap_mid_dis, gap_top_dis]
min_i = 0
for i in range(len(range_list)):
if range_list[i] < range_list[min_i]:
min_i = i
final_gap = gap_value[min_i]
return int(final_gap)
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)
ptn = copy.deepcopy(point)
ptn = list(ptn)
ptn.append(Di)
temp.append(ptn)
temp1 = sorted(temp, key=lambda point: point[3])
for point in temp1[0:15]:
sum0 += point[2] / math.pow(point[3], 2)
sum1 += 1 / math.pow(point[3], 2)
return sum0 / sum1
def distance(p, pi):
dis = (p[0] - pi[0]) * (p[0] - pi[0]) + (p[1] - pi[1]) * (p[1]