我正在尝试使用Python geojson模块构建一个GeoJSON文件,该模块包含一个常规的二维网格点,其“属性”与地球物理变量(速度,温度等)相关联。该信息来自netcdf文件。
所以代码是这样的:
from netCDF4 import Dataset
import numpy as np
import geojson
ncfile = Dataset('20140925-0332-n19.nc', 'r')
u = ncfile.variables['Ug'][:,:] # [T,Z,Y,X]
v = ncfile.variables['Vg'][:,:]
lat = ncfile.variables['lat'][:]
lon = ncfile.variables['lon'][:]
features=[]
for i in range(0,len(lat)):
for j in range(0,len(lon)):
coords = (lon[j],lat[i])
features.append(geojson.Feature(geometry = geojson.Point(coords),properties={"u":u[i,j],"v":v[i,j]}))
在这种情况下,该点在“属性”对象中具有速度分量。我收到的错误是在features.append()行上,并带有以下消息:
*ValueError: -5.4989638 is not JSON compliant number*
,它对应于经度值。有人能解释一下我的错误吗?
答案 0 :(得分:1)
我找到了解决方案。 geojson模块仅支持标准Python数据类,而numpy最多可扩展到24种类型。不幸的是,netCDF4模块需要numpy来从netCDF文件加载数组。我解决了使用numpy.asscalar()方法解释here。所以在上面的代码中例如:
coords = (lon[j],lat[i])
替换为
coords = (np.asscalar(lon[j]),np.asscalar(lat[i]))
也适用于来自netCDF文件的其余变量。 无论如何,感谢Bret给你的评论,它为我提供了解决问题的线索。
答案 1 :(得分:1)
我使用简单的转换为浮动,它消除了这个错误,而不需要numpy。
coords = (float(lon[j]),float(lat[i]))