Hendy,

I suggest you have a look at the recent netcdf driver in trunk, I have
implemented proper handling of multidimension netcdf variables
(T,Z,Y,X). This might be able to resolve your problem - providing you
are able to create a netcdf file with multiple dimensions as this is
not done by the driver.

Basically, if a netcdf file has multiple dimensions (other than X,Y),
the driver creates multiple bands in GDAL  (as before), but when the
file is written back to netcdf, the driver creates a single variable
instead of a variable for each band.  However, this does not work for
gdalwarp directly, but works if using an intermediary VRT file.

See http://trac.osgeo.org/gdal/ticket/2581

On Thu, Mar 8, 2012 at 12:29 AM, Hendy Sumanto <[email protected]> wrote:
> Hi Devs,
>
> I have a geotiff file which contains several datasets, with this I just need 
> to perform one gdalwarp operation on this geotiff file to apply 
> transformation on 6 datasets inside it and the operation produces just one 
> geotiff output file.
>
> If I translate this geotiff file into netcdf file, now I need to perform 6 
> operations to apply transformation on each of the 6 datasets inside it and 
> produces 6 separate netcdf files which is quite cumbersome.

You are confusing GDAL "dataset" with GDAL "band" and netcdf
"variable", which is quite normal. Let me explain:

A "dataset" has its own projection and geotransform(GT), and a number
of bands which are (usually) of the same data type. In your gtiff
example, there is one dataset in WGS84 GCS with multiple bands of the
same type (Float64).

A netcdf file can have many "variables", each with their own
projection/geotransform (lon/lat variable and/or grid_mapping
variable) and data type.  So in many cases a netcdf file can contain
many "datasets" (one for each variable) when opened in GDAL - which
are treated as "subdatasets: (as in your example).

So when translating a multi-band gtiff file to netcdf, the GDAL netcdf
driver creates a variable for each band, so that is why a multi-band
gtiff gets converted to netcdf with many variables (although they are
of the same type and projection/GT).

>
> I am wondering if it is possible to modify the current netCDF driver so that 
> it behaves like geotiff driver when operating on multiple bands (datasets) 
> netcdf file.
> Any opinion on this is really appreciated.

In order for the driver to create a netcdf file which will have
muliple bands (and not sub-datasets) it would have to create a single
variable, with an extra dimension (such as time or height/depth) to
store the mulriple bands in a single variable.
Another option would be to modify the driver to scan for all variables
in Open(), and instead of creating subdatasets create a number of
bands IF they are of the same type and projection.

Either one are rather involved I'm afraid...

>
> This might be a potential issue though:
> When the several datasets have the same data type, it is not an issue but
> when the several datasets have different data type (some datasets are float 
> while some other metadata are integer), then it might be an issue as when we 
> do gdalwarp operation selecting one method of interpolation, that chosen 
> interpolation method will be applied across all data types for all datasets 
> in that single file.

I'm afraid that many file formats do not support bands of different
data types (such as GTiff), which would make it difficult to translate
to/from other formats.
A potential limitation is the  GDALDriver::Create() function which
takes a single data type as argument.
http://www.gdal.org/gdal_drivertut.html#gdal_drivertut_creation

-> although individual drivers do not have to respect that (I think) -
perhaps Even or someone else can comment?

Etienne

>
> =============================
> gdalinfo on the geotiff file: and netcdf file:
> =============================
> Driver: GTiff/GeoTIFF
> Files: multipledataset.tif
> Size is 4, 3
> Coordinate System is:
> GEOGCS["WGS 84",
>    DATUM["WGS_1984",
>        SPHEROID["WGS 84",6378137,298.257223563,
>            AUTHORITY["EPSG","7030"]],
>        AUTHORITY["EPSG","6326"]],
>    PRIMEM["Greenwich",0],
>    UNIT["degree",0.0174532925199433],
>    AUTHORITY["EPSG","4326"]]
> Origin = (141.000867233935992,-34.060737220013806)
> Pixel Size = (0.107999999999998,-0.107999999999998)
> Metadata:
>  AREA_OR_POINT=Area
> Image Structure Metadata:
>  INTERLEAVE=PIXEL
> Corner Coordinates:
> Upper Left  ( 141.0008672, -34.0607372) (141d 0' 3.12"E, 34d 3'38.65"S)
> Lower Left  ( 141.0008672, -34.3847372) (141d 0' 3.12"E, 34d23' 5.05"S)
> Upper Right ( 141.4328672, -34.0607372) (141d25'58.32"E, 34d 3'38.65"S)
> Lower Right ( 141.4328672, -34.3847372) (141d25'58.32"E, 34d23' 5.05"S)
> Center      ( 141.2168672, -34.2227372) (141d13' 0.72"E, 34d13'21.85"S)
> Band 1 Block=4x3 Type=Float64, ColorInterp=Gray
> Band 2 Block=4x3 Type=Float64, ColorInterp=Undefined
> Band 3 Block=4x3 Type=Float64, ColorInterp=Undefined
> Band 4 Block=4x3 Type=Float64, ColorInterp=Undefined
> Band 5 Block=4x3 Type=Float64, ColorInterp=Undefined
> Band 6 Block=4x3 Type=Float64, ColorInterp=Undefined
>
> =============================
> gdalinfo on the netcdf file:
> =============================
> Driver: netCDF/Network Common Data Format
> Files: multipledataset.nc
> Size is 512, 512
> Coordinate System is `'
> Metadata:
>  NC_GLOBAL#Conventions=CF-1.5
>  NC_GLOBAL#GDAL=GDAL 1.9.0, released 2011/12/29
>  NC_GLOBAL#history=Thu Mar 08 14:03:01 2012: GDAL Create( multipledataset.nc, 
> ... )
> Subdatasets:
>  SUBDATASET_1_NAME=NETCDF:"multipledataset.nc":Band1
>  SUBDATASET_1_DESC=[3x4] Band1 (64-bit floating-point)
>  SUBDATASET_2_NAME=NETCDF:"multipledataset.nc":Band2
>  SUBDATASET_2_DESC=[3x4] Band2 (64-bit floating-point)
>  SUBDATASET_3_NAME=NETCDF:"multipledataset.nc":Band3
>  SUBDATASET_3_DESC=[3x4] Band3 (64-bit floating-point)
>  SUBDATASET_4_NAME=NETCDF:"multipledataset.nc":Band4
>  SUBDATASET_4_DESC=[3x4] Band4 (64-bit floating-point)
>  SUBDATASET_5_NAME=NETCDF:"multipledataset.nc":Band5
>  SUBDATASET_5_DESC=[3x4] Band5 (64-bit floating-point)
>  SUBDATASET_6_NAME=NETCDF:"multipledataset.nc":Band6
>  SUBDATASET_6_DESC=[3x4] Band6 (64-bit floating-point)
> Corner Coordinates:
> Upper Left  (    0.0,    0.0)
> Lower Left  (    0.0,  512.0)
> Upper Right (  512.0,    0.0)
> Lower Right (  512.0,  512.0)
> Center      (  256.0,  256.0)
>
>
>
> Regards,
>
> Hendy
> _______________________________________________
> gdal-dev mailing list
> [email protected]
> http://lists.osgeo.org/mailman/listinfo/gdal-dev
_______________________________________________
gdal-dev mailing list
[email protected]
http://lists.osgeo.org/mailman/listinfo/gdal-dev

Reply via email to