- 氣象測站資料空間內插Python工具,支援多種內插方法與彈性網格配置。
- create_station_spatial_interpolation.py [v1.0]
本工具解決傳統網格內插程式的限制,提供以下功能:
- 彈性的網格位置與解析度配置
- 支援多種氣象變數(不僅限於降水資料)
- 多種內插方法與效能最佳化
- 多時間點批次處理
- UTC時間轉換功能
- 預覽視覺化輸出
- 彈性網格系統:使用者自訂經緯度範圍與解析度
- 多變數支援:支援任何具有經緯度與數值結構的氣象變數
- 時間序列處理:多時間點批次處理
- UTC轉換:自動本地時間轉UTC時間
- 1.1 Linear:使用 scipy.griddata 的標準線性內插
- 1.2 Cubic:三次樣條內插(Cubic spline interpolation),產生平滑內插結果
- 1.3 Nearest:最近鄰內插,適用於類別資料
- 2 IDW (距離反比權重法):基於距離的權重方法,可設定參數截段距離與權重次方。本程序直接計算,非使用import。
- 3 Kriging:使用 pykrige.ok.OrdinaryKriging 的球面變異函數模型的克利金法
-
- 測站基本資訊檔案(.txt格式)
-
- 觀測資料檔案(.txt格式)
- CSV:內插使用的測站資料
- NetCDF:內插網格資料(CF相容,支援GrADS)
- PNG:測站觀測與內插網格的比較視覺化
# 核心科學計算套件
pip install --user pandas numpy xarray scipy
# 安裝工作包 netCDF C 函式庫
pip3 install --user netCDF4
# 地理空間與視覺化
pip install --user matplotlib cartopy
# 選用:克利金內插法
pip install --user pykrige- Python 3.10.12
- OS: Ubuntu 22.04.3 LTS
python3 create_station_spatial_interpolation.py \
-i ./data_station.txt \
-i2 ./data_20250730_pp01.txt \
-V PP01 \
-T 2025073001,2025073002,2025073003station_id longitude latitude elevation
AAAAAA 120.7811 25.0711 756.0
BBBBBB 121.4419 24.9975 10.0
...
station_id yyyymmddhh TX01 PP01
AAAAAA 2025073001 28.9 0.0
AAAAAA 2025073002 29.0 0.0
...
BBBBBB 2025073001 27.9 10.0
BBBBBB 2025073002 28.0 20.0
...
output/
├── csv/
│ ├── integrated_station_data_PP01_2025073001.csv
│ └── integrated_station_data_PP01_... ....png
├── nc/
│ ├── interpolated_PP01_2025073001.nc
│ └── interpolated_PP01_... ....nc
└── png/
├── interpolation_visualization_PP01_2025073001_linear.png
└── interpolation_visualization_PP01_... ..._linear.png
-i, --input:測站基本資訊檔案路徑-i2, --input2:觀測資料檔案路徑
| 參數 | 預設值 | 說明 |
|---|---|---|
-V, --variable |
PP01 | 目標變數名稱 (變數名需對應觀測資料檔案) |
-T, --time |
2025073001,2025073002 | 目標時間(逗號分隔) |
-LL, --lonlat |
120.0,122.12,21.9,25.4 | 網格邊界(經度最小,經度最大,緯度最小,緯度最大) |
-n, --output_dir |
./output | 輸出目錄路徑 |
-r, --resolution |
0.03 | 網格解析度(度) |
-m, --method |
linear | 內插方法 |
--idw_power |
3.0 | IDW冪次參數 |
--max_distance |
50.0 | IDW最大搜尋距離(公里) |
-nd, --no_vis |
False | 停用視覺化輸出 |
-utc, --utc_offset |
None | UTC轉換偏移量(+N或-N小時)(轉輸出檔名為_UTC) |
NetCDF檔案符合CF標準並與GrADS相容。時間序列使用template選項:
dset ^./output/interpolated_PP01_%y4%m2%d2%h2.nc
options template
dtype netcdf
undef NaN
xdef 72 linear 120.0 0.03
ydef 114 linear 21.9 0.03
zdef 1 linear 1 1
tdef 24 linear 01Z30jul2025 1hr
vars 1
PP01=>r1 1 y,x [mm/h]
endvars
- 測站-觀測資料匹配驗證
- 支援24小時格式,hh為24時轉換至次日00:00
- 不同時區的彈性UTC轉換
# 線性內插法
python3 create_station_spatial_interpolation.py -i data_station.txt -i2 data_20250730_pp01.txt -V PP01 -T 2025073001,2025073002,2025073003 -m linear -n output_linear
# IDW內插法
python3 create_station_spatial_interpolation.py -i data_station.txt -i2 data_20250730_pp01.txt -V PP01 -T 2025073001,2025073002,2025073003 -m idw --idw_power 3 --max_distance 30 -n output_idw# 後處理範例 - 3小時累積降水
grads -bcl "sample_plot.gs"- 注意原始檔案是否有遺失值,在進入本程式前需要先預處理遺失值為NaN。
- 不同來源的資料使用的不同遺失值。
- 使用時需確保測站資訊檔案為最新且完整, 因為中央氣象署自動測站網隨時間變化,有新增/退役測站。
- 確認基本資訊與觀測資料間的測站代碼匹配
- 測站資料通常使用當地時間(例如中央氣象署自動站使用UTC+8),與其他的結果比較時要注意對應的時間。
- 大型區域建議先使用較粗解析度測試