传单速度 - 无法读取属性'数据'为null

时间:2017-10-11 23:44:16

标签: python json leaflet netcdf

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

为了执行风动画,我写下了自己的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输出的结果与demo json文件类似,例如wind-gbr.json(https://github.com/danwild/leaflet-velocity/blob/master/demo/wind-gbr.json

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

enter image description here

enter image description here

有人可以帮我弄清楚错误是什么吗?

谢谢,

我的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

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

1 个答案:

答案 0 :(得分:0)

如果您拒绝错误调用堆栈,则会检查createBuilder函数,该函数会显示如何从您提供的JSON数据中提取uCompvComp

您会看到它使用您的记录标题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条记录,这两个字段的值完全相同:

"parameterNumber": 2,
"parameterCategory": 2

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

通过使用"parameterNumber": 3强制您的一条记录,传单速度脚本不再引发错误并在地图上显示某些内容,尽管它可能不是合适的显示。