Exemple #1
0
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;
}
Exemple #2
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;
}