int main ( int argc, char *argv[] ) { int i, j; int32 fid, gid; int32 ngrids, nentries, nattrs, ndims, nfields; int32 rank, numbertype, sizedim, status, bufsiz; int32 projcode, zonecode, spherecode; int32 xdimsize, ydimsize, origininfo; int16 fillvalue; int32 dims[10], ranks[100], numbertypes[100]; float64 upleft[2], lowright[2], projparm[16]; char strbuf[4096]; char *attrname = NULL, *dimname = NULL; char *fieldlist = NULL, *fieldname = NULL; char *gridlist = NULL, *gridname = NULL, *gridend = NULL; /* check usage */ if ( argc != 2 ) { fprintf( stdout, "Usage: %s file.hdf\n", argv[0] ); fflush( stdout ); return -1; } /* test GDinqgrid() */ ngrids = GDinqgrid( argv[1], strbuf, &bufsiz ); gridlist = strdup( strbuf ); printf( "%s: %i grids (%s)\n", argv[1], (int) ngrids, gridlist ); /* open file */ fid = GDopen( argv[1], DFACC_READ ); /* loop through the grids in gridlist using strtok() */ for ( i = 0; i < ngrids; i++ ) { /* open next grid */ /* unfortunately, can't use strtok for parsing both grids and fields */ gridname = gridlist; gridend = strchr( gridlist, ',' ); if ( gridend != NULL ) { gridlist = gridend + 1; *gridend = '\0'; } /* attach to grid gridname */ gid = GDattach( fid, gridname ); /* get number of entries (fields?) */ nentries = GDnentries( gid, HDFE_NENTDFLD, &bufsiz ); printf( "\nGrid %i: %s (%i entries)\n", i + 1, gridname, (int) nentries ); /* get attribute info */ /* NOTE: not HDF-EOS readable, must use HDF SDreadattr() */ strbuf[0] = '\0'; nattrs = GDinqattrs( gid, strbuf, &bufsiz ); printf( "%i attributes:", (int) nattrs ); for ( attrname = strtok( strbuf, "," ); attrname != NULL; attrname = strtok( NULL, "," ) ) printf( " %s", attrname ); printf( "\n" ); /* try specifically to read background fill value */ /* NOTE: not HDF-EOS readable, must use HDF SDgetfillvalue() */ status = GDreadattr( gid, "_FillValue", &fillvalue ); if ( status != -1 ) printf( "_FillValue = %i\n", fillvalue ); /* else printf( "could not read _FillValue attribute\n" ); */ /* get dimension info */ strbuf[0] = '\0'; ndims = GDinqdims( gid, strbuf, dims ); printf( "GDinqdims: %i dimensions (%s):", (int) ndims, strbuf ); for ( j = 0, dimname = strtok( strbuf, "," ); dimname != NULL; j++, dimname = strtok( NULL, "," ) ) { sizedim = GDdiminfo( gid, dimname ); printf( " %s (%i) %i", dimname, (int) sizedim, (int) dims[j] ); } printf( "\n" ); /* get grid info */ status = GDgridinfo( gid, &xdimsize, &ydimsize, upleft, lowright ); printf( "gridinfo: xdimsize = %i, ydimsize = %i\n", (int) xdimsize, (int) ydimsize ); printf( " UL = (%f, %f)\n", upleft[0], upleft[1] ); printf( " LR = (%f, %f)\n", lowright[0], lowright[1] ); /* get grid origin info (this seems to work) */ status = GDorigininfo( gid, &origininfo ); if ( status == -1 ) printf( "no origin info\n" ); else printf( "origin code = %i\n", (int) origininfo ); /* get list of fields (entries?) */ strbuf[0] = '\0'; nfields = GDinqfields( gid, strbuf, ranks, numbertypes ); fieldlist = strdup( strbuf ); printf( "%i fields (%s):\n", (int) nfields, fieldlist ); printf( "ranks:" ); for ( j = 0; j < nfields; j++ ) printf( " %i", (int) ranks[j] ); printf( "\n" ); printf( "numbertypes:" ); for ( j = 0; j < nfields; j++ ) printf( " %i", (int) numbertypes[j] ); printf( "\n" ); /* loop through field names using strtok() */ for ( fieldname = strtok( fieldlist, "," ); fieldname != NULL; fieldname = strtok( NULL, "," ) ) { /* get field info */ status = GDfieldinfo( gid, fieldname, &rank, dims, &numbertype, strbuf ); printf( "%s: rank %i, numbertype %i, dimlist %s:", fieldname, (int) rank, (int) numbertype, strbuf ); for ( j = 0; j < rank; j++ ) printf( " %i", (int) dims[j] ); printf( "\n" ); } /* get projection parameters */ GDprojinfo( gid, &projcode, &zonecode, &spherecode, projparm ); printf( "projcode %i, zonecode %i, spherecode %i\n", (int) projcode, (int) zonecode, (int) spherecode ); printf( "projparm:" ); for ( j = 0; j < 13; j++ ) printf( " %f", projparm[j] ); printf( " %f %f\n", 0.0, 0.0 ); /* last two proj params are zero */ /* detach from grid */ GDdetach( gid ); } /* close file and quit */ GDclose( fid ); return 0; }
main() { intn status, i; int32 gdfid, GDid1, ndim, nmap, nfld, rk, nt, nflds; int32 dims[32], rank[32], ntype[32]; int32 n, strbufsize, sizes[16], GDid2; int32 xdimsize, ydimsize, dimsize, projcode, zonecode; int32 spherecode; float64 upleftpt[2], lowrightpt[2], projparm[16]; char dimname[1024], fieldlist[1024]; /* * Open the Grid File for read only access */ gdfid = GDopen("GridFile_created_with_hadeos_sample_file_writer_of_HDFEOS2_version_219_or_higher_release.hdf", DFACC_READ); if (gdfid != -1) { /* Attach the grid */ GDid1 = GDattach(gdfid, "UTMGrid"); if (GDid1 == -1) { printf("\t\tError: Cannot attach grid \"UTMGrid\"\n"); return -1; } GDid2 = GDattach(gdfid, "PolarGrid"); if (GDid1 == -1) { printf("\t\tError: Cannot attach grid \"PolarGrid\"\n"); return -1; } ndim = GDinqdims(GDid1, dimname, dims); if (ndim == -1) { printf("\t\tError: Cannot get number of dims for grid \"UTMGrid\"\n"); return -1; } printf("Dimension list (UTMGrid): %s\n", dimname); for (i=0;i<ndim;i++) printf("dim size: %d\n", dims[i]); ndim = GDinqdims(GDid2, dimname, dims); if (ndim == -1) { printf("\t\tError: Cannot get number of dims for grid \"PolarGrid\"\n"); return -1; } printf("Dimension list (PolarGrid): %s\n", dimname); for (i=0;i<ndim;i++) printf("dim size: %d\n", dims[i]); dimsize = GDdiminfo(GDid1, "Time"); if (dimsize == -1) { printf("\t\tError: Cannot get dim info for \"Time\"\n"); return -1; } printf("Size of \"Time\" Array: %d\n", dimsize); dimsize = GDdiminfo(GDid2, "Bands"); if (dimsize == -1) { printf("\t\tError: Cannot get dim info for \"Bands\"\n"); return -1; } printf("Size of \"Bands\" Array: %d\n", dimsize); status = GDgridinfo(GDid1, &xdimsize, &ydimsize, upleftpt, lowrightpt); if (status == -1) { printf("\t\tError: Cannot get grid info for \"UTMGrid\"\n"); return -1; } printf("X dim size, Y dim size (UTMGrid): %d %d\n", xdimsize, ydimsize); printf("Up left pt (UTMGrid): %lf %lf\n", upleftpt[0], upleftpt[1]); printf("Low right pt (UTMGrid): %lf %lf\n", lowrightpt[0], lowrightpt[1]); status = GDgridinfo(GDid2, &xdimsize, &ydimsize, upleftpt, lowrightpt); if (status == -1) { printf("\t\tError: Cannot get grid info for \"PolarGrid\"\n"); return -1; } printf("X dim size, Y dim size (PolarGrid): %d %d\n", xdimsize, ydimsize); printf("Up left pt (PolarGrid): %lf %lf\n", upleftpt[0], upleftpt[1]); printf("Low right pt (PolarGrid): %lf %lf\n", lowrightpt[0], lowrightpt[1]); status = GDprojinfo(GDid1, &projcode, &zonecode, &spherecode, NULL); if (status == -1) { printf("\t\tError: Cannot get projection info for \"UTMGrid\"\n"); return -1; } printf("projcode , zonecode (UTMGrid): %d %d\n", projcode, zonecode); printf("spherecode (UTMGrid): %d\n", spherecode); status = GDprojinfo(GDid2, &projcode, NULL, &spherecode, projparm); if (status == -1) { printf("\t\tError: Cannot get projection info for \"PolarGrid\"\n"); return -1; } printf("projcode (PolarGrid): %d\n", projcode); printf("spherecode (PolarGrid): %d\n", spherecode); for (i=0; i<13; i++) printf("Projection Parameter: %d %lf\n",i,projparm[i]); nflds = GDinqfields(GDid1, fieldlist, rank, ntype); if (nflds == -1) { printf("\t\tError: Cannot inquire field info for \"UTMGrid\"\n"); return -1; } if (nflds != 0) { printf("Data fields (UTMGrid): %s\n", fieldlist); for (i=0;i<nflds;i++) printf("rank type: %d %d\n",rank[i],ntype[i]); } nflds = GDinqfields(GDid2, fieldlist, rank, ntype); if (nflds == -1) { printf("\t\tError: Cannot inquire field info for \"PolarGrid\"\n"); return -1; } if (nflds != 0) { printf("Data fields (PolarGrid): %s\n", fieldlist); for (i=0;i<nflds;i++) printf("rank type: %d %d\n",rank[i],ntype[i]); } status = GDfieldinfo(GDid2, "Spectra", rank, dims, ntype, dimname); if (nflds == -1) { printf("\t\tError: Cannot get field info for field \"Spectra\"\n"); return -1; } printf("Spectra rank dims: %d\n",rank[0]); for (i=0; i<rank[0]; i++) printf("Spectra dims: %d %d\n",i,dims[i]); printf("Spectra dims: %s\n", dimname); n = GDnentries(GDid1, HDFE_NENTDIM, &strbufsize); if (n == -1) { printf("\t\tError: Cannot get dim entries info for field \"UTMGrid\"\n"); return -1; } printf("Number of dimension entries (UTMGrid): %d\n", n); printf("Length of Dimension List (UTMGrid): %d\n", strbufsize); n = GDnentries(GDid1, HDFE_NENTDFLD, &strbufsize); if (n == -1) { printf("\t\tError: Cannot get dim entries info for field \"PolarGrid\"\n"); return -1; } printf("Number of data fields (UTMGrid): %d\n", n); printf("Length of Field List (UTMGrid): %d\n", strbufsize); } GDdetach(GDid1); GDdetach(GDid2); GDclose(gdfid); return 0; }