1、原始數據如圖,
2、將原始的氣象站點數據按照地理研究區域提取出來。如圖:
3、利用python程序進行處理,代碼如下:
4、運行得到結果如下圖
5、說明:
此步驟是將帶有缺省值的原始降水數據處理成帶有行列號、坐標和降水值的csv格式數據,方便后期進行降水數據的分析與使用。代碼部分為開頭聲明的作者,使用者需聲明版權。
具體代碼如下:
1 import numpy 2 import csv 3 import pandas as pd 4 import numpy as np 5 6 7 def txt_to_array(values): 8 return np.array([[i for i in filter(None,data[0].split(' '))] for data in values]) 9 def header_to_dict(header): 10 header=header[0] 11 header=np.array([[i for i in filter(None,data.split(' '))] for data in header]) 12 13 header_dict={} 14 for key,values in header: 15 header_dict[str(key)]=eval(values) 16 return header_dict 17 def index_to_coor(row,col,x_start,y_start,cell_size): 18 '''[summary] 19 20 [description] 21 22 Arguments: 23 row {[type]} -- [行號] 24 col {[type]} -- [列號] 25 x_start {[type]} -- [左上角x] 26 y_start {[type]} -- [左上角y] 27 cell_size {[type]} -- [網格size] 28 ''' 29 return x_start+col*cell_size+0.25,y_start-row*cell_size+0.25 30 31 def csv_write(path,data,header_dict): 32 df=open(path,'w',newline='') 33 csv_writer=csv.writer(df) 34 header=['row','col','x','y','values'] 35 csv_writer.writerow(header) 36 #l:left,u:up,r:right,d:down 37 x_l_u_start=header_dict["XLLCORNER"] 38 y_l_u_start=header_dict['YLLCORNER']+(header_dict['NROWS']-1)*header_dict['CELLSIZE'] 39 for row in range(int(header_dict['NROWS'])): 40 for col in range(int(header_dict['NCOLS'])): 41 x,y=index_to_coor(row,col,x_l_u_start,y_l_u_start,header_dict['CELLSIZE']) 42 csv_writer.writerow([row,col,x,y,data[row,col]]) 43 df.close() 44 45 46 if __name__=="__main__": 47 #路徑名必須是英文的 48 #只需要改這兩個文件,其他不需要改 49 #filename選擇任意一個降雨txt數據 50 filename=r'E:\rainfull\data\SURF_CLI_CHN_PRE_MON_GRID_0.5-196101.txt' 51 #導出生成每行一個各網點數據,經緯度,行列編號等 52 out_path=r'E:\rainfull\SURF_CLI_CHN_PRE_MON_GRID_0.5-201601.csv' 53 54 a=pd.read_csv(filename,header=list(range(6))) 55 header=a.columns.values 56 header_dict=header_to_dict(header) 57 '''['NCOLS', 'NROWS', 'XLLCORNER', 'YLLCORNER', 'CELLSIZE', 'NODATA_VALUE']''' 58 a=a.values 59 a=txt_to_array(a) 60 csv_write(out_path,a,header_dict)