2017-02-14 1 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로 변환하는 것과 관련이 없어 보이는 소스 코드와 문서를 탐색하는 것으로 보입니다. 번역은 gdal_to_netcdf() 함수가 convert.register으로 장식 된 작업이어야합니다. 이 경우 resource_gdal에 의해 반환 된 gdal.Dataset 객체는 netcdf를 만들기에 충분한 모든 정보 (지리 참조 연산, 픽셀 크기)를 갖습니다.

관련 문제