OSSIM - Open Source Software Image Map  Version 1.9.0 (20180803)
ossimDtedTileSource.cpp
Go to the documentation of this file.
1 //---
2 //
3 // License: MIT
4 //
5 // Author: David Burken
6 //
7 // Description:
8 //
9 // Contains class declaration for ossimDtedTileSource.
10 //
11 //---
12 // $Id$
13 
16 #include <ossim/base/ossimCommon.h>
18 #include <ossim/base/ossimTrace.h>
22 #include <ossim/base/ossimDatum.h>
30 #include <cstdlib>
31 #include <iostream>
32 using namespace std;
33 
34 RTTI_DEF1(ossimDtedTileSource, "ossimDtedTileSource", ossimImageHandler)
35 
36 // Static trace for debugging
37 static ossimTrace traceDebug("ossimDtedTileSource:debug");
38 
39 
41  :
43  theTile(0),
44  m_fileStr(0),
45  m_dtedInfo(0),
46  theTileWidth(0),
47  theTileHeight(0),
48  theNumberOfLines(0),
49  theNumberOfSamps(0),
50  theOffsetToFirstDataRecord(0),
51  theDataRecordSize(0),
52  theMinHeight(0),
53  theMaxHeight(0),
54  thePostSpacing(0.0, 0.0),
55  theSwapBytesFlag(false)
56 {
58  {
59  theSwapBytesFlag = true;
60  }
61 
62  // Set the tile size to the default.
65  theTileWidth = static_cast<ossim_uint32>(defaultTileSize.x);
66  theTileHeight = static_cast<ossim_uint32>(defaultTileSize.y);
67 
68  // Construction not complete. Users should call "open" method.
69 }
70 
72 {
73  close();
74 }
75 
77 {
78  return ossimString("dted");
79 }
80 
82 {
83  return ossimString("dted reader");
84 }
85 
87  const ossimIrect& tile_rect, ossim_uint32 resLevel)
88 {
89  if (!theTile.valid())
90  {
91  allocate(); // First getTile call or after changeTileSize.
92  if (!theTile.valid())
93  {
94  return ossimRefPtr<ossimImageData>(); // Throw exception???
95  }
96  }
97 
98  // Image rectangle must be set prior to calling getTile.
99  theTile->setImageRectangle(tile_rect);
100 
101  if ( getTile( theTile.get(), resLevel ) == false )
102  {
104  {
105  theTile->makeBlank();
106  }
107  }
108 
109  return theTile;
110 }
111 
113  ossim_uint32 resLevel)
114 {
115  bool status = false;
116 
117  //---
118  // Not open, this tile source bypassed, or invalid res level,
119  // return a blank tile.
120  //---
121  if( isOpen() && isSourceEnabled() && isValidRLevel(resLevel) &&
122  result && (result->getNumberOfBands() == getNumberOfOutputBands()) )
123  {
124  result->ref(); // Increment ref count.
125 
126  //---
127  // Check for overview tile. Some overviews can contain r0 so always
128  // call even if resLevel is 0. Method returns true on success, false
129  // on error.
130  //---
131  status = getOverviewTile(resLevel, result);
132 
133  if ( !status ) // Did not get an overview tile.
134  {
135  ossimIrect image_rect = getImageRectangle(resLevel);
136 
137  ossimIrect tile_rect = result->getImageRectangle();
138 
139  //---
140  // See if any point of the requested tile is in the image.
141  //---
142  if ( tile_rect.intersects(image_rect) )
143  {
144  ossimIrect clip_rect = tile_rect.clipToRect(image_rect);
145 
146  if ( !tile_rect.completely_within(clip_rect) )
147  {
148  // Start with a blank tile.
149  result->makeBlank();
150  }
151 
152  // Load the tile buffer with data from the dted cell.
153  status = fillBuffer(tile_rect, clip_rect, result);
154 
155  } // End of if ( tile_rect.intersects(image_rect) )
156  }
157 
158  result->unref(); // Decrement ref count.
159  }
160 
161  return status;
162 }
163 
164 //*******************************************************************
165 // Private Method:
166 //*******************************************************************
168  const ossimIrect& clip_rect,
169  ossimImageData* tile)
170 {
171  //***
172  // NOTE:
173  // Elevation posts are organized positive line up.
174  // The "tile_rect" and "clip_rect" is organized positive line down.
175  //***
176 
177  const ossim_int32 TILE_WIDTH = tile->getWidth();
178 
179  //***
180  // Position the file pointer to the first record needed.
181  // Posts are organized positive line up so we're going to start at
182  // the lower left side of the cell so all reads are going forward in
183  // the file.
184  //***
185  ossim_int32 seek_position = theOffsetToFirstDataRecord +
186  (clip_rect.ul().x * theDataRecordSize);
187  seek_position += DATA_RECORD_OFFSET_TO_POST +
188  (theNumberOfLines - 1 - clip_rect.lr().y) * 2;
189 
190  //***
191  // Get a pointer positioned at the first valid pixel in
192  // the tile. Tiles are organized positive line down.
193  //***
194  ossim_sint16* d = static_cast<ossim_sint16*>(tile->getBuf());
195 
196  // Loop in the longitude or sample direction.
197  for (ossim_int32 samp = clip_rect.ul().x; samp <= clip_rect.lr().x; samp++)
198  {
199  ossim_int32 d_offset = (clip_rect.lr().y - tile_rect.ul().y) *
200  TILE_WIDTH +
201  (samp - tile_rect.ul().x);
202 
203  m_fileStr->seekg(seek_position, ios::beg); // Seek to the first post.
204 
205  for (ossim_int32 line = clip_rect.lr().y; line >= clip_rect.ul().y; line--)
206  {
207  // Grab all the post needed from the column.
208  ossim_uint16 temp;
209  ossim_sint16 s;
210  m_fileStr->read((char*)&temp, POST_SIZE);
211  s = convertSignedMagnitude(temp);
212  d[d_offset] = s;
213  d_offset -= TILE_WIDTH;
214  }
215  seek_position += theDataRecordSize;
216  }
217 
218  tile->validate();
219 
220  return true;
221 }
222 
224 {
225  return getNumberOfInputBands();
226 }
227 
230 {
231  return ossimIrect(0,
232  0,
233  getNumberOfSamples(reduced_res_level) - 1,
234  getNumberOfLines(reduced_res_level) - 1);
235 }
236 
238 {
239  return (m_fileStr!=0);
240 }
241 
243 {
244  m_fileStr.reset();
245 }
246 
248 {
249  static const char MODULE[] = "ossimDtedTileSource::open";
250 
251  if (traceDebug())
252  {
253  CLOG << "DEBUG:"
254  << "\nAttempting to parse file: " << theImageFile.c_str()
255  << endl;
256  }
257  std::shared_ptr<ossim::istream> str = ossim::StreamFactoryRegistry::instance()->
258  createIstream( theImageFile.c_str(), std::ios_base::in|std::ios_base::binary);
259 
260  // Open up the file for reading.
261  if (!str)
262  {
264 
265  if(traceDebug())
266  {
267  ossimNotify(ossimNotifyLevel_WARN) << MODULE << " ERROR!"
268  << "\nCould not open file: " << theImageFile.c_str()
269  << "\nReturning..." << endl;
270  CLOG << "returning with error..." << endl;
271  }
272  return false;
273  }
274 
275  if(!str)
276  {
277  if (traceDebug())
278  {
279  CLOG << "DEBUG:"
280  << "\nCannot open: " << theImageFile.c_str()
281  << endl;
282  }
283  str.reset();
284  return false;
285  }
286  std::string connectionString = theImageFile.c_str();
287  m_dtedInfo = std::make_shared<ossimDtedInfo>();
288  if(!m_dtedInfo->open(str, connectionString))
289  {
290  close();
291  return false;
292  }
293  m_fileStr = str;
294  m_fileStr->clear();
295  m_fileStr->seekg(0);
296 
297  m_vol.parse(*str);
298  m_hdr.parse(*str);
299  m_uhl.parse(*str);
300  m_dsi.parse(*str);
301  m_acc.parse(*str);
302 
303  //***
304  // Check for errors. Must have uhl, dsi and acc records. vol and hdr
305  // are for magnetic tape only; hence, may or may not be there.
306  //***
310  {
311  if (traceDebug())
312  {
313  CLOG << "DEBUG:"
314  << "\nError parsing file: " << theImageFile.c_str()
315  << "\nPossibly not a dted file.\n";
316  }
317 
318  str.reset();
319  return false;
320  }
321  m_fileStr = str;
322 
323  // Get the cell specific info needed for later.
330  (theNumberOfLines * sizeof(ossim_sint16)) +
332 
333  //---
334  // Note:
335  // Complete open calls loadMetaData which we have overriden to check for
336  // dot omd or dot statistics file. If not there it will call
337  // gatherStatistics which will scan the file for min/max values.
338  //---
339  completeOpen();
340 
341  if (traceDebug())
342  {
343  CLOG << "DEBUG:"
344  << "\nNull pix: " << getNullPixelValue(0)
345  << "\nMin pix: " << getMinPixelValue(0)
346  << "\nMax pix: " << getMaxPixelValue(0)
347  << "\ntheNumberOfLines: " << theNumberOfLines
348  << "\ntheNumberOfSamps: " << theNumberOfSamps
349  << "\ntheOffsetToFirstDataRecord: " << theOffsetToFirstDataRecord
350  << "\ntheDataRecordSize: " << theDataRecordSize << "\n";
351  }
352 
353  return true;
354 }
355 
357 {
358  //---
359  // Set up the tiles. Note the blank tile will not get initialized to save
360  // memory. This includes setting the min and max pixel value gathered
361  // from the statistics.
362  //---
364  if(theTile.valid())
365  {
366  theTile->initialize();
367  }
368 
369  if (traceDebug())
370  {
372  << "DEBUG:"
373  << "\ntheTile:\n" << *theTile << "\n";
374  }
375 }
376 
378  const char* prefix) const
379 {
380  // Currently nothing to do here.
381  return ossimImageHandler::saveState(kwl, prefix);
382 }
383 
385  const char* prefix)
386 {
387  if (ossimImageHandler::loadState(kwl, prefix))
388  {
390  {
391  return true;
392  }
393  }
394 
395  return false;
396 }
397 
398 //**************************************************************************************************
399 // Returns the image geometry object associated with this tile source or NULL if not defined.
400 // The geometry contains full-to-local image transform as well as projection (image-to-world)
401 //**************************************************************************************************
403 {
404  if ( theGeometry.valid() )
405  return theGeometry;
406 
407  // Compute the projection tie point (UL corner of dted cell). The UHL supplies the SW (LL) corner
408  // coordinates, so need to compute the UL lat from the cell spacing:
409  const ossimDatum* datum = ossimDatumFactory::instance()->wgs84();
410  ossim_float64 ul_lat = m_uhl.latOrigin() + (m_uhl.latInterval() * (m_uhl.numLatPoints()-1.0));
411  ossim_float64 ul_lon = m_uhl.lonOrigin();
412  ossimGpt tie(ul_lat, ul_lon, 0.0, datum);
413 
414  //---
415  // This code is backed out as it affects the corner.
416  // E.g.: image0.ur_lon: -88.999999999995
417  // Should be -89.0
418  // Used ossimImageGeometry::::getMetersPerPixel for a center of the image gsd. (drb)
419  //
420  // We also need to define an origin for the projection as the center of the cell for proper GSD
421  // calculation (OLK 01/11: Used to set origin at 0,0 causing incorrect meters GSD to be
422  // computed)
423  // ossim_float64 mid_lat = m_uhl.latOrigin() + (m_uhl.latInterval()*m_uhl.numLatPoints()/2.0);
424  // ossim_float64 mid_lon = m_uhl.lonOrigin() + (m_uhl.lonInterval()*m_uhl.numLonLines()/2.0);
425  // ossimGpt origin (mid_lat, mid_lon, 0.0, datum);
426  //---
427  ossimGpt origin (0.0, 0.0, 0.0, datum);
428 
429  // Make an Equidistant Cylindrical projection.
431  new ossimEquDistCylProjection(*(datum->ellipsoid()));
432 
433  // Set the scale:
434  eq->setOrigin(origin);
435  eq->setUlTiePoints(tie);
437  eq->setDecimalDegreesPerPixel(gsd);
438 
439  // Give it to the geometry object.
440  ossimRefPtr<ossimProjection> proj = eq.get();
441 
442  // Make the geometry:
444 
445  // Set the projection.
446  theGeometry->setProjection( proj.get() );
447 
448  // Set image things the geometry object should know about.
450 
451  return theGeometry;
452 }
453 
455 {
456  return OSSIM_SSHORT16; // Always signed 16 bit.
457 }
458 
460 {
461  return theTileWidth;
462 }
463 
465 {
466  return theTileHeight;
467 }
468 
470 {
471  if (reduced_res_level == 0)
472  {
473  return theNumberOfLines;
474  }
475  else if (theOverview.valid())
476  {
477  return theOverview->getNumberOfLines(reduced_res_level);
478  }
479 
480  return 0;
481 }
482 
484 {
485  if (reduced_res_level == 0)
486  {
487  return theNumberOfSamps;
488  }
489  else if (theOverview.valid())
490  {
491  return theOverview->getNumberOfSamples(reduced_res_level);
492  }
493 
494  return 0;
495 }
496 
498 {
499  ossimKeywordlist kwl;
500  const char* min_str = 0;
501  const char* max_str = 0;
502 
504 
505  // Check for omd file.
506  f.setExtension("omd");
507  if ( f.exists() )
508  {
509  kwl.addFile(f);
510  min_str = kwl.find("band1.min_value");
511  max_str = kwl.find("band1.max_value");
512  }
513 
514  if ( !min_str || !max_str )
515  {
516  f.setExtension("statistics");
517  if ( f.exists() )
518  {
519  kwl.addFile(f);
520  min_str = kwl.find(ossimKeywordNames::MIN_VALUE_KW);
521  max_str = kwl.find(ossimKeywordNames::MAX_VALUE_KW);
522  }
523  }
524 
525  if ( min_str || max_str )
526  {
527  theMinHeight = atoi(min_str);
528  theMaxHeight = atoi(max_str);
529  }
530  else
531  {
532  gatherStatistics(false);
533  }
534 }
535 
536 void ossimDtedTileSource::gatherStatistics(bool writeStatsFile)
537 {
538  // Scan the cell and gather the statistics...
539  if ( traceDebug() )
540  {
542  << "ossimDtedTileSource::gatherStatistics() scanning for min/max"
543  << "\nThis may take a while...\n";
544  }
545 
546  // Start off with the min and max pegged.
547  theMinHeight = 32767;
548  theMaxHeight = -32767;
549 
550  // Put the file pointer at the start of the first elevation post.
551  m_fileStr->seekg(theOffsetToFirstDataRecord, ios::beg);
552 
553  //---
554  // Loop through all records and scan for lowest min and highest max.
555  // Each record contains a row of latitude points for a given longitude.
556  // There are eight bytes in front of the post and four checksum bytes at
557  // the end so ignore them.
558  //---
559  for (ossim_uint32 i=0; i<theNumberOfSamps; i++) // longitude direction
560  {
561  m_fileStr->seekg(DATA_RECORD_OFFSET_TO_POST, ios::cur);
562 
563  for (ossim_uint32 j=0; j<theNumberOfLines; j++) // latitude direction
564  {
565  ossim_uint16 temp;
566  ossim_sint16 s;
567  m_fileStr->read((char*)&temp, POST_SIZE);
568  s = convertSignedMagnitude(temp);
569  if (s < theMinHeight && s != NULL_PIXEL) theMinHeight = s;
570  if (s > theMaxHeight) theMaxHeight = s;
571  }
572 
573  m_fileStr->seekg(DATA_RECORD_CHECKSUM_SIZE, ios::cur);
574  }
575 
576  if ( writeStatsFile )
577  {
578  // Add the stats to the keyword list.
579  ossimKeywordlist kwl;
582 
583  // Write out the statistics file.
585  f.setExtension("statistics");
586  kwl.write( f.c_str() );
587  }
588 
589  if (traceDebug())
590  {
592  << "ossimDtedTileSource::gatherStatistics DEBUG:"
593  << "\ntheMinHeight: " << theMinHeight
594  << "\ntheMaxHeight: " << theMaxHeight
595  << "\n";
596  }
597 }
598 
600 {
601  return 0;
602 }
603 
605 {
606  return 0;
607 }
608 
610 {
611  return 1;
612 }
613 
615 {
617  {
618  return theMetaData.getNullPix(0);
619  }
620  return -32767.0;
621 }
623 {
625  {
626  return theMetaData.getMinPix(band);
627  }
628  return theMinHeight;
629 }
630 
632 {
634  {
635  return theMetaData.getMaxPix(band);
636  }
637  return theMaxHeight;
638 }
639 
641 {
642  postSpacing.x = thePostSpacing.x;
643  postSpacing.y = thePostSpacing.y;
644 }
645 
647  const ossimString& name)const
648 {
649  // look in base class.
651 
652  if (result.valid() == false)
653  {
654 // ossimDtedInfo info;
655 // std::string connectionString = theImageFile.c_str();
656  if (m_dtedInfo)
657  {
658  result = m_dtedInfo->getProperty(name);
659  }
660  }
661 
662  return result;
663 }
664 
666  std::vector<ossimString>& propertyNames) const
667 {
669 
670  if (m_dtedInfo)
671  {
672  m_dtedInfo->getPropertyNames(propertyNames);
673  }
674 // ossimDtedInfo info;
675 // if (info.open(theImageFile))
676 // {
677 // info.getPropertyNames(propertyNames);
678 // }
679 }
680 
682 {
683  return rhs;
684 }
685 
687 {
688 }
double latOrigin() const
virtual bool open()=0
Pure virtual open.
ossim_int32 stopOffset() const
virtual ossim_uint32 getWidth() const
virtual bool isSourceEnabled() const
Definition: ossimSource.cpp:79
static const char * MIN_VALUE_KW
ossimRefPtr< ossimImageGeometry > theGeometry
virtual ossim_uint32 getTileWidth() const
Returns the width of the output tile.
double latInterval() const
void setProjection(ossimProjection *projection)
Sets the projection to be used for local-to-world coordinate transformation.
virtual ossim_uint32 getNumberOfBands() const
virtual ossim_uint32 getNumberOfSamples(ossim_uint32 reduced_res_level=0) const
Returns the number of samples in the image.
#define CLOG
Definition: ossimTrace.h:23
ossimFilename theImageFile
virtual void setImageRectangle(const ossimIrect &rect)
virtual bool loadState(const ossimKeywordlist &kwl, const char *prefix=0)
Method to the load (recreate) the state of an object from a keyword list.
double getMinPix(ossim_uint32 band) const
Represents serializable keyword/value map.
bool addFile(const char *file)
bool valid() const
Definition: ossimRefPtr.h:75
const char * find(const char *key) 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.
virtual ossim_uint32 getNumberOfLines(ossim_uint32 resLevel=0) const =0
Pure virtual, derived classes must implement.
virtual ossimString getShortName() const
static const char * MAX_VALUE_KW
double y
Definition: ossimDpt.h:165
virtual ossimRefPtr< ossimProperty > getProperty(const ossimString &name) const
Gets a property for name.
virtual ossimScalarType getOutputScalarType() const
Returns the output pixel type of the tile source.
bool theSwapBytesFlag
DTED data is always stored as BIG_ENDIAN.
OSSIM_DLL void defaultTileSize(ossimIpt &tileSize)
double getMaxPix(ossim_uint32 band) const
const ossimIpt & ul() const
Definition: ossimIrect.h:274
virtual void getPropertyNames(std::vector< ossimString > &propertyNames) const
Adds this class&#39;s properties to list.
virtual ossimDataObjectStatus getDataObjectStatus() const
OSSIM_DLL ossimByteOrder byteOrder()
Definition: ossimCommon.cpp:54
static const ossimErrorCode OSSIM_ERROR
virtual void setDecimalDegreesPerPixel(const ossimDpt &gsd)
static StreamFactoryRegistry * instance()
void parse(std::istream &in)
bool intersects(const ossimIrect &rect) const
Definition: ossimIrect.cpp:183
unsigned short ossim_uint16
ossim_uint32 theDataRecordSize
virtual double getMaxPixelValue(ossim_uint32 band=0) const
Returns the max pixel of the band.
virtual bool write(const char *file, const char *comment=0) const
Methods to dump the ossimKeywordlist to a file on disk.
double getNullPix(ossim_uint32 band) const
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 getNumberOfBands() const
ossim_int32 numLatPoints() const
virtual bool isValidRLevel(ossim_uint32 resLevel) const
Determines if the passed in reslution level is valid.
bool completely_within(const ossimIrect &rect) const
Definition: ossimIrect.cpp:425
virtual ossim_uint32 getNumberOfLines(ossim_uint32 reduced_res_level=0) const
Returns the number of lines in the image.
virtual void getPropertyNames(std::vector< ossimString > &propertyNames) const
double ossim_float64
void add(const char *prefix, const ossimKeywordlist &kwl, bool overwrite=true)
bool fillBuffer(const ossimIrect &tile_rect, const ossimIrect &clip_rect, ossimImageData *tile)
Returns true on success, false on error.
virtual ossim_uint32 getImageTileWidth() const
Returns the tile width of the image or 0 if the image is not tiled.
void getPostSpacing(ossimDpt &postSpacing) const
Initializes spacing to the post spacing of the cell.
virtual bool getOverviewTile(ossim_uint32 resLevel, ossimImageData *result)
Method to get an overview tile.
static ossimImageDataFactory * instance()
void gatherStatistics(bool writeStatsFile)
Scans for min and max.
virtual ossimRefPtr< ossimImageData > getTile(const ossimIrect &tile_rect, ossim_uint32 resLevel=0)
virtual ossimString getLongName() const
virtual void loadMetaData()
Sets the min/max.
virtual ossimDataObjectStatus validate() const
bool exists() const
signed short ossim_sint16
unsigned int ossim_uint32
virtual const ossimEllipsoid * ellipsoid() const
Definition: ossimDatum.h:60
void parse(std::istream &in)
static ossimDatumFactory * instance()
virtual double getNullPixelValue(ossim_uint32 band=0) const
Each band has a null pixel associated with it.
virtual ossimIrect getImageRectangle() const
virtual void close()
Deletes the overview and clears the valid image vertices.
const ossimIpt & lr() const
Definition: ossimIrect.h:276
virtual void setOrigin(const ossimGpt &origin)
virtual ossimRefPtr< ossimImageData > create(ossimSource *owner, ossimScalarType scalar, ossim_uint32 bands=1) const
virtual double getMinPixelValue(ossim_uint32 band=0) const
Retuns the min pixel value.
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
virtual bool open()
Returns true if "theImageFile" can be opened and is a valid adrg file.
void parse(std::istream &in)
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...
ossimRefPtr< ossimImageData > theTile
return status
virtual bool saveState(ossimKeywordlist &kwl, const char *prefix=0) const
Method to save the state of an object to a keyword list.
virtual ossimRefPtr< ossimProperty > getProperty(const ossimString &name) const
virtual void makeBlank()
Initializes data to null pixel values.
virtual void completeOpen()
Will complete the opening process.
ossimImageMetaData theMetaData
void parse(std::istream &in)
ossimRefPtr< ossimImageHandler > theOverview
This class defines an abstract Handler which all image handlers(loaders) should derive from...
virtual ossimErrorCode getErrorStatus() const
virtual bool isOpen() const
Derived classes must implement this method to be concrete.
ossim_int32 y
Definition: ossimIpt.h:142
void allocate()
Allocated the tiles.
virtual const void * getBuf() const
virtual ossimRefPtr< ossimImageGeometry > getImageGeometry()
Returns the image geometry object associated with this tile source or NULL if not defined...
ossimFilename fileNoExtension() const
double x
Definition: ossimDpt.h:164
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...
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
ossim_uint32 theOffsetToFirstDataRecord
virtual ossim_uint32 getNumberOfOutputBands() const
Returns the number of bands in a tile returned from this TileSource.
void parse(std::istream &in)
double lonOrigin() const
std::shared_ptr< ossimDtedInfo > m_dtedInfo
virtual void setUlTiePoints(const ossimGpt &gpt)
virtual ossim_uint32 getNumberOfSamples(ossim_uint32 resLevel=0) const =0
Pure virtual, derived classes must implement.
ossim_int32 x
Definition: ossimIpt.h:141
ossim_int32 numLonLines() const
const ossimDatum * wgs84() const
#define RTTI_DEF1(cls, name, b1)
Definition: ossimRtti.h:485
const ossimDtedTileSource & operator=(const ossimDtedTileSource &rhs)
ossimFilename & setExtension(const ossimString &e)
Sets the extension of a file name.
virtual ossim_uint32 getNumberOfInputBands() const
Returns the number of bands in the image.
virtual ossim_uint32 getImageTileHeight() const
Returns the tile width of the image or 0 if the image is not tiled.
std::shared_ptr< ossim::istream > m_fileStr
16 bit signed integer
ossim_sint16 convertSignedMagnitude(ossim_uint16 &s) const
OSSIMDLLEXPORT std::ostream & ossimNotify(ossimNotifyLevel level=ossimNotifyLevel_WARN)
virtual ossim_uint32 getTileHeight() const
Returns the height of the output tile.
double lonInterval() const
virtual bool saveState(ossimKeywordlist &kwl, const char *prefix=0) const
Method to save the state of an object to a keyword list.
int ossim_int32