python反距离权重法_先从IDW(反距离权重)插值开始吧

cb56bb0c6635e0c4551f420a2dba26dd.png

IDW方法是一个很不错,很方便,很快。。。(自行百度)的方法。至少我必须要用到。。。

首先附上idw插值~:

7275afb466d3c4fe809711542651172f.png

我写的不是很好,如果你们想要更优化的可以再找找其他的版本。

然后

正确的补缺idw插值代码:

pmfile= np.genfromtxt(r'D:Thesisxiamenwrwpmn3kripm.csv', delimiter=',',skip_header=True,encoding='gbk')

testpoint2 = np.genfromtxt(r'D:Thesispoint2.csv',delimiter=',',skip_header=True)

ds = gdal.Open(r'D:Thesissamrast1.tif')

bandg = ds.GetRasterBand(1)

elevationg = bandg.ReadAsArray()

[cols, rows] = elevationg.shape

format = "GTiff"#5

driver = gdal.GetDriverByName(format)#6

pmkrigrid=[]

pmdata=np.array(pmfile)

ii,jj,pm=pmdata[:,3],pmdata[:,5],pmdata[:,9]

pmkridata=np.column_stack((ii,jj,pm)).astype('float')

for i in range(168):

listpm=[]

listpm=pmkridata[i*31:(i+1)*31]

listpm1=[]

for j in range(len(listpm)):

if listpm[j,2]!=999999:

listpm1.append(listpm[j])

listpm1=np.array(listpm1).reshape(len(listpm1),3).astype('float')

idw_tree = test_idw.tree(listpm1[:,0:2], listpm1[:,2])

pre = idw_tree(testpoint2)

# kriging = test_gaussian.SimpleKriging(training_data=listpm1)

# predict = kriging.predict(test_data=testpoint, l=.5, sigma=.2)

#pre=list(predict)

#pre.reverse()#这里面有个顺序问题,我一直没搞懂,到底要不要逆序

pmkrigrid.append(pre)

pe=(np.transpose(np.transpose(pre)[::-1])[::-1])###转置转置

pr=pe.reshape(58,52)[::-1]##转置之后可以把数据恢复到正确的位置

outDataRaster = driver.Create(r'D:Thesisxiamenpmpmidw1pm'+str(i)+'.tif', rows, cols, 1, gdal.GDT_Int16)

outDataRaster.SetGeoTransform(ds.GetGeoTransform())

outDataRaster.SetProjection(ds.GetProjection())

outDataRaster.GetRasterBand(1).WriteArray(pr)

outDataRaster.FlushCache()

del outDataRaster

pmkrigrid=np.array(pmkrigrid).reshape(168*3016,)

datapreall=pd.read_csv(r'D:/Thesis/xiamen/pm/datapre/data168pre.csv',encoding='gbk')

datapreall['pmidw']=pd.DataFrame({'pmidw':pmkrigrid})

datapreall.to_csv(r'D:/Thesis/xiamen/pm/datapre/data168preidw.csv',mode='a',index=False,encoding='gbk')

import matplotlib.pyplot as plt

maiac=np.array(datapreall)[:,23]

maiachoy0=maiac[:3016][::-1]

mreshape=maiachoy0.reshape(58,52)

plt.figure(figsize=(5,5)) ##此处是显示

plt.imshow(mreshape,cmap='hsv')

afe95d5e399a0a7cf02fd5fc15fb42c7.png

文章写的不好,最后打个广告公众号(一个有趣的灵魂W)

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值