OSSIM - Open Source Software Image Map  Version 1.9.0 (20180803)
Public Member Functions | Protected Member Functions | Protected Attributes | List of all members
ossimHdf5GridModel Class Reference

#include <ossimHdf5GridModel.h>

Inheritance diagram for ossimHdf5GridModel:
ossimCoarseGridModel ossimSensorModel ossimProjection ossimOptimizableProjection ossimAdjustableParameterInterface ossimObject ossimErrorStatusInterface ossimReferenced

Public Member Functions

 ossimHdf5GridModel ()
 default constructor. More...
 
virtual ~ossimHdf5GridModel ()
 virtual destructor More...
 
bool initialize (ossimHdf5 *hdf5, const ossimString &projDataPath="")
 Initializes from an open HDF5 file. More...
 
virtual bool saveState (ossimKeywordlist &kwl, const char *prefix) const
 Makes sure that the "type" keyword entry reflects the base class, not this one. More...
 
- Public Member Functions inherited from ossimCoarseGridModel
 ossimCoarseGridModel ()
 
 ossimCoarseGridModel (const ossimCoarseGridModel &copy_this)
 
 ossimCoarseGridModel (const ossimFilename &geom_file)
 Accepts name of geometry file. More...
 
 ossimCoarseGridModel (const ossimKeywordlist &geom_kwl)
 Accepts OSSIM keywordlist geometry file. More...
 
 ~ossimCoarseGridModel ()
 
virtual void buildGrid (const ossimDrect &imageBounds, ossimProjection *proj, double heightDelta=500.0, bool enableHeightFlag=false, bool makeAdjustableFlag=true)
 This method will build a grid from any projector. More...
 
virtual void buildGrid (const ossimDrect &imageBounds, ossimImageGeometry *geom, double heightDelta=500.0, bool enableHeightFlag=false, bool makeAdjustableFlag=true)
 Assigns the grid data given a geometry. More...
 
virtual std::ostream & print (std::ostream &out) const
 Extends base-class implementation. More...
 
virtual bool loadState (const ossimKeywordlist &kwl, const char *prefix=0)
 Fulfills ossimObject base-class pure virtuals. More...
 
virtual ossimObjectdup () const
 Returns pointer to a new instance, copy of this. More...
 
bool saveCoarseGrid (const ossimFilename &cgFileName) const
 Saves the coarse grid to the specified file. More...
 
bool loadCoarseGrid (const ossimFilename &cgFileName)
 Loads the coarse grid from the specified file. More...
 
virtual void imagingRay (const ossimDpt &image_point, ossimEcefRay &image_ray) const
 
virtual void lineSampleToWorld (const ossimDpt &image_point, ossimGpt &gpt) const
 
virtual void lineSampleHeightToWorld (const ossimDpt &image_point, const double &heightEllipsoid, ossimGpt &world_pt) const
 This is the virtual that performs the actual work of projecting the image point to the earth at some specified elevation. More...
 
virtual void initAdjustableParameters ()
 
virtual bool useForward () const
 
virtual bool isAffectedByElevation () const
 image to ground faster More...
 
- Public Member Functions inherited from ossimSensorModel
 ossimSensorModel ()
 
 ossimSensorModel (const ossimSensorModel &copy_this)
 
 ossimSensorModel (const ossimKeywordlist &geom_kwl)
 
const ossimSensorModeloperator= (const ossimSensorModel &rhs)
 assignment operator More...
 
virtual ossimObjectgetBaseObject ()
 
virtual const ossimObjectgetBaseObject () const
 
virtual ossimGpt origin () const
 
virtual ossimDpt getMetersPerPixel () const
 
virtual const double & getNominalPosError () const
 Returns the estimated Absolute horizontal position error (CE90) of the sensor model. More...
 
virtual const double & getRelativePosError () const
 Returns the estimated RELATIVE horizontal position error (CE90) of the sensor model. More...
 
virtual void setNominalPosError (const double &ce90)
 Assigns the absolute image position error uncertainty (abs CE90) More...
 
virtual void setRelativePosError (const double &ce90)
 Assigns the relative image position error uncertainty (rel CE90) More...
 
virtual void worldToLineSample (const ossimGpt &world_point, ossimDpt &image_point) const
 
void setRefImgPt (const ossimDpt &pt)
 Sets the center line sampe of the image. More...
 
void setRefGndPt (const ossimGpt &pt)
 Sets the center latitude, longitude, height of the image. More...
 
void setImageRect (const ossimDrect &imageRect)
 
void setGroundRect (const ossimGpt &ul, const ossimGpt &ur, const ossimGpt &lr, const ossimGpt &ll)
 
ossimDpt imageSize () const
 
void setImageSize (const ossimDpt &size)
 
virtual void adjustableParametersChanged ()
 
virtual void updateModel ()
 
virtual bool insideImage (const ossimDpt &p) const
 
virtual bool operator== (const ossimProjection &proj) const
 
const ossimStringgetImageID () const
 Access methods: More...
 
const ossimDrectgetImageClipRect () const
 
virtual ossim_uint32 degreesOfFreedom () const
 
virtual bool needsInitialState () const
 needsInitialState() More...
 
virtual double optimizeFit (const ossimTieGptSet &tieSet, double *targetVariance=0)
 
virtual ossimDpt getForwardDeriv (int parmIdx, const ossimGpt &gpos, double hdelta=1e-11)
 
virtual ossimGpt getInverseDeriv (int parmIdx, const ossimDpt &ipos, double hdelta=1e-11)
 
virtual ossimSensorModel::CovMatStatus getObsCovMat (const ossimDpt &ipos, NEWMAT::SymmetricMatrix &Cov, const ossim_float64 defPointingSigma=0.5) const
 Gives 2X2 covariance matrix of observations. More...
 
void computeGsd ()
 This method computes the ground sample distance(gsd) and sets class attributes theGSD and theMeanGSD by doing a lineSampleHeightToWorld on four points and calculating the distance from them. More...
 
virtual bool getImageGeometry (const ossimString &, const ossimString &, ossimKeywordlist &) const
 Extracts geometry info from a non-ossim key,value pair to an ossim keyword list. More...
 
- Public Member Functions inherited from ossimProjection
 ossimProjection ()
 
virtual ~ossimProjection ()
 
virtual ossimDpt forward (const ossimGpt &wp) const
 
virtual ossimGpt inverse (const ossimDpt &pp) const
 
virtual void getRoundTripError (const ossimDpt &imagePoint, ossimDpt &errorResult) const
 
virtual void getRoundTripError (const ossimGpt &groundPoint, ossimDpt &errorResult) const
 
virtual void getGroundClipPoints (ossimGeoPolygon &gpts) const
 
virtual bool isEqualTo (const ossimObject &obj, ossimCompareType compareType=OSSIM_COMPARE_FULL) const
 
virtual bool operator!= (const ossimProjection &projection) const
 
- Public Member Functions inherited from ossimObject
 ossimObject ()
 
virtual ~ossimObject ()
 
virtual ossimString getShortName () const
 
virtual ossimString getLongName () const
 
virtual ossimString getDescription () const
 
virtual ossimString getClassName () const
 
virtual RTTItypeid getType () const
 
virtual bool canCastTo (ossimObject *obj) const
 
virtual bool canCastTo (const RTTItypeid &id) const
 
virtual bool canCastTo (const ossimString &parentClassName) const
 
virtual void accept (ossimVisitor &visitor)
 
- Public Member Functions inherited from ossimReferenced
 ossimReferenced ()
 
 ossimReferenced (const ossimReferenced &)
 
ossimReferencedoperator= (const ossimReferenced &)
 
void ref () const
 increment the reference count by one, indicating that this object has another pointer which is referencing it. More...
 
void unref () const
 decrement the reference count by one, indicating that a pointer to this object is referencing it. More...
 
void unref_nodelete () const
 decrement the reference count by one, indicating that a pointer to this object is referencing it. More...
 
int referenceCount () const
 
- Public Member Functions inherited from ossimErrorStatusInterface
 ossimErrorStatusInterface ()
 
virtual ~ossimErrorStatusInterface ()
 
virtual ossimErrorCode getErrorStatus () const
 
virtual ossimString getErrorStatusString () const
 
virtual void setErrorStatus (ossimErrorCode error_status) const
 
virtual void setErrorStatus () const
 
virtual void clearErrorStatus () const
 
bool hasError () const
 
- Public Member Functions inherited from ossimOptimizableProjection
 ossimOptimizableProjection ()
 
 ossimOptimizableProjection (const ossimOptimizableProjection &source)
 
virtual ~ossimOptimizableProjection ()
 
virtual ossimOptimizableProjectionoperator= (const ossimOptimizableProjection &source)
 
virtual bool setupOptimizer (const ossimString &setup)
 setupFromString() Derived classes should implement as needed. Initialize parameters needed for optimizeFit and degreesOfFreedom More...
 
- Public Member Functions inherited from ossimAdjustableParameterInterface
 ossimAdjustableParameterInterface ()
 
 ossimAdjustableParameterInterface (const ossimAdjustableParameterInterface &rhs)
 
virtual ~ossimAdjustableParameterInterface ()
 
void newAdjustment (ossim_uint32 numberOfParameters=0)
 
void setAdjustmentDescription (const ossimString &description)
 
ossimString getAdjustmentDescription () const
 
ossimString getAdjustmentDescription (ossim_uint32 adjustmentIdx) const
 Returns adjustmentDescription of specific adjustmentInfo. More...
 
void setCurrentAdjustment (ossim_uint32 adjustmentIndex, bool notify=false)
 
bool setCurrentAdjustment (const ossimString &description, bool notify=false)
 Sets the current adjustment to the adjustment with a matching description. More...
 
void eraseAdjustment (bool notify)
 
void eraseAdjustment (ossim_uint32 idx, bool notify)
 
void resetAdjustableParameters (bool notify=false)
 
void copyAdjustment (ossim_uint32 idx, bool notify)
 
void copyAdjustment (bool notify=false)
 
void keepAdjustment (ossim_uint32 idx, bool createCopy)
 
virtual void keepAdjustment (bool createCopy=true)
 
const ossimAdjustableParameterInterfaceoperator= (const ossimAdjustableParameterInterface &rhs)
 
void removeAllAdjustments ()
 
ossim_uint32 getNumberOfAdjustableParameters () const
 
double getAdjustableParameter (ossim_uint32 idx) const
 
virtual void setAdjustableParameter (ossim_uint32 idx, double value, bool notify=false)
 
virtual void setAdjustableParameter (ossim_uint32 idx, double value, double sigma, bool notify=false)
 
double getParameterSigma (ossim_uint32 idx) const
 
void setParameterSigma (ossim_uint32 idx, double value, bool notify=false)
 
ossimUnitType getParameterUnit (ossim_uint32 idx) const
 
void setParameterUnit (ossim_uint32 idx, ossimUnitType unit)
 
void setParameterUnit (ossim_uint32 idx, const ossimString &unit)
 
void setParameterCenter (ossim_uint32 idx, double center, bool notify=false)
 
double getParameterCenter (ossim_uint32 idx) const
 
double computeParameterOffset (ossim_uint32 idx) const
 
void setParameterOffset (ossim_uint32 idx, ossim_float64 value, bool notify=false)
 
ossimString getParameterDescription (ossim_uint32 idx) const
 
void setParameterDescription (ossim_uint32 idx, const ossimString &descrption)
 
ossim_int32 findParameterIdxGivenDescription (ossim_uint32 adjustmentIdx, const ossimString &name) const
 
ossim_int32 findParameterIdxContainingDescription (ossim_uint32 adjustmentIdx, const ossimString &name) const
 
bool isParameterLocked (ossim_uint32 idx) const
 
void setParameterLockFlag (ossim_uint32 idxParam, bool flag)
 
bool getParameterLockFlag (ossim_uint32 idx) const
 
void lockAllParametersCurrentAdjustment ()
 
void unlockAllParametersCurrentAdjustment ()
 
void lockAllParameters (ossim_uint32 idxAdjustment)
 
void unlockAllParameters (ossim_uint32 idxAdjustment)
 
void resizeAdjustableParameterArray (ossim_uint32 numberOfParameters)
 
void setAdjustment (const ossimAdjustmentInfo &adj, bool notify=false)
 
void setAdjustment (ossim_uint32 idx, const ossimAdjustmentInfo &adj, bool notify=false)
 
void addAdjustment (const ossimAdjustmentInfo &adj, bool notify)
 
void getAdjustment (ossimAdjustmentInfo &adj) const
 
void getAdjustment (ossim_uint32 idx, ossimAdjustmentInfo &adj) const
 
ossim_uint32 getNumberOfAdjustments () const
 
ossim_uint32 getCurrentAdjustmentIdx () const
 
void setDirtyFlag (bool flag=true)
 
void setAllDirtyFlag (bool flag=true)
 
bool hasDirtyAdjustments () const
 
virtual void saveCurrentAdjustmentOnly (ossimKeywordlist &kwl, const ossimString &prefix=ossimString(""))
 Saves the current active adjustment to the KWL file. More...
 
bool saveAdjustments (ossimKeywordlist &kwl, const ossimString &prefix=ossimString("")) const
 Save all adjustments to the KWL file. More...
 
bool loadAdjustments (const ossimKeywordlist &kwl, const ossimString &prefix=ossimString(""))
 
std::ostream & print (std::ostream &out) const
 Dumps the currently active adjustment to ostream. More...
 

Protected Member Functions

bool initCoarseGrid (const char *datasetName, ossimDblGrid &coarseGrid)
 
bool crossesDateline ()
 
- Protected Member Functions inherited from ossimCoarseGridModel
void reallocateGrid (const ossimIpt &size)
 Deletes existing allocated memory and reallocates new space. More...
 
void initializeModelParams (ossimIrect irect)
 Initializes base class data members after grids have been assigned. More...
 
virtual ossimGpt extrapolate (const ossimDpt &imgPt, const double &height=ossim::nan()) const
 Implements its own extrapolation since this can be handled by ossimDblGrid. More...
 
- Protected Member Functions inherited from ossimSensorModel
virtual ~ossimSensorModel ()
 
virtual ossimDpt extrapolate (const ossimGpt &gp) const
 
void buildNormalEquation (const ossimTieGptSet &tieSet, NEWMAT::SymmetricMatrix &A, NEWMAT::ColumnVector &residue, NEWMAT::ColumnVector &projResidue, double pstep_scale)
 
NEWMAT::ColumnVector getResidue (const ossimTieGptSet &tieSet)
 
NEWMAT::ColumnVector solveLeastSquares (NEWMAT::SymmetricMatrix &A, NEWMAT::ColumnVector &r) const
 
NEWMAT::Matrix invert (const NEWMAT::Matrix &m) const
 stable invert stolen from ossimRpcSolver More...
 
- Protected Member Functions inherited from ossimReferenced
virtual ~ossimReferenced ()
 
- Protected Member Functions inherited from ossimAdjustableParameterInterface
bool paramChanged (ossim_uint32 param_idx) const
 Returns true if specified parameter has been modified since last setAllChangeFlag(false) call. More...
 
void setAllChangeFlags (bool areChanged)
 Sets all the change flags to the boolean indicated to indicate parameters are changed (TRUE) or not (FALSE). More...
 
void initChangeFlags ()
 Initializes the change flags to TRUE. More...
 

Protected Attributes

ossimPolygon m_boundGndPolygon
 
ossimRefPtr< ossimHdf5m_hdf5
 
ossimIpt m_imageSize
 
ossimString m_projDataPath
 
- Protected Attributes inherited from ossimCoarseGridModel
ossimFilename theGridFilename
 
ossimDblGrid theLatGrid
 
ossimDblGrid theLonGrid
 
ossimDblGrid theDlatDhGrid
 
ossimDblGrid theDlonDhGrid
 
ossimDblGridtheDlatDparamGrid
 
ossimDblGridtheDlonDparamGrid
 
ossimAdjustmentInfo theInitialAdjustment
 
bool theHeightEnabledFlag
 
- Protected Attributes inherited from ossimSensorModel
ossimIpt theImageSize
 
ossimDpt theSubImageOffset
 
ossimString theImageID
 
ossimString theSensorID
 
ossimDpt theGSD
 
ossim_float64 theMeanGSD
 
ossimGpt theRefGndPt
 
ossimDpt theRefImgPt
 
ossimPolygon theBoundGndPolygon
 
ossimDrect theImageClipRect
 
ossim_float64 theRelPosError
 
ossim_float64 theNominalPosError
 
ossimDpt theParWRTx
 Partials for current point. More...
 
ossimDpt theParWRTy
 
ossimDpt theParWRTz
 
ossimDpt theObs
 Observations & residuals for current point. More...
 
ossimDpt theResid
 
ossimRefPtr< ossimProjectiontheSeedFunction
 Used as an initial guess for iterative solutions and a guess for points outside the support bounds. More...
 
bool theExtrapolateImageFlag
 
bool theExtrapolateGroundFlag
 
- Protected Attributes inherited from ossimErrorStatusInterface
ossimErrorCode theErrorStatus
 

Additional Inherited Members

- Public Types inherited from ossimSensorModel
enum  CovMatStatus { COV_INVALID = 0, COV_PARTIAL = 1, COV_FULL = 2 }
 
enum  DeriveMode {
  OBS_INIT =-99, EVALUATE =-98, P_WRT_X = -1, P_WRT_Y = -2,
  P_WRT_Z = -3
}
 
- Static Public Member Functions inherited from ossimCoarseGridModel
static void setInterpolationError (double error=.1)
 This is used when building a grid from a projector. More...
 
static void setMinGridSpacing (ossim_int32 minSpacing=100)
 
static void writeGeomTemplate (ostream &os)
 Writes a template of geometry keywords processed by loadState and saveState to output stream. More...
 
- Static Public Member Functions inherited from ossimSensorModel
static void writeGeomTemplate (ostream &os)
 
- Static Protected Attributes inherited from ossimCoarseGridModel
static double theInterpolationError = .1
 
static ossim_int32 theMinGridSpacing = 100
 

Detailed Description

Definition at line 35 of file ossimHdf5GridModel.h.

Constructor & Destructor Documentation

◆ ossimHdf5GridModel()

ossimHdf5GridModel::ossimHdf5GridModel ( )

◆ ~ossimHdf5GridModel()

ossimHdf5GridModel::~ossimHdf5GridModel ( )
virtual

virtual destructor

Definition at line 50 of file ossimHdf5GridModel.cpp.

51 {
52 }

Member Function Documentation

◆ crossesDateline()

bool ossimHdf5GridModel::crossesDateline ( )
protected

Definition at line 362 of file ossimHdf5GridModel.cpp.

References ossimDblGrid::getNode(), ossimDblGrid::setDomainType(), ossimDblGrid::size(), size, ossimCoarseGridModel::theLonGrid, ossimDblGrid::WRAP_180, ossimDblGrid::WRAP_360, x, and y.

Referenced by initialize().

363 {
364  bool crossesDateline = false;
365 
366  ossim_int32 longitude = 0;
367  bool found179 = false;
368  bool found181 = false;
369 
371  //double left, right;
372  //int xr = size.x-1;
373 
374  for (ossim_uint32 y=0; (y<(ossim_uint32)size.y) && !crossesDateline; ++y )
375  {
376 #if 0
377  left = theLonGrid.getNode(0, y);
378  right = theLonGrid.getNode(xr, y);
379  if (left > right)
380  crossesDateline = true;
381 #endif
382 
383  for ( ossim_uint32 x = 0; x<(ossim_uint32)size.x; ++x)
384  {
385  longitude = (ossim_int32) theLonGrid.getNode(x, y); // Cast to integer.
386 
387  // look for 179 -> -179...
388  if ( !found179 )
389  {
390  if ( longitude == 179 )
391  {
392  found179 = true;
393  continue;
394  }
395  }
396  else // found179 == true
397  {
398  if ( longitude == 178 )
399  {
400  break; // Going West, 179 -> 178
401  }
402  else if ( longitude == -179 )
403  {
404  crossesDateline = true;
405  break;
406  }
407  }
408 
409  // look for -179 -> 179...
410  if ( !found181 )
411  {
412  if ( longitude == -179 )
413  {
414  found181 = true;
415  continue;
416  }
417  }
418  else // found181 == true
419  {
420  if ( longitude == -178 )
421  {
422  break; // Going East -179 -> -178
423  }
424  else if ( longitude == 179 )
425  {
426  crossesDateline = true;
427  break;
428  }
429  }
430  }
431  }
432 
433  if ( crossesDateline )
435  else
437 
438  return crossesDateline;
439 }
ossim_uint32 x
ossim_uint32 y
const ossimIpt & size() const
Definition: ossimDblGrid.h:187
void setDomainType(DomainType dt)
Definition: ossimDblGrid.h:156
yy_size_t size
unsigned int ossim_uint32
double getNode(const ossimIpt &p) const
Definition: ossimDblGrid.h:111
int ossim_int32

◆ initCoarseGrid()

bool ossimHdf5GridModel::initCoarseGrid ( const char *  datasetName,
ossimDblGrid coarseGrid 
)
protected

Definition at line 98 of file ossimHdf5GridModel.cpp.

References ossimString::chars(), ossimHdf5::findDatasetByName(), ossimHdf5::findGroupByName(), m_hdf5, m_imageSize, m_projDataPath, ossimIpt::x, and ossimIpt::y.

Referenced by initialize().

99 {
100  ostringstream xmsg;
101 
102  // Convention used: (u,v) is file space, (x,y) is CG space
103  Group* group = m_hdf5->findGroupByName(m_projDataPath.chars(), 0, true);
104  DataSet* dataset = m_hdf5->findDatasetByName(datasetName, group, true);
105  if (dataset == NULL)
106  {
107  xmsg << "ossimHdf5GridModel:"<<__LINE__
108  <<" ERROR: Could not find dataset \""<<datasetName<<"\" in file.";
109  throw ossimException(xmsg.str());
110  }
111 
112  // Get dataspace of the dataset.
113  DataSpace dataSpace = dataset->getSpace();
114  const ossim_int32 DIM_COUNT = dataSpace.getSimpleExtentNdims();
115  if ( DIM_COUNT != 2 )
116  return false;
117 
118  // Get the extents. dimsOut[0] is height, dimsOut[1] is width:
119  std::vector<hsize_t> dimsOut(DIM_COUNT);
120  dataSpace.getSimpleExtentDims( &dimsOut.front(), 0 );
121  m_imageSize.y = dimsOut[0];
122  m_imageSize.x = dimsOut[1];
123 
124  // Initialize the ossimDblGrid. Round up if size doesn't fall on end pixel.
125  ossimDpt dspacing (GRID_SAMPLING_INTERVAL, GRID_SAMPLING_INTERVAL);
126  ossim_uint32 gridRows = m_imageSize.y / GRID_SAMPLING_INTERVAL + 1;
127  ossim_uint32 gridCols = m_imageSize.x / GRID_SAMPLING_INTERVAL + 1;
128  if ( m_imageSize.y % GRID_SAMPLING_INTERVAL)
129  ++gridRows;
130  if ( m_imageSize.x % GRID_SAMPLING_INTERVAL)
131  ++gridCols;
132  ossimIpt gridSize (gridCols, gridRows);
133 
134  // The grid as used in base class, has UV-space always at 0,0 origin
135  ossimDpt gridOrigin(0.0,0.0);
136  coarseGrid.setNullValue(ossim::nan());
137  coarseGrid.initialize(gridSize, gridOrigin, dspacing);
138 
139  std::vector<hsize_t> inputCount(DIM_COUNT);
140  std::vector<hsize_t> inputOffset(DIM_COUNT);
141 
142  inputOffset[0] = 0; // y_img is set below.
143  inputOffset[1] = 0;
144  inputCount[0] = 1; // y_img
145  inputCount[1] = (hsize_t)m_imageSize.x; // x_img
146 
147  // Output dataspace dimensions. Reading a line at a time.
148  const ossim_int32 OUT_DIM_COUNT = 3;
149  std::vector<hsize_t> outputCount(OUT_DIM_COUNT);
150  outputCount[0] = 1; // band
151  outputCount[1] = 1; // y_img
152  outputCount[2] = m_imageSize.x; // x_img
153 
154  // Output dataspace offset.
155  std::vector<hsize_t> outputOffset(OUT_DIM_COUNT);
156  outputOffset[0] = 0;
157  outputOffset[1] = 0;
158  outputOffset[2] = 0;
159 
160  ossimScalarType scalar = m_hdf5->getScalarType( *dataset);
161  if ( scalar != OSSIM_FLOAT32 )
162  return false;
163 
164  // See if we need to swap bytes:
165  ossimEndian endian;
166  bool needSwap = false;
167  if (m_hdf5->getByteOrder(dataset) != ossim::byteOrder())
168  needSwap = true;
169  DataType dataType = dataset->getDataType();
170 
171  // Output dataspace always the same, width of one line.
172  DataSpace bufferDataSpace( OUT_DIM_COUNT, &outputCount.front());
173  bufferDataSpace.selectHyperslab( H5S_SELECT_SET,
174  &outputCount.front(),
175  &outputOffset.front() );
176 
177  // Arrays to hold a single line of latitude longitude values.
178  vector<ossim_float32> values(m_imageSize.x);
179  ossim_float32 val = 0;
180  hsize_t y_img = 0;
181 
182  // Line loop:
183  for ( ossim_uint32 y = 0; y < gridRows; ++y )
184  {
185  // y_img = line in image space
186  y_img = y*GRID_SAMPLING_INTERVAL;
187  if ( y_img < (ossim_uint32) m_imageSize.y )
188  {
189  inputOffset[0] = y_img;
190  dataSpace.selectHyperslab( H5S_SELECT_SET, &inputCount.front(), &inputOffset.front() );
191 
192  // Read data from file into the buffer.
193  dataset->read( &(values.front()), dataType, bufferDataSpace, dataSpace );
194  if ( needSwap )
195  endian.swap( &(values.front()), m_imageSize.x );
196 
197  // Sample loop:
198  hsize_t x_img = 0;
199  for ( ossim_uint32 x = 0; x < gridCols; ++x )
200  {
201  // x_img = sample in image space
202  x_img = x*GRID_SAMPLING_INTERVAL;
203  if ( x_img < (ossim_uint32) m_imageSize.x )
204  {
205  val = values[x_img];
206  if (ossim::isnan(val)) // Nulls in grid!
207  {
208  xmsg << "ossimHdf5GridModel:"<<__LINE__<<" encountered nans!";
209  throw ossimException(xmsg.str());
210  }
211  }
212  else // Last column is outside of image bounds.
213  {
214  // Delta between last two latitude grid values.
215  ossim_float32 val1 = coarseGrid.getNode( x-2, y );
216  ossim_float32 val2 = coarseGrid.getNode( x-1, y );
217  ossim_float32 spacing = val2 - val1;
218  val = val2 + spacing;
219 
220 #if 0 /* Please leave for debug. (drb) */
221  cout << "val1: " << val1 << " val2 " << val2<<endl;;
222 #endif
223  }
224 
225  coarseGrid.setNode( x, y, val );
226 
227 #if 0 /* Please leave for debug. (drb) */
228  cout << "x,y,x_img,y_img,val:" << x << "," << y << ","<< x_img << "," << y_img << ","
229  << coarseGrid.getNode(x, y) << endl;
230 #endif
231  } // End sample loop.
232  }
233  else // Row is outside of image bounds:
234  {
235  // Sample loop:
236  for ( ossim_uint32 x = 0; x < gridCols; ++x )
237  {
238  ossim_float32 val = ossim::nan();
239  ossim_float32 val1 = coarseGrid.getNode( x, y-2 );
240  ossim_float32 val2 = coarseGrid.getNode( x, y-1 );
241  ossim_float32 spacing = val2 - val1;
242  val = val2 + spacing;
243  coarseGrid.setNode( x, y, val );
244 
245 #if 0 /* Please leave for debug. (drb) */
246  hsize_t x_img = x*GRID_SPACING; // Sample in image space
247  cout << "val1: " << val1 << " val2 " << val2
248  << "\nx,y,x_img,y_img,val:" << x << "," << y << ","
249  << x_img << "," << y_img << "," << val << endl;
250 #endif
251  } // End sample loop.
252  } // Matches if ( y_img < m_imageSize.y ){...}else{
253  } // End line loop.
254 
255  dataSpace.close();
256 
257  return true;
258 
259 #if 0
260  // Original refactor code ###############################################
261 
262  // Verify dimensions:
263  DataSpace dataSpace = dataset->getSpace();
264  if (dataSpace.getSimpleExtentNdims() != 2)
265  {
266  xmsg << "ossimHdf5GridModel:"<<__LINE__<<" ERROR: lat/lon grid dataspace rank != 2.";
267  throw ossimException(xmsg.str());
268  }
269 
270  // Fetch size of grid in file. Extents are assumed to be the same for both lat and lon grids:
271  hsize_t datExtents[2];
272  dataSpace.getSimpleExtentDims(datExtents);
273  if ((datExtents[0] < 2) || (datExtents[1] < 2))
274  {
275  xmsg << "ossimHdf5GridModel:"<<__LINE__<<" ERROR: lat/lon grid size is < 2.";
276  throw ossimException(xmsg.str());
277  }
278 
279  // Initialize the base class coarse grids:
280  theImageSize = ossimDpt(datExtents[0], datExtents[1]);
281  ossimDrect uvRect(0, 0, theImageSize.u-1, theImageSize.v-1);
282  ossimDpt cgSpacing(GRID_SAMPLING_INTERVAL, GRID_SAMPLING_INTERVAL);
283  coarseGrid.initialize(uvRect, cgSpacing, ossim::nan());
284 
285  // Declare data of interest in file (the whole thing):
286  hsize_t offset[2] = { 0, 0 };
287  dataSpace.selectHyperslab( H5S_SELECT_SET, datExtents, offset );
288 
289  // Initialize dataspace for memory buffer needed by dataset read operation:
290  hsize_t bufExtents[2] = { (hsize_t) theImageSize.u, 1 };
291  DataSpace bufSpace(2, bufExtents);
292  DataType dataType = dataset->getDataType();
293  string cname = dataType.fromClass();
294  cout << cname<<endl;
295  if (dataType.getClass() != H5T_FLOAT)
296  {
297  xmsg << "ossimHdf5GridModel:"<<__LINE__<<" ERROR: lat/lon grid datatype must be float.";
298  throw ossimException(xmsg.str());
299  }
300  ossim_float32* buffer = new ossim_float32 [bufExtents[0]]; // assumes float datatype
301 
302  // See if we need to swap bytes:
303  ossimEndian* endian = 0;
304  AtomType* atomType = dynamic_cast<AtomType*>(&dataType);
305  if(atomType)
306  {
308  H5T_order_t h5order = atomType->getOrder();
309  if( ((h5order == H5T_ORDER_LE) && (ossimByteOrder != OSSIM_LITTLE_ENDIAN)) ||
310  ((h5order == H5T_ORDER_BE) && (ossimByteOrder != OSSIM_BIG_ENDIAN)))
311  endian = new ossimEndian();
312  }
313 
314  // Loop over input grid rows, sampling according to desired interval to fill output
315  // coarse grid, for latitude:
316  ossimIpt cgGridSize (coarseGrid.size());
317  ossim_uint32 x=0, y=0, u=0, v=0;
318  for ( ; (y<cgGridSize.y) && (v<theImageSize.v); ++y, v+=GRID_SAMPLING_INTERVAL )
319  {
320  offset[1] = v; // offset[0] always = 0
321  dataSpace.selectHyperslab( H5S_SELECT_SET, bufExtents, offset);
322  dataset->read( buffer, dataType, bufSpace, dataSpace );
323  if ( endian )
324  endian->swap( buffer, bufExtents[0] );
325 
326  // Need to subsample the input row and save into coarse grid:
327  for ( x=0, u=0; (x<cgGridSize.x)&&(u<theImageSize.u); ++x, u+=GRID_SAMPLING_INTERVAL)
328  {
329  { // TODO REMOVE DEBUG BLOCK
330  cout<<datasetName<<" ("<<x<<", "<<y<<"): "<<buffer[u]<<endl;
331  }
332 
333  if ( ossim::isnan(buffer[u]))
334  {
335  xmsg << "ossimHdf5GridModel:"<<__LINE__<<" ERROR: encountered nans in lat/lon grid.";
336  throw ossimException(xmsg.str());
337  }
338  coarseGrid.setNode( x, y, buffer[u] );
339  }
340 
341  // Check if last column is outside of image bounds.
342  if (x < cgGridSize.x)
343  coarseGrid.setNode( x, y, coarseGrid.getNode( x-1, y ) );
344  }
345 
346  // Check if last row is outside of image bounds.
347  if (y < cgGridSize.y)
348  {
349  for ( x=0; x<cgGridSize.x; ++x)
350  coarseGrid.setNode( x, y, coarseGrid.getNode( x, y-1 ) );
351  }
352 
353  delete dataset;
354  delete buffer;
355  delete endian;
356 
357  return true;
358 #endif
359 }
ossim_uint32 x
ossim_int32 v
Definition: ossimIpt.h:142
std::basic_ostringstream< char > ostringstream
Class for char output memory streams.
Definition: ossimIosFwd.h:35
ossim_uint32 y
float ossim_float32
double nan()
Method to return ieee floating point double precision NAN.
Definition: ossimCommon.h:135
const ossimIpt & size() const
Definition: ossimDblGrid.h:187
void setNullValue(double value)
Definition: ossimDblGrid.h:183
void initialize(const ossimIpt &size, const ossimDpt &origin, const ossimDpt &spacing, double null_value=OSSIM_DEFAULT_NULL_PIX_DOUBLE)
OSSIM_DLL ossimByteOrder byteOrder()
Definition: ossimCommon.cpp:54
ossim_int32 u
Definition: ossimIpt.h:141
ossimString m_projDataPath
32 bit floating point
static ossimByteOrder getByteOrder(const H5::AbstractDs *obj)
Definition: ossimHdf5.cpp:337
static ossimScalarType getScalarType(const H5::DataSet &dataset)
Definition: ossimHdf5.cpp:475
H5::Group * findGroupByName(const std::string &group_name, const H5::Group *parent_group=0, bool recursive=false) const
Finds a group by name.
Definition: ossimHdf5.cpp:251
unsigned int ossim_uint32
const char * chars() const
For backward compatibility.
Definition: ossimString.h:77
double getNode(const ossimIpt &p) const
Definition: ossimDblGrid.h:111
ossimByteOrder
ossimScalarType
H5::DataSet * findDatasetByName(const std::string &dataset_name, const H5::Group *group=0, bool recursive=false) const
Finds a dataset by name.
Definition: ossimHdf5.cpp:295
ossim_int32 y
Definition: ossimIpt.h:142
ossim_int32 x
Definition: ossimIpt.h:141
ossimRefPtr< ossimHdf5 > m_hdf5
void swap(ossim_sint8 &)
Definition: ossimEndian.h:26
void setNode(const ossimIpt &p, const double &value)
Definition: ossimDblGrid.h:107
int ossim_int32
bool isnan(const float &v)
isnan Test for floating point Not A Number (NAN) value.
Definition: ossimCommon.h:91

◆ initialize()

bool ossimHdf5GridModel::initialize ( ossimHdf5 hdf5,
const ossimString projDataPath = "" 
)

Initializes from an open HDF5 file.

Definition at line 54 of file ossimHdf5GridModel.cpp.

References crossesDateline(), initCoarseGrid(), ossimDblGrid::initialize(), ossimCoarseGridModel::initializeModelParams(), m_hdf5, m_imageSize, m_projDataPath, ossimDblGrid::maxValue(), ossimDblGrid::minValue(), ossimDblGrid::origin(), ossimNotify(), ossimNotifyLevel_FATAL, ossimDblGrid::size(), ossimDblGrid::spacing(), ossimCoarseGridModel::theDlatDhGrid, ossimCoarseGridModel::theDlonDhGrid, ossimCoarseGridModel::theHeightEnabledFlag, ossimSensorModel::theImageSize, ossimCoarseGridModel::theLatGrid, ossimCoarseGridModel::theLonGrid, ossimSensorModel::theSeedFunction, ossimIpt::u, ossimIpt::v, ossimIpt::x, x, and ossimIpt::y.

Referenced by ossimHdf5ProjectionFactory::createProjection(), and ossimViirsHandler::getImageGeometry().

55 {
56  if (!hdf5)
57  return false;
58 
59  m_hdf5 = hdf5;
60  m_projDataPath = projDataPath;
61  theHeightEnabledFlag = false;
62 
63  try
64  {
65  initCoarseGrid("Latitude", theLatGrid);
66  initCoarseGrid("Longitude", theLonGrid);
67  }
68  catch (ossimException& x)
69  {
71  return false;
72  }
73 
76 
77  // Check for dateline crossing among the longitude grid:
79 
84  ossimDrect imageRect(0, 0, m_imageSize.x-1, m_imageSize.y-1);
85  theSeedFunction = new ossimBilinearProjection(imageRect.ul(), imageRect.ur(),
86  imageRect.lr(), imageRect.ll(),
87  ulg, urg, lrg, llg);
88 
89  // Bileaner projection to handle
90  initializeModelParams(imageRect);
91 
92  ossimIrect bounds (0, 0, theImageSize.u-1, theImageSize.v-1);
93  initializeModelParams(bounds);
94 
95  return true;
96 }
ossim_uint32 x
ossim_int32 v
Definition: ossimIpt.h:142
const ossimIpt & size() const
Definition: ossimDblGrid.h:187
void initialize(const ossimIpt &size, const ossimDpt &origin, const ossimDpt &spacing, double null_value=OSSIM_DEFAULT_NULL_PIX_DOUBLE)
ossim_int32 u
Definition: ossimIpt.h:141
double maxValue() const
Definition: ossimDblGrid.h:176
ossimString m_projDataPath
double minValue() const
Definition: ossimDblGrid.h:175
ossimRefPtr< ossimProjection > theSeedFunction
Used as an initial guess for iterative solutions and a guess for points outside the support bounds...
bool initCoarseGrid(const char *datasetName, ossimDblGrid &coarseGrid)
const ossimDpt & origin() const
Definition: ossimDblGrid.h:188
ossim_int32 y
Definition: ossimIpt.h:142
void initializeModelParams(ossimIrect irect)
Initializes base class data members after grids have been assigned.
ossim_int32 x
Definition: ossimIpt.h:141
ossimRefPtr< ossimHdf5 > m_hdf5
OSSIMDLLEXPORT std::ostream & ossimNotify(ossimNotifyLevel level=ossimNotifyLevel_WARN)
const ossimDpt & spacing() const
Definition: ossimDblGrid.h:189

◆ saveState()

bool ossimHdf5GridModel::saveState ( ossimKeywordlist kwl,
const char *  prefix 
) const
virtual

Makes sure that the "type" keyword entry reflects the base class, not this one.

Reimplemented from ossimCoarseGridModel.

Definition at line 442 of file ossimHdf5GridModel.cpp.

References ossimKeywordlist::add(), ossimCoarseGridModel::saveState(), and ossimKeywordNames::TYPE_KW.

443 {
444  bool stat = ossimCoarseGridModel::saveState(kwl, prefix);
445  kwl.add(prefix, ossimKeywordNames::TYPE_KW, "ossimCoarseGridModel", true);
446 
447  return stat;
448 }
static const char * TYPE_KW
void add(const char *prefix, const ossimKeywordlist &kwl, bool overwrite=true)
virtual bool saveState(ossimKeywordlist &kwl, const char *prefix=0) const
Fulfills ossimObject base-class pure virtuals.

Member Data Documentation

◆ m_boundGndPolygon

ossimPolygon ossimHdf5GridModel::m_boundGndPolygon
protected

Definition at line 60 of file ossimHdf5GridModel.h.

◆ m_hdf5

ossimRefPtr<ossimHdf5> ossimHdf5GridModel::m_hdf5
protected

Definition at line 62 of file ossimHdf5GridModel.h.

Referenced by initCoarseGrid(), and initialize().

◆ m_imageSize

ossimIpt ossimHdf5GridModel::m_imageSize
protected

Definition at line 63 of file ossimHdf5GridModel.h.

Referenced by initCoarseGrid(), and initialize().

◆ m_projDataPath

ossimString ossimHdf5GridModel::m_projDataPath
protected

Definition at line 64 of file ossimHdf5GridModel.h.

Referenced by initCoarseGrid(), and initialize().


The documentation for this class was generated from the following files: