gfs风场示意图_沙丘链的延伸方向与盛行风向的关系

(6) 2024-09-20 11:01:01

前言

首先说下地图风场的实现方式:

  1. 下载全球GFS数据
    https://nomads.ncep.noaa.gov/cgi-bin/filter_gfs_0p25.pl

  2. GFS风场数据解析
    https://github.com/cambecc/grib2json

  3. GFS风场展示
    https://github.com/Esri/wind-js

效果如下
gfs风场示意图_沙丘链的延伸方向与盛行风向的关系 (https://mushiming.com/)  第1张

问题描述

如果用全球风场是没有问题的,但是如果是下载的是区域GFS数据,风场显示的时候就会乱掉,比如下载的是中国区域的GFS,整个风场效果就变乱掉:
gfs风场示意图_沙丘链的延伸方向与盛行风向的关系 (https://mushiming.com/)  第2张
gfs风场示意图_沙丘链的延伸方向与盛行风向的关系 (https://mushiming.com/)  第3张
不仅坐标和中国区域没对上,仔细看风的方向也是正好相反的。

分析

仔细看Grib2JSON转换后的json文件,发现scanMode这个参数全球和区域是不一样的,全球时是0,表示从北到南,从东到西;区域时是64,表示从南到北,从东到西。
再看windy.js中buildGrid方法中也只是考虑到了Scan mode为0的情况:

 var buildGrid = function(data, callback) { 
    var builder = createBuilder(data); var header = builder.header; var λ0 = header.lo1, φ0 = header.la1; // the grid's origin (e.g., 0.0E, 90.0N) var Δλ = header.dx, Δφ = header.dy; // distance between grid points (e.g., 2.5 deg lon, 2.5 deg lat) var ni = header.nx, nj = header.ny; // number of grid points W-E and N-S (e.g., 144 x 73) var date = new Date(header.refTime); date.setHours(date.getHours() + header.forecastTime); // Scan mode 0 assumed. Longitude increases from λ0, and latitude decreases from φ0. // http://www.nco.ncep.noaa.gov/pmb/docs/grib2/grib2_table3-4.shtml var grid = [], p = 0; var isContinuous = Math.floor(ni * Δλ) >= 360; for (var j = 0; j < nj; j++) { 
    var row = []; for (var i = 0; i < ni; i++, p++) { 
    row[i] = builder.data(p); } if (isContinuous) { 
    // For wrapped grids, duplicate first column as last column to simplify interpolation logic row.push(row[0]); } grid[j] = row; } 

解决

知道了以上的原因,其实将windy.js稍微改动下即可

  • 修改最大纬度的获取
var λ0 = header.lo1, φ0 = header.scanMode == 0 ? header.la1 : header.la2; 
  • 修改grid的填充顺序
 if (header.scanMode == 0) { 
    grid[j] = row; } else { 
    grid[nj - j] = row; } 

效果:
gfs风场示意图_沙丘链的延伸方向与盛行风向的关系 (https://mushiming.com/)  第4张

Grib2Json解析

如果不知道怎么用Grib2Json的,可以查看另外一篇博客:
JAVA在线调用Grib2Json

其他可能需要参考的网站

wgrib2: wgrib for GRIB-2
GRIB tools examples
NCEP WMO GRIB2 Documentation
Scripting grib_filter on NCEP’s nomads server

THE END

发表回复