--- netcdfdataset.cpp.orig 2011-04-15 14:49:17.000000000 -0300 +++ netcdfdataset.cpp 2011-04-15 19:48:33.000000000 -0300 @@ -331,8 +331,61 @@ Taken += result * Sum; } + /* etiennesky fix for netCDF import/export */ +/* -------------------------------------------------------------------- */ +/* Get all other metadata */ +/* -------------------------------------------------------------------- */ + int nAtt=0; + //char attstr[NC_MAX_NAME]; + nc_type atttype=NC_NAT; + size_t attlen; + float fval; + double dval; + int ival; + + nc_inq_varnatts( poDS->cdfid, nZId, &nAtt ); + for( i=0; i < nAtt ; i++ ) { + status = nc_inq_attname( poDS->cdfid, nZId, + i, szTemp); + status = nc_inq_att( poDS->cdfid, nZId, + szTemp, &atttype, &attlen); + if(strcmp(szTemp,_FillValue) ==0) continue; + // sprintf( szMetaTemp,"NETCDF_%s",szTemp); + sprintf( szMetaTemp,"%s",szTemp); + switch( atttype ) { + case NC_CHAR: + char *fillc; + fillc = (char *) CPLCalloc( attlen+1, sizeof(char) ); + status=nc_get_att_text( poDS->cdfid, nZId, + szTemp, fillc ); + SetMetadataItem( szMetaTemp, fillc ); + CPLFree(fillc); + break; + case NC_INT: + status = nc_get_att_int( poDS->cdfid, nZId, + szTemp, &ival ); + sprintf( szTemp,"%d",ival); + SetMetadataItem( szMetaTemp, szTemp ); + break; + case NC_FLOAT: + status = nc_get_att_float( poDS->cdfid, nZId, + szTemp, &fval ); + sprintf( szTemp,"%g",fval); + SetMetadataItem( szMetaTemp, szTemp ); + break; + case NC_DOUBLE: + status = nc_get_att_double( poDS->cdfid, nZId, + szTemp, &dval ); + sprintf( szTemp,"%g",dval); + SetMetadataItem( szMetaTemp, szTemp ); + break; + default: + break; + } + } + return CE_None; } @@ -1373,6 +1426,12 @@ //oSRS.SetWellKnownGeogCS( "WGS84" ); } } + /* etiennesky fix for netCDF import/export */ + /* no grid_mapping value - not a GDAL netcdf */ + else if( EQUAL( szDimNameX,"lon" ) ) { + oSRS.SetWellKnownGeogCS( "WGS84" ); + } + /* -------------------------------------------------------------------- */ /* Read projection coordinates */ /* -------------------------------------------------------------------- */ @@ -2689,6 +2748,13 @@ hBand = GDALGetRasterBand( poSrcDS, i ); sprintf( szBandName, "Band%d", i ); + /* etiennesky fix for netCDF import/export */ + /* Check if a variable names exists in the NETCDF_VARNAME item*/ + const char* tmpBandName = poSrcBand->GetMetadataItem("NETCDF_VARNAME"); + if( tmpBandName != NULL) { + strcpy( szBandName, tmpBandName ); + poSrcBand->SetMetadataItem("NETCDF_VARNAME",""); + } eDT = poSrcDS->GetRasterBand(i)->GetRasterDataType(); anBandDims[0] = nYDimID;