Changeset 11296

Show
Ignore:
Timestamp:
04/19/07 18:38:41 (2 years ago)
Author:
dnadeau
Message:

Correct creating subdataset if there is only "1" 2 dimensional variable in the file

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/gdal/frmts/netcdf/netcdfdataset.cpp

    r11237 r11296  
    14771477    char         attname[NC_MAX_NAME]; 
    14781478    int          ndims, nvars, ngatts, unlimdimid; 
     1479    int          nCount=0; 
     1480    int          nVarID; 
    14791481 
    14801482/* -------------------------------------------------------------------- */ 
     
    15751577    poDS->ReadAttributes( cdfid, NC_GLOBAL );    
    15761578 
    1577     if( ( !EQUAL( poDS->papszName[0], "NETCDF" ) ) ) { 
     1579/* -------------------------------------------------------------------- */ 
     1580/*  Verify if only one variable has 2 dimensions                        */ 
     1581/* -------------------------------------------------------------------- */ 
     1582    for ( j = 0; j < nvars; j++ ) { 
     1583 
     1584        nc_inq_varndims ( cdfid, j, &ndims ); 
     1585        if( ndims >= 2 ) { 
     1586            nVarID=j; 
     1587            nCount++; 
     1588        } 
     1589    } 
     1590 
     1591/* -------------------------------------------------------------------- */ 
     1592/*  We have more than one variable with 2 dimensions in the file        */ 
     1593/* -------------------------------------------------------------------- */ 
     1594    if( (nCount > 1) && ( !EQUAL( poDS->papszName[0], "NETCDF" ) ) ) { 
    15781595        poDS->CreateSubDatasetList( ); 
    15791596        poDS->SetMetadata( poDS->papszMetadata ); 
    15801597        return( poDS ); 
    15811598    } 
    1582  
     1599/* -------------------------------------------------------------------- */ 
     1600/*  If we have only one varialbe                                        */ 
     1601/*  Generate a new filename with format NETCDF:"filename":subdataset    */ 
     1602/* -------------------------------------------------------------------- */ 
     1603    if( ( nCount == 1 )  && ( !EQUAL( poDS->papszName[0], "NETCDF" ) ) ){ 
     1604        CPLFree( poDS->pszFilename ); 
     1605        CSLDestroy( poDS->papszName ); 
     1606 
     1607        char pszNETCDFFilename[NC_MAX_NAME]; 
     1608        char szVarName[NC_MAX_NAME]; 
     1609 
     1610        nc_inq_varname( cdfid, nVarID, szVarName); 
     1611 
     1612        strcpy( pszNETCDFFilename,"NETCDF:" ); 
     1613        strcat( pszNETCDFFilename,poOpenInfo->pszFilename ); 
     1614        strcat( pszNETCDFFilename,":" ); 
     1615        strcat( pszNETCDFFilename, szVarName ); 
     1616 
     1617        CPLDebug( "GDAL_netCDF", "NETCDFFilename = %s\n",  
     1618                  pszNETCDFFilename); 
     1619 
     1620        poDS->papszName = CSLTokenizeString2(  pszNETCDFFilename, 
     1621                                               ":", CSLT_HONOURSTRINGS ); 
     1622        poDS->pszFilename = strdup( pszNETCDFFilename ); 
     1623 
     1624 
     1625    }    
    15831626 
    15841627/* -------------------------------------------------------------------- */