leaflet-velocity - 无法读取 属性 'data' of null

leaflet-velocity - cannot read property 'data' of null

我正在使用 leaflet-velocity.js 制作风动画,可以在 npm 或 github (https://github.com/danwild/leaflet-velocity) 中找到我自己的大气模型输出 (WRF) ).

为了执行风动画,我写下了自己的 python 代码,将模型输出从 netCDF 格式转换为 json 格式。代码如下所示

import os, sys, json, numpy as np
from glob import glob
from netCDF4 import Dataset, num2date, date2num

#- header templete
header = {  
    'parameterUnit': 'm.s-1',
    'parameterNumber': 2,
    'dx': 1.0,
    'dy': 1.0,
    'parameterNumberName': 'eastward_wind',
    'la1': 90.0,
    'la2': -90.0,
    'parameterCategory': 2,
    'lo1': 0.0,
    'nx': 360,
    'ny': 181,
    'refTime': '2016-04-30T06:00:00.000Z',
    'lo2': 359.0,
    }

lists = glob('TXGLO.surf_wind4json.nc')
ntimes= 8
for fid in lists[:1]:
    nc = Dataset(fid)
    tm = nc.variables['Times'][:]
    dim1, dim2 = nc.variables['XLAT'][0].shape
    nPoints = dim1*dim2
    lat= np.flipud(nc.variables['XLAT'][0]).flatten().tolist()
    lon= np.flipud(nc.variables['XLONG'][0]+360.).flatten().tolist()
    header['nx'] = dim1
    header['ny'] = dim2
    header['la1']= lat[0]
    header['la2']= lat[-1]
    header['lo1']= lon[0]
    header['lo2']= lon[-1]
    numPoints = nPoints
    for num, tim in enumerate(tm[:1]):
        refTime = ''.join(tim).replace('_',' ')
        print(' Processing file : '+fid+' , time : '+str(num)+' '+refTime)
        header['refTime'] = refTime
        with open('cresm_atmos_surf.json','w') as outfile:  
            outfile.write('[')
            #-  U10
            header['parameterNumberName'] = 'eastward_wind'
            u10 = np.flipud(nc.variables['U10'][num]).flatten().tolist()
            json.dump({'data':u10,'header':header}, outfile)
            outfile.write(',')
            #- V10
            header['parameterNumberName'] = 'northward_wind'
            v10 = np.flipud(nc.variables['V10'][num]).flatten().tolist()
            json.dump({'data':v10,'header':header}, outfile)
            outfile.write(']')

json输出的结果和演示json文件类似,比如wind-gbr.json(https://github.com/danwild/leaflet-velocity/blob/master/demo/wind-gbr.json)

完成转换后,我刷新了网页,发现读取 json 文件时出错。

谁能帮我弄清楚错误是什么?

谢谢,

我的 netcdf 文件:https://www.dropbox.com/s/tmyrrinraetvcxs/TXGLO.surf_wind4json.nc?dl=0

我的 json 文件: https://www.dropbox.com/s/huiffld05zmldrs/cresm_atmos_surf.json?dl=0

演示 json 文件: https://www.dropbox.com/s/17pr3vdkl1v3bq7/wind_gbr.json?dl=0

如果您退出错误调用堆栈,您将检查 createBuilder 函数,该函数向您展示它如何从您提供的 JSON 数据中提取 uCompvComp

您会看到它使用您的记录 header parameterCategoryparameterNumber 字段来确定记录数据是否应分配给 uCompvComp:

switch (record.header.parameterCategory + "," + record.header.parameterNumber) {
  case "1,2":
  case "2,2":
    uComp = record;
    break;
  case "1,3":
  case "2,3":
    vComp = record;
    break;
  default:
    scalar = record;
}

您的数据中似乎有 2 条记录,这 2 个字段的值完全相同:

"parameterNumber": 2,
"parameterCategory": 2

因此您似乎没有提供 vComp 类型记录。

通过使用 "parameterNumber": 3 强制您的记录之一,leaflet-velocity 脚本不再抛出错误并在地图上显示某些内容,尽管它可能不是适当的显示。