当前位置:   article > 正文

考虑海拔的IDW的插值_idw结合dem插值

idw结合dem插值
  1. import pandas as pd
  2. from geopy.distance import vincenty
  3. import numpy as np
  4. loworhigh = 'high' # 输入需要哪段 ,low 代表第一段,high代表第二段。
  5. year = 1951 # 是否要选择年份
  6. dem = pd.read_table('F:/AAA/PG-T-LAPSE-COR/lldem_syr',header=None) # 流域模拟点高程文件
  7. sta_df = pd.read_csv('F:/AAA/P-LAPSE/STA-SYR-PRECP-data-interpolate.csv') # 降水文件
  8. sta_df = sta_df[sta_df['year']==year]
  9. sta_df['point'] = [(x, y) for x, y in zip(sta_df['lat'], sta_df['lon'])]
  10. sta_df = sta_df.groupby('point').mean().reset_index()
  11. dem.columns = ['lat','lon','ele']
  12. dem['point'] = [(x, y) for x, y in zip(dem['lat'], dem['lon'])]
  13. lapse_low = [0.057,0.057,0.078,0.08,0.058,0.021,0.019,0.013,0.008,0.063,0.067,0.074] # 插值梯度1
  14. lapse_high = [-0.012,-0.014,-0.022,-0.023,-0.01,0.021,0.019,0.013,0.008,-0.008,-0.01,-0.01] # 插值梯度2
  15. dem_low = dem[dem['ele']<=1256] # 拿出小于1300的模拟格子,用第一段插值。
  16. dem_high = dem[dem['ele']>1256]
  17. sta_df_low = sta_df[sta_df['ele']<=1256] # 拿出小于1256的实测点
  18. sta_df_high = sta_df[sta_df['ele']>1256] # 拿出大于1256的实测点
  19. months = ['one','two','three','four','five','six','seven','eight','nine','ten','eleven','december']
  20. months_latlon = ['lat','lon','one','two','three','four','five','six','seven','eight','nine','ten','eleven','december']
  21. a = []
  22. b = []
  23. junk = pd.DataFrame()
  24. result_annual = pd.DataFrame(np.zeros((2,14)),columns=months_latlon)
  25. if loworhigh=='high':
  26. sta_df_run = sta_df_high
  27. dem_run = dem_high
  28. dem_run = dem_run.reset_index()
  29. lapse_run = lapse_high
  30. else:
  31. sta_df_run =sta_df_low
  32. dem_run = dem_low
  33. dem_run = dem_run.reset_index()
  34. lapse_run = lapse_low
  35. for point in dem_run['point'].values:
  36. for point_sta in sta_df_run['point'].values:
  37. dist = vincenty(point, point_sta).km
  38. print(point)
  39. print(point_sta)
  40. a.append(dist)
  41. b.append(point_sta)
  42. lat = point[0]
  43. lon = point[1]
  44. grid_ele = dem_run['ele'][(dem_run['lat']==lat)&(dem_run['lon']==lon)] # 预测点所在海拔
  45. junk['distance'] = a
  46. junk['sta_point'] = b
  47. junk.sort_values(by = 'distance',inplace=True)
  48. nearst_point = junk['sta_point'][0:3].values # 选取附近三个实测点,根据实际需要调整
  49. sta_out_point = sta_df_run[sta_df_run['point'].isin(nearst_point)].reset_index() # 拿出实测点,准备计算此网格
  50. sta_out_point['ele_grid'] = int(grid_ele)
  51. a = []
  52. b = []
  53. sta_out_point['sub'] = (sta_out_point['ele_grid'] - sta_out_point['ele'])
  54. sta_out_point['out1'] = sta_out_point['one']+sta_out_point['sub']*lapse_run[0]
  55. sta_out_point['out2'] = sta_out_point['two']+sta_out_point['sub']*lapse_run[1]
  56. sta_out_point['out3'] = sta_out_point['three']+sta_out_point['sub']*lapse_run[2]
  57. sta_out_point['out4'] = sta_out_point['four']+sta_out_point['sub']*lapse_run[3]
  58. sta_out_point['out5'] = sta_out_point['five']+sta_out_point['sub']*lapse_run[4]
  59. sta_out_point['out6'] = sta_out_point['six']+sta_out_point['sub']*lapse_run[5]
  60. sta_out_point['out7'] = sta_out_point['seven']+sta_out_point['sub']*lapse_run[6]
  61. sta_out_point['out8'] = sta_out_point['eight']+sta_out_point['sub']*lapse_run[7]
  62. sta_out_point['out9'] = sta_out_point['nine']+sta_out_point['sub']*lapse_run[8]
  63. sta_out_point['out10'] = sta_out_point['ten']+sta_out_point['sub']*lapse_run[9]
  64. sta_out_point['out11'] = sta_out_point['eleven']+sta_out_point['sub']*lapse_run[10]
  65. sta_out_point['out12'] =sta_out_point['december'] +sta_out_point['sub']*lapse_run[11]
  66. sta_out_point['lat_grid'] = point[0]
  67. sta_out_point['lon_grid'] = point[1]
  68. sta_out_point = sta_out_point[['lat_grid','lon_grid','out1','out2','out3','out4','out5','out6','out7','out8','out9','out10','out11','out12']]
  69. sta_out_point[sta_out_point <= 0] = 1
  70. sta_out_point.columns = ['lat','lon','one','two','three','four','five','six','seven','eight','nine','ten','eleven','december'] # 输出习惯的名字
  71. a = []
  72. b = []
  73. f = pd.concat([result_annual,sta_out_point],axis=0,ignore_index=True)
  74. result_annual = f
  75. f = f.groupby(['lat','lon']).mean().reset_index(0)
  76. f.to_csv('F:/AAA/P-LAPSE/inter-monthly2.csv') # 输出文件

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/秋刀鱼在做梦/article/detail/821606
推荐阅读
相关标签
  

闽ICP备14008679号