OSSIM - Open Source Software Image Map  Version 1.9.0 (20180803)
ossimAdrgTileSource.cpp
Go to the documentation of this file.
1 //*******************************************************************
2 //
3 // See top level LICENSE.txt file.
4 //
5 // Author: Ken Melero
6 // Contributor: David A. Horner (DAH) - http://dave.thehorners.com
7 //
8 // Description: This class give the capability to access tiles from an
9 // ADRG file.
10 //
11 //********************************************************************
12 // $Id: ossimAdrgTileSource.cpp 21631 2012-09-06 18:10:55Z dburken $
13 
17 #include <ossim/base/ossimCommon.h>
19 #include <ossim/base/ossimTrace.h>
22 #include <ossim/base/ossimDatum.h>
33 #include <iostream>
34 
35 RTTI_DEF1(ossimAdrgTileSource, "ossimAdrgTileSource", ossimImageHandler)
36 
37 //***
38 // Static trace for debugging
39 //***
40 static ossimTrace traceDebug("ossimAdrgTileSource:debug");
41 
42 //***
43 // NOTE: Currently this tilesource is hard-coded to access tiles
44 // from the ZDR image file. This will change as I wrote support
45 // data classes for all the ADRG image files: ZDR, overview,
46 // and legend support data. Next step in development will
47 // be to put in flags to access overview and legend image files.
48 //***
49 
50 //*******************************************************************
51 // Public Constructor:
52 //*******************************************************************
54  :
56  m_Tile(0),
57  m_TileBuffer(0),
58  m_FileStr(),
59  m_AdrgHeader(0)
60 {
61  // Construction not complete. Users should call "open" method.
62 }
63 
65 {
66  if(m_AdrgHeader)
67  {
68  delete m_AdrgHeader;
69  m_AdrgHeader = 0;
70  }
71  if (m_TileBuffer)
72  {
73  delete [] m_TileBuffer;
74  m_TileBuffer = 0;
75  }
76 
77  close();
78 }
79 
81  const ossimIrect& rect,
82  ossim_uint32 resLevel)
83 {
84  if (m_Tile.valid())
85  {
86  // Image rectangle must be set prior to calling getTile.
88 
89  if ( getTile( m_Tile.get(), resLevel ) == false )
90  {
92  {
93  m_Tile->makeBlank();
94  }
95  }
96  }
97 
98  return m_Tile;
99 }
100 
102  ossim_uint32 resLevel)
103 {
104  bool status = false;
105 
106  //---
107  // Not open, this tile source bypassed, or invalid res level,
108  // return a blank tile.
109  //---
110  if( isOpen() && isSourceEnabled() && isValidRLevel(resLevel) &&
111  result && (result->getNumberOfBands() == getNumberOfOutputBands()) )
112  {
113  result->ref(); // Increment ref count.
114 
115  //---
116  // Check for overview tile. Some overviews can contain r0 so always
117  // call even if resLevel is 0. Method returns true on success, false
118  // on error.
119  //---
120  status = getOverviewTile(resLevel, result);
121 
122  if (!status) // Did not get an overview tile.
123  {
124  status = true;
125 
126  ossimIrect tile_rect = result->getImageRectangle();
127 
128  ossimIrect image_rect = getImageRectangle(resLevel);
129 
130  result->makeBlank();
131 
132  //---
133  // See if any point of the requested tile is in the image.
134  //---
135  if ( tile_rect.intersects(image_rect) )
136  {
137  ossimIrect clip_rect = tile_rect.clipToRect(image_rect);
138 
139  // Load the tile buffer with data from the adrg.
140  status = fillBuffer(tile_rect, clip_rect, result);
141 
142  if (status)
143  {
144  result->validate();
145  }
146  }
147  }
148 
149  result->unref(); // Decrement ref count.
150  }
151 
152  return status;
153 }
154 
155 //*******************************************************************
156 // Private Method:
157 //*******************************************************************
158 bool ossimAdrgTileSource::fillBuffer(const ossimIrect& /* tile_rect */,
159  const ossimIrect& clip_rect,
160  ossimImageData* tile)
161 {
162  //***
163  // Shift the upper left corner of the "clip_rect" to the an even chunk
164  // boundry.
165  //***
166  ossimIpt tileOrigin = clip_rect.ul();
167  adjustToStartOfTile(tileOrigin);
168 
169  //***
170  // Calculate the number of tiles needed in the line/sample directions.
171  //***
172  ossim_int32 size_in_x = clip_rect.lr().x - tileOrigin.x + 1;
173  ossim_int32 size_in_y = clip_rect.lr().y - tileOrigin.y + 1;
174 
175  ossim_int32 tiles_in_x_dir = size_in_x / ADRG_TILE_WIDTH +
176  (size_in_x % ADRG_TILE_WIDTH ? 1 : 0);
177  ossim_int32 tiles_in_y_dir = size_in_y / ADRG_TILE_HEIGHT +
178  (size_in_y % ADRG_TILE_HEIGHT ? 1 : 0);
179 
180 
181  ossimIpt ulTilePt = tileOrigin;
182 
183  // Chunk loop in line direction.
184  for (ossim_int32 y=0; y<tiles_in_y_dir; y++)
185  {
186  ulTilePt.x = tileOrigin.x;
187 
188  // Tile loop in sample direction.
189  for (ossim_int32 x=0; x<tiles_in_x_dir; x++)
190  {
191  ossimIrect adrg_tile_rect(ulTilePt.x,
192  ulTilePt.y,
193  ulTilePt.x + ADRG_TILE_WIDTH- 1,
194  ulTilePt.y + ADRG_TILE_HEIGHT - 1);
195 
196  if (adrg_tile_rect.intersects(clip_rect))
197  {
198  ossimIrect tile_clip_rect = clip_rect.clipToRect(adrg_tile_rect);
199 
200  //---
201  // Some point in the chip intersect the tile so grab the
202  // data.
203  //---
204  ossim_int32 row = (ossim_int32) ulTilePt.y / ADRG_TILE_HEIGHT;
205  ossim_int32 col = (ossim_int32) ulTilePt.x / ADRG_TILE_WIDTH;
206  ossim_int32 tileOffset = m_AdrgHeader->tim(row, col);
207 
208  if(tileOffset != 0)
209  {
210  // Get the data.
211  int seek_position = (tileOffset - 1) * 49152 + 2048;
212  int band;
213 
214  // seek to start of chip
215  m_FileStr.seekg(seek_position, ios::beg);
216  for (band=0; band<3; band++)
217  {
218  //***
219  // Read the chip from the ccf file into the chunk buffer.
220  // This will get all the bands. Bands are interleaved by
221  // chip.
222  //***
223  if (!m_FileStr.read((char*)m_TileBuffer,
225  {
227  return false;
228  }
229 
230  tile->loadBand(m_TileBuffer,
231  adrg_tile_rect,
232  tile_clip_rect,
233  band);
234 
235  } // End of band loop.
236 
237  } // End of if (tileOffset != 0)
238 
239  } // End of if (adrg_tile_rect.intersects(clip_rect))
240 
241  ulTilePt.x += ADRG_TILE_WIDTH;
242 
243  } // End of tile loop in the sample direction.
244 
245  ulTilePt.y += ADRG_TILE_HEIGHT;
246 
247  } // End of tile loop in the line direction.
248 
249  return true;
250 }
251 
253 {
254  return getNumberOfInputBands();
255 }
256 
257 //*******************************************************************
258 // Public Method:
259 //*******************************************************************
262 {
263  return ossimIrect(0, // upper left x
264  0, // upper left y
265  getNumberOfSamples(reduced_res_level) - 1, // lower right x
266  getNumberOfLines(reduced_res_level) - 1); // lower right y
267 }
268 
270 {
271  if(m_AdrgHeader)
272  {
273  delete m_AdrgHeader;
274  m_AdrgHeader = 0;
275  }
276  if(m_FileStr.is_open())
277  {
278  m_FileStr.close();
279  }
280  m_Tile = 0;
281 }
282 
283 //*******************************************************************
284 // Public method:
285 //*******************************************************************
287 {
288  static const char MODULE[] = "ossimAdrgTileSource::open";
289 
290  if(traceDebug())
291  {
293  << MODULE << "Entered..."<<std::endl;
294  }
295  if(isOpen())
296  {
297  close();
298  }
299  if(m_AdrgHeader)
300  {
301  delete m_AdrgHeader;
302  m_AdrgHeader = 0;
303  }
304  // Instantiate support data class to parse header file.
306 
307  // Check for errors.
309  {
310  if (traceDebug())
311  {
313  << MODULE << " Error in ossimAdrg header detected." << std::endl;
314  }
315 
316  close();
317  return false;
318  }
319 
321  ios::in | ios::binary);
322 
323  // Check the file pointer.
324  if(!m_FileStr)
325  {
327  if (traceDebug())
328  {
329  ossimNotify(ossimNotifyLevel_WARN) << MODULE << "\nCannot open: "
330  << m_AdrgHeader->imageFile().c_str() << std::endl;
331  }
332  close();
333 
334  return false;
335  }
336 
337  if(traceDebug())
338  {
340  << MODULE
341  << "File is opened -> "<< m_AdrgHeader->imageFile()<<std::endl;
342  }
343 
344  // allow the base handler to check for other overrides
345  completeOpen();
346  // Allocate memory.
348  m_Tile->initialize();
350 
351  if (traceDebug())
352  {
354  << "\nminLon: " << m_AdrgHeader->minLon()
355  << "\nminLond: " << m_AdrgHeader->minLongitude()
356  << "\nminLat: " << m_AdrgHeader->minLat()
357  << "\nminLatd: " << m_AdrgHeader->minLatitude()
358  << "\nmaxLon: " << m_AdrgHeader->maxLon()
359  << "\nmaxLond: " << m_AdrgHeader->maxLongitude()
360  << "\nmaxLat: " << m_AdrgHeader->maxLat()
361  << "\nmaxLatd: " << m_AdrgHeader->maxLatitude()
362  << std::endl;
363  }
364 
365  return true;
366 }
367 
368 //*******************************************************************
369 // Public method:
370 //*******************************************************************
372  const char* prefix) const
373 {
374  // Currently nothing to do here.
375  return ossimImageHandler::saveState(kwl, prefix);
376 }
377 
378 //*******************************************************************
379 // Public method:
380 //*******************************************************************
382  const char* prefix)
383 {
384  if (ossimImageHandler::loadState(kwl, prefix))
385  {
386  if (open())
387  {
388  return true;
389  }
390  }
391 
392  return false;
393 }
394 
395 //*******************************************************************
396 // Public method:
397 //*******************************************************************
399 {
400  if ( !theGeometry )
401  {
402  // Check for external geom:
404 
405  if ( !theGeometry )
406  {
407  // origin of latitude
408  ossim_float64 originLatitude = (m_AdrgHeader->maxLatitude() +
409  m_AdrgHeader->minLatitude()) / 2.0;
410 
411  // central meridian.
412  ossim_float64 centralMeridian = (m_AdrgHeader->maxLongitude() +
413  m_AdrgHeader->minLongitude()) / 2.0;
414 
415  //---
416  // Compute the pixel size in latitude and longitude direction. This will
417  // be full image extents divided by full image lines and samples.
418  //---
419 
420  // Samples in full image (used to compute degPerPixelX).
421  ossim_float64 samples = m_AdrgHeader->samples();
422 
423  // Lines in full image (used to compute degPerPixelX).
424  ossim_float64 lines = m_AdrgHeader->lines();
425 
426  // Degrees in latitude direction of the full image.
427  ossim_float64 degrees_in_lat_dir = m_AdrgHeader->maxLatitude() -
429 
430  // Degrees in longitude direction of the full image.
431  ossim_float64 degrees_in_lon_dir = m_AdrgHeader->maxLongitude() -
433 
434  ossim_float64 degPerPixelY = degrees_in_lat_dir / lines;
435  ossim_float64 degPerPixelX = degrees_in_lon_dir / samples;
436 
437  //---
438  // The tie is determined with the following assumptions that need to be
439  // verified:
440  // 1) Rows and columns start at 1.
441  // 2) The min / max latitudes longitudes go to the edge of the pixel.
442  // 3) Latitude decreases by degPerPixelY with each line.
443  // 4) Longitude increases by degPerPixelX with each sample.
444  //---
445  ossim_float64 ul_lat = (m_AdrgHeader->maxLatitude() -
446  ( (m_AdrgHeader->startRow() - 1) *
447  degPerPixelY ) - ( degPerPixelY * 0.5 ) );
449  ( (m_AdrgHeader->startCol() -1) *
450  degPerPixelX ) + ( degPerPixelX * 0.5 ) );
451 
452  // projection type
453  ossimKeywordlist kwl;
454  const char* prefix = 0;
455  kwl.add(prefix,
457  "ossimEquDistCylProjection",
458  true);
459 
460  // datum.
461  kwl.add(prefix,
463  "WGE",
464  true);
465 
466  // origin latitude
467  kwl.add(prefix,
469  originLatitude,
470  true);
471 
472  // central meridin
473  kwl.add(prefix,
475  centralMeridian,
476  true);
477 
478  // Save the tie point.
479  kwl.add(prefix,
481  ossimDpt(ul_lon, ul_lat).toString().c_str(),
482  true);
483  kwl.add(prefix,
485  ossimUnitTypeLut::instance()->getEntryString(OSSIM_DEGREES),
486  true);
487 
488  // Save the scale.
489  kwl.add(prefix,
491  ul_lat,
492  true);
493 
494  kwl.add(prefix,
496  ul_lon,
497  true);
498 
499  // Save the scale.
500  kwl.add(prefix,
502  ossimDpt(degPerPixelX, degPerPixelY).toString().c_str(),
503  true);
504  kwl.add(prefix,
506  ossimUnitTypeLut::instance()->getEntryString(OSSIM_DEGREES),
507  true);
508 
509  // lines
510  kwl.add(prefix,
512  getNumberOfLines());
513 
514  // samples
515  kwl.add(prefix,
518 
519  // res sets
520  kwl.add(prefix,
523 
524  // bands
525  kwl.add(prefix,
528 
529  // bands
530  kwl.add(prefix,
533 
534  if (traceDebug())
535  {
537  << "\nminLon: " << m_AdrgHeader->minLon()
538  << "\nminLond: " << m_AdrgHeader->minLongitude()
539  << "\nminLat: " << m_AdrgHeader->minLat()
540  << "\nminLatd: " << m_AdrgHeader->minLatitude()
541  << "\nmaxLon: " << m_AdrgHeader->maxLon()
542  << "\nmaxLond: " << m_AdrgHeader->maxLongitude()
543  << "\nmaxLat: " << m_AdrgHeader->maxLat()
544  << "\nmaxLatd: " << m_AdrgHeader->maxLatitude()
545  << "\nstartRow: " << m_AdrgHeader->startRow()
546  << "\nstartCol: " << m_AdrgHeader->startCol()
547  << "\nstopRow: " << m_AdrgHeader->stopRow()
548  << "\nstopCol: " << m_AdrgHeader->stopCol()
549  << "\nfull image lines: " << lines
550  << "\nfull image samples: " << samples
551  << "\nkwl:\n" << kwl
552  << std::endl;
553  }
554 
557  theGeometry->setProjection(new_proj); // assumes management of projection instance
558 
559  } // matches (after getExternalImageGeometry()): if ( !theGeometry )
560 
561  // Set image things the geometry object should know about.
563 
564  } // matches: if ( !theGeometry )
565 
566  return theGeometry;
567 }
568 
569 //*******************************************************************
570 // Public method:
571 //*******************************************************************
573 {
574  return OSSIM_UCHAR;
575 }
576 
577 //*******************************************************************
578 // Public method:
579 //*******************************************************************
581 {
582  return ( m_Tile.valid() ? m_Tile->getWidth() : 0 );
583 }
584 
585 //*******************************************************************
586 // Public method:
587 //*******************************************************************
589 {
590  return ( m_Tile.valid() ? m_Tile->getHeight() : 0 );
591 }
592 
593 //*******************************************************************
594 // Public method:
595 //*******************************************************************
597 {
598  if ( (reduced_res_level == 0) && m_AdrgHeader )
599  {
600  return (m_AdrgHeader->stopRow() - m_AdrgHeader->startRow()) + 1;
601  }
602  else if (theOverview.valid())
603  {
604  return theOverview->getNumberOfLines(reduced_res_level);
605  }
606 
607  return 0;
608 }
609 
610 //*******************************************************************
611 // Public method:
612 //*******************************************************************
614 {
615  if ( (reduced_res_level == 0) && m_AdrgHeader )
616  {
617  return (m_AdrgHeader->stopCol() - m_AdrgHeader->startCol()) + 1;
618  }
619  else if (theOverview.valid())
620  {
621  return theOverview->getNumberOfSamples(reduced_res_level);
622  }
623 
624  return 0;
625 }
626 
628 {
629  return ADRG_TILE_WIDTH;
630 }
631 
633 {
634  return ADRG_TILE_HEIGHT;
635 }
636 
638 {
639  if(name == "file_type")
640  {
641  return new ossimStringProperty(name, "ADRG");
642  }
643 
644  return ossimImageHandler::getProperty(name);
645 }
646 
647 void ossimAdrgTileSource::getPropertyNames(std::vector<ossimString>& propertyNames)const
648 {
650  propertyNames.push_back("file_type");
651 }
652 
654 {
655  return ossimString("adrg");
656 }
657 
659 {
660  return ossimString("adrg reader");
661 }
662 
664 {
665  ossim_uint32 bands = 1;
666  if ( m_AdrgHeader )
667  {
668  bands = m_AdrgHeader->numberOfBands();
669  }
670  return bands;
671 }
672 
674 {
675  return (m_AdrgHeader!=0);
676 }
677 
679 {
680  pt.x &= 0xffffff80;
681  pt.y &= 0xffffff80;
682 }
virtual void loadBand(const void *src, const ossimIrect &src_rect, ossim_uint32 band)
virtual ossim_uint32 getWidth() const
ossim_uint32 x
virtual bool isSourceEnabled() const
Definition: ossimSource.cpp:79
virtual bool loadState(const ossimKeywordlist &kwl, const char *prefix=0)
Method to the load (recreate) the state of an object from a keyword list.
ossim_uint32 startRow() const
ossimRefPtr< ossimImageGeometry > theGeometry
virtual ossimRefPtr< ossimImageGeometry > getImageGeometry()
Returns the image geometry object associated with this tile source or NULL if non defined...
ossimRefPtr< ossimImageData > m_Tile
void setProjection(ossimProjection *projection)
Sets the projection to be used for local-to-world coordinate transformation.
virtual ossimRefPtr< ossimImageData > getTile(const ossimIrect &rect, ossim_uint32 resLevel=0)
Returns a pointer to a tile given an origin representing the upper left corner of the tile to grab fr...
virtual ossim_uint32 getNumberOfBands() const
static const char * DATUM_KW
ossim_uint32 tim(ossim_uint32 row, ossim_uint32 col) const
ossimFilename theImageFile
virtual void setImageRectangle(const ossimIrect &rect)
int errorStatus() const
static const char * CENTRAL_MERIDIAN_KW
virtual bool saveState(ossimKeywordlist &kwl, const char *prefix=0) const
Method to save the state of an object to a keyword list.
Represents serializable keyword/value map.
ossim_uint32 y
bool valid() const
Definition: ossimRefPtr.h:75
virtual ossimString getShortName() const
virtual bool loadState(const ossimKeywordlist &kwl, const char *prefix=0)
Method to the load (recreate) the state of an object from a keyword list.
ossimString minLon() const
virtual ossim_uint32 getNumberOfLines(ossim_uint32 resLevel=0) const =0
Pure virtual, derived classes must implement.
static const char * NUMBER_LINES_KW
static const char * TIE_POINT_LON_KW
virtual ossim_uint32 getImageTileWidth() const
Returns the tile width of the image or 0 if the image is not tiled.
static const char * NUMBER_INPUT_BANDS_KW
const ossimIpt & ul() const
Definition: ossimIrect.h:274
virtual ossimDataObjectStatus getDataObjectStatus() const
virtual ossim_uint32 getHeight() const
static const ossimErrorCode OSSIM_ERROR
ossimString minLat() const
ossim_uint32 numberOfBands() const
virtual ossim_uint32 getNumberOfSamples(ossim_uint32 reduced_res_level=0) const
Returns the number of samples in the image.
double minLongitude() const
bool intersects(const ossimIrect &rect) const
Definition: ossimIrect.cpp:183
static const char * TYPE_KW
virtual void initialize()
Initialize the data buffer.
void ref() const
increment the reference count by one, indicating that this object has another pointer which is refere...
ossim_uint32 startCol() const
virtual ossim_uint32 getNumberOfDecimationLevels() const
This returns the total number of decimation levels.
virtual bool isValidRLevel(ossim_uint32 resLevel) const
Determines if the passed in reslution level is valid.
virtual ossim_uint32 getImageTileHeight() const
Returns the tile width of the image or 0 if the image is not tiled.
static const char * PIXEL_SCALE_XY_KW
virtual void getPropertyNames(std::vector< ossimString > &propertyNames) const
double ossim_float64
void add(const char *prefix, const ossimKeywordlist &kwl, bool overwrite=true)
virtual bool getOverviewTile(ossim_uint32 resLevel, ossimImageData *result)
Method to get an overview tile.
static ossimImageDataFactory * instance()
ossimFilename imageFile() const
virtual ossim_uint32 getTileHeight() const
Returns the height of the output tile.
ossimProjection * createProjection(const ossimFilename &filename, ossim_uint32 entryIdx) const
virtual ossimRefPtr< ossimProperty > getProperty(const ossimString &name) const
Gets a property for matching name.
virtual ossimDataObjectStatus validate() const
static const char * TIE_POINT_XY_KW
ossim_uint32 lines() const
bool fillBuffer(const ossimIrect &tile_rect, const ossimIrect &clip_rect, ossimImageData *tile)
Returns true on success, false on error.
unsigned int ossim_uint32
static const char * NUMBER_OUTPUT_BANDS_KW
void adjustToStartOfTile(ossimIpt &pt) const
Adjust point to even 128 boundary.
ossimString maxLat() const
virtual ossimIrect getImageRectangle() const
ossim_uint32 stopCol() const
const ossimIpt & lr() const
Definition: ossimIrect.h:276
virtual ossimRefPtr< ossimImageData > create(ossimSource *owner, ossimScalarType scalar, ossim_uint32 bands=1) const
void initImageParameters(ossimImageGeometry *geom) const
Convenience method to set things needed in the image geometry from the image handler.
ossimIrect clipToRect(const ossimIrect &rect) const
Definition: ossimIrect.cpp:501
Container class that holds both 2D transform and 3D projection information for an image Only one inst...
ossimScalarType
void unref() const
decrement the reference count by one, indicating that a pointer to this object is referencing it...
virtual ossim_uint32 getNumberOfOutputBands() const
Returns the number of bands in a tile returned from this TileSource.
static ossimProjectionFactoryRegistry * instance()
virtual ossimScalarType getOutputScalarType() const
Returns the output pixel type of the tile source.
static const char * ORIGIN_LATITUDE_KW
virtual ossimRefPtr< ossimImageGeometry > getExternalImageGeometry() const
Returns the image geometry object associated with this tile source or NULL if non defined...
return status
virtual ossimRefPtr< ossimProperty > getProperty(const ossimString &name) const
virtual ossimString getLongName() const
virtual ossim_uint32 getNumberOfInputBands() const
Returns the number of bands in the image.
virtual void makeBlank()
Initializes data to null pixel values.
virtual void completeOpen()
Will complete the opening process.
virtual void close()
Deletes the overview and clears the valid image vertices.
ossimRefPtr< ossimImageHandler > theOverview
This class defines an abstract Handler which all image handlers(loaders) should derive from...
virtual bool isOpen() const
Derived classes must implement this method to be concrete.
ossim_int32 y
Definition: ossimIpt.h:142
const char * c_str() const
Returns a pointer to a null-terminated array of characters representing the string&#39;s contents...
Definition: ossimString.h:396
double maxLatitude() const
virtual ossim_uint32 getNumberOfSamples(ossim_uint32 resLevel=0) const =0
Pure virtual, derived classes must implement.
virtual void getPropertyNames(std::vector< ossimString > &propertyNames) const
Gets a list of property names available.
ossim_int32 x
Definition: ossimIpt.h:141
static const char * TIE_POINT_LAT_KW
double minLatitude() const
#define RTTI_DEF1(cls, name, b1)
Definition: ossimRtti.h:485
static const char * NUMBER_REDUCED_RES_SETS_KW
ossim_uint32 stopRow() const
ossimString maxLon() const
ossim_uint32 samples() const
virtual ossimIrect getImageRectangle(ossim_uint32 reduced_res_level=0) const
Returns the zero based image rectangle for the reduced resolution data set (rrds) passed in...
ossimAdrgHeader * m_AdrgHeader
static ossimUnitTypeLut * instance()
Returns the static instance of an ossimUnitTypeLut object.
virtual ossim_uint32 getTileWidth() const
Returns the width of the output tile.
static const char * NUMBER_SAMPLES_KW
unsigned char ossim_uint8
OSSIMDLLEXPORT std::ostream & ossimNotify(ossimNotifyLevel level=ossimNotifyLevel_WARN)
virtual bool saveState(ossimKeywordlist &kwl, const char *prefix=0) const
Method to save the state of an object to a keyword list.
double maxLongitude() const
static const char * PIXEL_SCALE_UNITS_KW
static const char * TIE_POINT_UNITS_KW
8 bit unsigned iteger
int ossim_int32
virtual ossim_uint32 getNumberOfLines(ossim_uint32 reduced_res_level=0) const
Returns the number of lines in the image.