2016-06-13 4 views
1

私はPython geojsonモジュールを使用してGeoJSONファイルを構築しようとしています。物理的な変数(速度、温度、等)。情報はnetcdfファイルから得られます。"JSON準拠の番号ではありません" geojsonファイルを構築する

ように、コードは、そのようなものである:ここで

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

あなたのエラーに対応するにGeoJSONモジュール内のコードのみがここに発見された:https://github.com/frewsxcv/python-geojson/blob/bfea4a814632806761093eafcd50de27ec013de7/geojson/geometry.py#L35-L40 'クラス(ベロシティ).__ name__'を試して、ベロシティ番号のクラスを確認できますか? – bretmattingly

+0

すべては、クラス "numpy.float32"のnumpy配列です。 – user1259970

答えて

1

解決策が見つかりました。 geojsonモジュールは標準のPythonデータクラスのみをサポートし、numpyは最大24種類まで拡張できます。残念なことにnetCDF4モジュールはnetCDFファイルから配列を読み込むためにnumpyを必要とします。私はhereのようにnumpy.asscalar()メソッドを使って解決しました。ですから、例えば、上記のコードで:

coords = (lon[j],lat[i]) 

coords = (np.asscalar(lon[j]),np.asscalar(lat[i])) 

に置き換えられ、netCDFファイルから来る変数の残りのためにも機能します。 とにかく、私にそれを解決する手がかりを与えるあなたのコメントのためのBretありがとう。

0

私はfloatに変換するだけで、numpyを必要とせずにそのエラーを排除しました。

coords = (float(lon[j]),float(lat[i])) 
関連する問題