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 数据中提取 uComp
和 vComp
。
您会看到它使用您的记录 header parameterCategory
和 parameterNumber
字段来确定记录数据是否应分配给 uComp
或 vComp
:
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 脚本不再抛出错误并在地图上显示某些内容,尽管它可能不是适当的显示。
我正在使用 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 数据中提取 uComp
和 vComp
。
您会看到它使用您的记录 header parameterCategory
和 parameterNumber
字段来确定记录数据是否应分配给 uComp
或 vComp
:
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 脚本不再抛出错误并在地图上显示某些内容,尽管它可能不是适当的显示。