/*************************************************************/ /* */ /* print_raster_attribute - Displays the contents of a */ /* SE_RASTERATTR structure, fetched from a */ /* raster column. */ /* */ /* connection - The connection */ /* handle. */ /* stream - The data stream */ /* raster_attrib - the raster */ /* attribute structure. */ /* */ /*************************************************************/ void print_raster_attribute (SE_CONNECTION connection, SE_STREAM stream, SE_RASTERATTR raster_attrib) { SE_RASBANDINFO *rasband_list, rasband_info; SE_RASTERINFO raster_info; SE_RASCONSTRAINT rasconstraint; SE_RASTILEINFO rastile_info; SE_INTERPOLATION_TYPE pyramid_interpolation; SE_COMPRESSION_TYPE compression_type; LONG rc, band, number_of_bands, *band_numbers, band_width, band_height, max_level, tile_width, tile_height, pixel_type, raster_id, rascol_id, level, band_id, row, column, length, tiles, skip_level1, pixels_per_tile, ioffset_x,ioffset_y; CHAR raster_description[SE_MAX_DESCRIPTION_LEN], raster_column[] = "RASTER", name_column[] = "NAME"; LFLOAT eoffset_x, eoffset_y; SHORT max_tiles, i; SE_ENVELOPE raster_env; UCHAR *pixel_buffer=NULL; TILEENV tileenv; /* Initialize the SE_RASCONSTRAINT structure. */ rc = SE_rasconstraint_create (&rasconstraint); check_error (rc, NULL, NULL, "SE_rasconstraint_create"); /* Initialize the SE_RASTILEINFO structure. */ rc = SE_rastileinfo_create (&rastile_info); check_error (rc, NULL, NULL, "SE_rastileinfo_create"); /* Print the compression type. */ rc = SE_rasterattr_get_compression_type ( raster_attrib, &compression_type); check_error (rc, NULL, stream, "SE_rasterattr_get_compression_type"); printf("\n"); switch(compression_type) { case SE_COMPRESSION_NONE: printf("Image compression type is NONE \n"); break; case SE_COMPRESSION_LZ77: printf("Image compression type is LZ77\n"); break; case SE_COMPRESSION_JPEG: printf("Image compression type is JPEG\n"); break; case SE_COMPRESSION_JP2: printf("Image compression type is JP2000\n"); break; default: printf("Unknown image type \n"); break; } /* Display the image extent. */ rc = SE_rasterattr_get_extent (raster_attrib, &raster_env); check_error (rc, NULL, NULL, "SE_rasterattr_get_extent"); printf ("Image extent minimum X: %lf \n",raster_env.minx); printf ("Image extent minimum Y: %lf \n",raster_env.miny); printf ("Image extent maximum X: %lf \n",raster_env.maxx); printf ("Image extent maximum Y: %lf \n",raster_env.maxy); /* Display the image size. */ rc = SE_rasterattr_get_image_size (raster_attrib, &band_width, &band_height, &number_of_bands); check_error (rc, NULL, NULL, "SE_rasterattr_get_image_size"); printf ("Image size band width: %d\n",band_width); printf ("Image size band height: %d\n",band_height); printf ("Image size number of bands: %d\n",number_of_bands); /* Display the pixel type */ rc = SE_rasterattr_get_pixel_type (raster_attrib, &pixel_type); check_error (rc, NULL, NULL, "SE_rasterattr_get_pixel_type"); print_pixel_type (pixel_type); /* Display raster column id. */ rc = SE_rasterattr_get_rascol_id (raster_attrib, &rascol_id); check_error (rc, NULL, NULL, "SE_rasterattr_get_rasterband_info_list"); printf ("Raster column ID: %d\n",rascol_id); /* Display the raster id */ rc = SE_rasterattr_get_raster_id (raster_attrib, &raster_id); check_error (rc, NULL, NULL, "SE_rasterattr_get_raster_id"); printf("Raster ID: %d\n\n",raster_id); /* Display the raster info */ rc = SE_rasterattr_get_raster_info (raster_attrib, &raster_info); check_error (rc, NULL, NULL, "SE_rasterattr_get_raster_info"); rc = SE_rasterinfo_get_description (raster_info, raster_description); check_error (rc, NULL, NULL, "SE_rasterinfo_get_description"); /* Display the rasterband info. */ for (band=1; band<= number_of_bands; band++) { rc = SE_rasterattr_get_rasterband_info ( raster_attrib, &rasband_info, band); check_error (rc, NULL, NULL, "SE_rasterattr_get_rasterband_info"); print_rasterbandinfo (connection, rasband_info); } /* Display the rasterband info from a list. */ rc = SE_rasterattr_get_rasterband_info_list ( raster_attrib, &rasband_list, &number_of_bands); check_error (rc, NULL, NULL, "SE_rasterattr_get_rasterband_info_list"); for (band=0; band< number_of_bands; band++) print_rasterbandinfo (connection, rasband_list[band]); /* Display the number of bands. */ rc = SE_rasterattr_get_num_bands (raster_attrib, &number_of_bands); check_error (rc, NULL, NULL, "SE_rasterattr_get_num_bands"); printf ("Number of raster bands: %d\n",number_of_bands); rc = SE_rasterattr_get_tile_size ( raster_attrib, &tile_width, &tile_height); check_error (rc, NULL, NULL, "SE_rasterattr_get_tile_size"); pixels_per_tile = tile_width * tile_height; /* Display the pyramid info */ rc = SE_rasterattr_get_pyramid_info ( raster_attrib, &max_level, &skip_level1, &pyramid_interpolation); check_error (rc, NULL, NULL, "SE_rasterattr_get_pyramid_info"); printf("\nPyramid info \n"); if (skip_level1) printf ("Skipping the first level.\n"); else printf("Do not skip the first level.\n"); printf ("Max Level: %d \n",max_level); switch (pyramid_interpolation){ case SE_INTERPOLATION_NONE: printf ("The pyramid does not have an interpolation method.\n"); break; case SE_INTERPOLATION_NEAREST: printf ("The pyramid is interpolated with the nearest-neighbor method.\n"); break; case SE_INTERPOLATION_BILINEAR: printf ("The pyramid is interpolated with the bilinear method.\n"); break; case SE_INTERPOLATION_BICUBIC: printf ("The pyramid is interpolated with the bicubic interpolation method.\n"); break; default: printf("The pyramid interpolation method is unknown.\n"); break; } /* Display the maximum pyramid level and the skip the first level */ rc = SE_rasterattr_get_max_level ( raster_attrib, &max_level, &skip_level1); check_error (rc, NULL, NULL, "SE_rasterattr_get_max_level"); printf("The maximum pyramid level is: %d \n",max_level); /************************************************/ /* Set the raster constraints, in preparation */ /* of querying and displaying the tile info */ /************************************************/ /* Get the tiles and pyramid level to be displayed */ get_tile_envelope (raster_attrib, &tileenv); /* Display the raster extent for the specified pyramid level */ rc = SE_rasterattr_get_extent_by_level (raster_attrib, &raster_env, &eoffset_x, &eoffset_y, tileenv.level); check_error ( rc, NULL, NULL, "SE_rasterattr_get_extent_by_level"); printf ("Raster extent minimum X %lf for level %d\n",raster_env.minx,tileenv.level); printf ("Raster extent minimum Y %lf for level %d\n",raster_env.miny,tileenv.level); printf ("Raster extent maximum X %lf for level %d\n",raster_env.maxx,tileenv.level); printf ("Raster extent maximum Y %lf for level %d\n",raster_env.maxy,tileenv.level); printf ("X offset %lf for level %d\n",eoffset_x,tileenv.level); printf ("Y offset %lf for level %d\n",eoffset_y,tileenv.level); /* Display the image size for each pyramid level */ rc = SE_rasterattr_get_image_size_by_level ( raster_attrib, &band_width, &band_height, &ioffset_x, &ioffset_y, &number_of_bands, tileenv.level); check_error (rc, NULL, NULL, "SE_rasterattr_get_image_size_by_level"); printf ("Raster band width %d for level %d\n",band_width,tileenv.level); printf ("Raster band height %d for level %d\n",band_height,tileenv.level); printf ("Raster band X offset %d for level %d\n",ioffset_x,tileenv.level); printf ("Raster band Y offset %d for level %d\n",ioffset_y,tileenv.level); printf ("Number of bands %d\n",number_of_bands); rc = SE_rasconstraint_set_envelope ( rasconstraint, tileenv.minx, tileenv.minx, tileenv.maxx, tileenv.maxy); check_error (rc, NULL, NULL, "SE_rasconstraint_set_envelope"); band_numbers = malloc(sizeof(LONG) * number_of_bands); for (i=0; i