2017-02-14 9 views
0

GDALデータセット(空間情報付きラスタ)をNetCDFファイルに変換する機能を使用してodoライブラリを拡張しようとしています。odo.resource(ソース)からodo.resource(ターゲット)にデータを取得

gdalデータセットの読み込みは問題ありません。しかし、netcdfの作成段階では、gdalデータセットのメタデータ(odo.odo(source、target)を呼び出すときにまだわからないメタデータ)が必要です。どうすればこれを達成できますか?

これまでの私のコードの短いバージョン:

import odo 
from odo import resource, append 
import gdal 
import netCDF4 as nc4 
import numpy as np 

@resource.register('.+\.tif') 
def resource_gdal(uri, **kwargs): 
    ds = gdal.Open(uri) 

    # metadata I need to transfer to netcdf 
    b = ds.GetGeoTransform() #bbox, interval 

    return ds 


@resource.register('.+\.nc') 
def resource_netcdf(uri, dshape=None, **kwargs): 
    ds = nc4.Dataset(uri,'w') 

    # create lat lon dimensions and variables 
    ds.createDimension(lat, dshape[0].val) 
    ds.createDimension(lon, dshape[1].val) 
    lat = ds.createVariable('lat','f4', ('lat',)) 
    lon = ds.createVariable('lon','f4', ('lon',)) 

    # create a range from the **gdal metadata** 
    lat_array = np.arange(dshape[0].val)*b[1]+b[0] 
    lon_array = np.arange(dshape[1].val)*b[5]+b[3] 

    # assign the range to the netcdf variable 
    lat[:] = lat_array 
    lon[:] = lon_array 

    # create the variable which will hold the gdal data 
    data = ds.createVariable('data', 'f4', ('lat', 'lon',)) 

    return data 


@append.register(nc4.Variable, gdal.Dataset) 
def append_gdal_to_nc4(tgt, src, **kwargs): 
    arr = src.ReadAsArray() 
    tgt[:] = arr 

    return tgt 

ありがとう!

答えて

0

odoでの経験はあまりありませんが、ソースコードとドキュメントを閲覧すると、resource_netcdf()はgdalデータをnetcdfに変換する必要がありません。翻訳は、convert.registerで修飾されたgdal_to_netcdf()関数の仕事でなければなりません。そのような場合、resource_gdalによって返されるgdal.Datasetオブジェクトは、netcdfを作成するのに十分な情報(ジオリファレンス、ピクセルサイズ)をすべて持っています。

関連する問題