构建geojson文件的“不符合JSON标准的数字”

问题描述 投票:1回答:2

我正在尝试使用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*

它对应于经度值。有人可以解释一下可能出错的地方吗?

json python-3.x gis geojson
2个回答
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
投票

我使用简单的转换浮动,它消除了这个错误,而不需要numpy。

coords = (float(lon[j]),float(lat[i]))
© www.soinside.com 2019 - 2024. All rights reserved.