OSSIM - Open Source Software Image Map  Version 1.9.0 (20180803)
Public Member Functions | Private Member Functions | Private Attributes | List of all members
ossimplugins::ossimRadarSat2Model Class Reference

This class allows for direct localisation and indirect localisation using the RadarSat2 sensor model. More...

#include <ossimRadarSat2Model.h>

Inheritance diagram for ossimplugins::ossimRadarSat2Model:
ossimplugins::ossimGeometricSarSensorModel ossimSensorModel ossimProjection ossimOptimizableProjection ossimAdjustableParameterInterface ossimObject ossimErrorStatusInterface ossimReferenced

Public Member Functions

 ossimRadarSat2Model ()
 default constructor More...
 
 ossimRadarSat2Model (const ossimRadarSat2Model &rhs)
 copy constructor More...
 
virtual ~ossimRadarSat2Model ()
 Destructor. More...
 
virtual ossimString getClassName () const
 Method to return the class name. More...
 
virtual ossimObjectdup () const
 Returns pointer to a new instance, copy of this. More...
 
virtual double getSlantRangeFromGeoreferenced (double col) const
 This function associates an image column number to a slant range when the image is georeferenced (ground projected) More...
 
bool open (const ossimFilename &file)
 Method to intantial model from a file. More...
 
virtual bool saveState (ossimKeywordlist &kwl, const char *prefix=0) const
 Method to save object state to a keyword list. More...
 
virtual bool loadState (const ossimKeywordlist &kwl, const char *prefix=0)
 Method to the load (recreate) the state of the object from a keyword list. More...
 
virtual std::ostream & print (std::ostream &out) const
 
- Public Member Functions inherited from ossimplugins::ossimGeometricSarSensorModel
 ossimGeometricSarSensorModel ()
 default constructor More...
 
 ossimGeometricSarSensorModel (const ossimGeometricSarSensorModel &rhs)
 copy constructor More...
 
virtual ~ossimGeometricSarSensorModel ()
 Destructor. More...
 
virtual double getSlantRange (double col) const
 This function associates an image column number to a slant range. More...
 
virtual JSDDateTime getTime (double line) const
 This function associates an image line number to an azimuth time. More...
 
virtual bool getPlatformPositionAtLine (double line, vector< double > &position, vector< double > &speed)
 This function associates an image line number to a platform position and speed. More...
 
virtual void lineSampleHeightToWorld (const ossimDpt &image_point, const double &heightEllipsoid, ossimGpt &worldPoint) const
 This function is able to convert image coordinates into world coordinates the geometric model of SAR sensors. More...
 
virtual bool optimizeModel (const std::list< ossimGpt > &groundCoordinates, const std::list< ossimDpt > &imageCoordinates)
 This function optimizes the model according to a list of Ground Control Points. More...
 
virtual void clearGCPlist ()
 Clears _optimizationGCPsGroundCoordinates and _optimizationGCPsImageCoordinates attributes Updates the optimisation factors and bias. More...
 
virtual void getGCPlist (std::list< ossimGpt > &groundCoordinates, std::list< ossimDpt > &imageCoordinates)
 Returns _optimizationGCPsGroundCoordinates and _optimizationGCPsImageCoordinates attributes. More...
 
virtual bool useForward () const
 
double get_optimizationFactorX () const
 Accessors to the optimization parameters. More...
 
double get_optimizationFactorY () const
 
double get_optimizationBiasX () const
 
double get_optimizationBiasY () const
 
ossimRefPtr< ossimCoarseGridModelgetReplacementOcgModel ()
 
virtual void lineSampleToWorld (const ossimDpt &image_point, ossimGpt &gpt) const
 
void set_platformPosition (PlatformPosition *platformPosition)
 Accessors to the plateform, sensor parameters and reference point. More...
 
void set_sensorParams (SensorParams *sensorParams)
 
void set_refPoint (RefPoint *refPoint)
 
PlatformPositionget_platformPosition () const
 
SensorParamsget_sensorParams () const
 
RefPointget_refPoint () const
 
- 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
 
virtual void imagingRay (const ossimDpt &image_point, ossimEcefRay &image_ray) 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...
 
virtual bool isAffectedByElevation () const
 Implementation of pure virtual ossimProjection::isAffectedByElevation method. 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 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)
 
virtual void initAdjustableParameters ()
 
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...
 

Private Member Functions

virtual bool InitPlatformPosition (const ossimKeywordlist &kwl, const char *prefix)
 Initializes the Platform Position from a projection keywordlist. More...
 
virtual bool InitSensorParams (const ossimKeywordlist &kwl, const char *prefix)
 Initializes the Sensor Params from a projection keywordlist. More...
 
virtual bool InitRefPoint (const ossimKeywordlist &kwl, const char *prefix)
 Initializes the Reference Point from a projection keywordlist. More...
 
virtual bool InitRefNoiseLevel (const ossimXmlDocument *xmlDocument)
 
virtual bool InitLut (const ossimXmlDocument *xmlDocument, RadarSat2NoiseLevel &noise)
 
virtual bool InitSRGR (const ossimKeywordlist &kwl, const char *prefix)
 Initializes the Slant Range to Ground Range data sets : _srgr_update,_SrGr_R0,_SrGr_coeffs_number,_SrGr_coeffs,_nbCol, _pixel_spacing. More...
 
int FindSRGRSetNumber (JSDDateTime date) const
 Finds the SRGR data set which update time is the closest to the center scene time. More...
 
bool initSRGR (const ossimXmlDocument *xdoc, const ossimRadarSat2ProductDoc &rsDoc)
 
bool initPlatformPosition (const ossimXmlDocument *xdoc, const ossimRadarSat2ProductDoc &rsDoc)
 
bool initSensorParams (const ossimXmlDocument *xdoc, const ossimRadarSat2ProductDoc &rsDoc)
 
bool initRefPoint (const ossimXmlDocument *xdoc, const ossimRadarSat2ProductDoc &rsDoc)
 Method to initialize RefPoint object from RadarSat "product.xml" file. More...
 
bool setModelRefPoint (const std::list< ossimGpt > &groundGcpCoordinates, const std::list< ossimDpt > &imageGcpCoordinates)
 Sets ossimSensorModel members theRefImgPt and theRefGndPt from tie points. More...
 

Private Attributes

int _n_srgr
 Slant Range FOR EACH Ground Range (SRGR) number of coefficients sets. More...
 
std::vector< double > _srgr_update
 Slant Range FOR EACH Ground Range coefficient sets update times. More...
 
std::vector< double > _SrGr_R0
 Slant Range FOR EACH Ground Range Projection reference point. More...
 
std::vector< std::vector< double > > _SrGr_coeffs
 Slant Range FOR EACH Ground Range Projection coefficients. More...
 
std::vector< RadarSat2NoiseLevel_noiseLevel
 noise level values More...
 

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 ossimSensorModel
static void writeGeomTemplate (ostream &os)
 
- Static Public Attributes inherited from ossimplugins::ossimGeometricSarSensorModel
static const char * CREATE_OCG_PREF_KW = "geometric_sar_sensor_model.create_ocg"
 
- Protected Member Functions inherited from ossimplugins::ossimGeometricSarSensorModel
bool createReplacementOCG ()
 Creates replacement coarse grid model if user requested via ossim preferences keyword "geometric_sar_sensor_model.create_ocg: <bool>". More...
 
- Protected Member Functions inherited from ossimSensorModel
virtual ~ossimSensorModel ()
 
virtual ossimDpt extrapolate (const ossimGpt &gp) const
 
virtual ossimGpt extrapolate (const ossimDpt &ip, const double &height=ossim::nan()) 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 inherited from ossimplugins::ossimGeometricSarSensorModel
PlatformPosition_platformPosition
 Handle the position of the platform. More...
 
SensorParams_sensor
 
RefPoint_refPoint
 
SarSensor_sarSensor
 
bool _isProductGeoreferenced
 True iff the product is ground range. More...
 
std::list< ossimGpt_optimizationGCPsGroundCoordinates
 List Ground Control Points used by the optimization. More...
 
std::list< ossimDpt_optimizationGCPsImageCoordinates
 
double _optimizationFactorX
 Optimization result : linear error correction in both dimensions. More...
 
double _optimizationFactorY
 
double _optimizationBiasX
 
double _optimizationBiasY
 
ossimFilename _imageFilename
 
ossimFilename _productXmlFile
 
ossimRefPtr< ossimCoarseGridModel_replacementOcgModel
 
- 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
 

Detailed Description

This class allows for direct localisation and indirect localisation using the RadarSat2 sensor model.

Definition at line 45 of file ossimRadarSat2Model.h.

Constructor & Destructor Documentation

◆ ossimRadarSat2Model() [1/2]

ossimplugins::ossimRadarSat2Model::ossimRadarSat2Model ( )

default constructor

Definition at line 49 of file ossimRadarSat2Model.cpp.

Referenced by dup().

50  :
52  _n_srgr(0),
53  _srgr_update(),
54  _SrGr_R0()
55 {
56 }
int _n_srgr
Slant Range FOR EACH Ground Range (SRGR) number of coefficients sets.
std::vector< double > _SrGr_R0
Slant Range FOR EACH Ground Range Projection reference point.
std::vector< double > _srgr_update
Slant Range FOR EACH Ground Range coefficient sets update times.

◆ ossimRadarSat2Model() [2/2]

ossimplugins::ossimRadarSat2Model::ossimRadarSat2Model ( const ossimRadarSat2Model rhs)

copy constructor

Definition at line 58 of file ossimRadarSat2Model.cpp.

59  :
61  _n_srgr(rhs._n_srgr),
62  _srgr_update(rhs._srgr_update),
63  _SrGr_R0(rhs._SrGr_R0)
64 {
65 }
int _n_srgr
Slant Range FOR EACH Ground Range (SRGR) number of coefficients sets.
std::vector< double > _SrGr_R0
Slant Range FOR EACH Ground Range Projection reference point.
std::vector< double > _srgr_update
Slant Range FOR EACH Ground Range coefficient sets update times.

◆ ~ossimRadarSat2Model()

ossimplugins::ossimRadarSat2Model::~ossimRadarSat2Model ( )
virtual

Destructor.

Definition at line 67 of file ossimRadarSat2Model.cpp.

68 {
69 }

Member Function Documentation

◆ dup()

ossimObject * ossimplugins::ossimRadarSat2Model::dup ( ) const
virtual

Returns pointer to a new instance, copy of this.

Implements ossimProjection.

Definition at line 76 of file ossimRadarSat2Model.cpp.

References ossimRadarSat2Model().

77 {
78  return new ossimRadarSat2Model(*this);
79 }

◆ FindSRGRSetNumber()

int ossimplugins::ossimRadarSat2Model::FindSRGRSetNumber ( JSDDateTime  date) const
private

Finds the SRGR data set which update time is the closest to the center scene time.

Definition at line 663 of file ossimRadarSat2Model.cpp.

References _n_srgr, _srgr_update, ossimplugins::JSDDateTime::get_decimal(), and ossimplugins::JSDDateTime::get_second().

Referenced by getSlantRangeFromGeoreferenced().

664 {
665  if (_n_srgr==0) return(-1) ;
666 
667  double delays[20];
668  for (int i=0;i<_n_srgr;i++)
669  {
670  delays[i] = fabs(date.get_second()+date.get_decimal()-_srgr_update[i]) ;
671  }
672 
673  int setNumber = 0 ;
674  double min_delay = delays[0] ;
675  for (int i=1;i<_n_srgr;i++)
676  {
677  if (delays[i]<min_delay) {
678  setNumber = i ;
679  min_delay = delays[i] ;
680  }
681  }
682  return setNumber ;
683 }
int _n_srgr
Slant Range FOR EACH Ground Range (SRGR) number of coefficients sets.
std::vector< double > _srgr_update
Slant Range FOR EACH Ground Range coefficient sets update times.

◆ getClassName()

ossimString ossimplugins::ossimRadarSat2Model::getClassName ( ) const
virtual

Method to return the class name.

Returns
The name of this class.

Reimplemented from ossimObject.

Definition at line 71 of file ossimRadarSat2Model.cpp.

Referenced by loadState().

72 {
73  return ossimString("ossimRadarSat2Model");
74 }

◆ getSlantRangeFromGeoreferenced()

double ossimplugins::ossimRadarSat2Model::getSlantRangeFromGeoreferenced ( double  col) const
virtual

This function associates an image column number to a slant range when the image is georeferenced (ground projected)

Parameters
colColumn coordinate of the image point
Todo:
: could be improved (date choice)

Implements ossimplugins::ossimGeometricSarSensorModel.

Definition at line 81 of file ossimRadarSat2Model.cpp.

References _n_srgr, ossimplugins::ossimGeometricSarSensorModel::_refPoint, ossimplugins::ossimGeometricSarSensorModel::_sensor, _SrGr_coeffs, FindSRGRSetNumber(), ossimplugins::SensorParams::get_col_direction(), ossimplugins::RefPoint::get_distance(), ossimplugins::RefPoint::get_ephemeris(), ossimplugins::RefPoint::get_pix_col(), if(), ossimNotify(), ossimNotifyLevel_DEBUG, ossimSensorModel::theGSD, and ossimDpt::x.

82 {
83  if (_n_srgr==0) return(-1) ;
84 
85  double relativeGroundRange, slantRange = 0.0 ;
86 
87  // in the case of Georeferenced images, _refPoint->get_distance()
88  // contains the ground range
89  relativeGroundRange = _refPoint->get_distance() + _sensor->get_col_direction() * (col-_refPoint->get_pix_col())* theGSD.x;
90  //relativeGroundRange = 1 + _sensor->get_col_direction() * (col-_refPoint->get_pix_col())* theGSD.x;
91  //relativeGroundRange = (8.78400000e+03)*theGSD.x;
92 
93  if ( traceDebug() )
94  {
96  << "_refPoint->get_distance(): " << _refPoint->get_distance()
97  << "\n_sensor->get_col_direction() " << _sensor->get_col_direction()
98  << "\n(col-_refPoint->get_pix_col()) "
99  << (col-_refPoint->get_pix_col())
100  << "\n_refPoint->get_pix_col() : " << _refPoint->get_pix_col()
101  << "\n relativeGroundRange : " << relativeGroundRange << endl;
102  }
103 
104  int numSet = FindSRGRSetNumber((_refPoint->get_ephemeris())->get_date()) ;
109  for (int i=0 ; i < static_cast<int>(_SrGr_coeffs[numSet].size()); i++)
110  {
111 
112  slantRange += _SrGr_coeffs[numSet][i]*pow(relativeGroundRange,i) ;
113  }
114 
115  return slantRange ;
116 }
Ephemeris * get_ephemeris()
Definition: RefPoint.cpp:90
double get_distance() const
Definition: RefPoint.cpp:95
int FindSRGRSetNumber(JSDDateTime date) const
Finds the SRGR data set which update time is the closest to the center scene time.
int _n_srgr
Slant Range FOR EACH Ground Range (SRGR) number of coefficients sets.
double get_pix_col() const
Definition: RefPoint.cpp:105
if(yy_init)
double x
Definition: ossimDpt.h:164
std::vector< std::vector< double > > _SrGr_coeffs
Slant Range FOR EACH Ground Range Projection coefficients.
OSSIMDLLEXPORT std::ostream & ossimNotify(ossimNotifyLevel level=ossimNotifyLevel_WARN)

◆ InitLut()

bool ossimplugins::ossimRadarSat2Model::InitLut ( const ossimXmlDocument xmlDocument,
RadarSat2NoiseLevel noise 
)
privatevirtual

Definition at line 997 of file ossimRadarSat2Model.cpp.

References ossimplugins::ossimGeometricSarSensorModel::_productXmlFile, ossimString::begin(), ossimString::clear(), ossimFilename::dirCat(), ossimFilename::exists(), ossimFilename::expand(), ossimXmlDocument::findNodes(), ossimplugins::RadarSat2NoiseLevel::get_incidenceAngleCorrectionName(), ossimXmlDocument::openFile(), ossimNotify(), ossimNotifyLevel_DEBUG, ossimFilename::path(), ossimplugins::RadarSat2NoiseLevel::set_gain(), ossimplugins::RadarSat2NoiseLevel::set_offset(), ossimErrorStatusInterface::setErrorStatus(), and ossimString::toFloat64().

Referenced by InitRefNoiseLevel().

999 {
1000  static const char MODULE[] = "ossimRadarSat2Model::initLut";
1001  if (traceDebug())
1002  {
1003  ossimNotify(ossimNotifyLevel_DEBUG)<< MODULE << " entered...\n";
1004  }
1005 
1006  ossimString xpath;
1007  ossimString incidenceAngleCorrectionName;
1008  std::vector<ossimRefPtr<ossimXmlNode> > xml_nodes;
1009  std::vector<ossimRefPtr<ossimXmlNode> >::iterator node;
1010  ossimFilename lutXmlFile;
1011 
1012  incidenceAngleCorrectionName = noise.get_incidenceAngleCorrectionName();
1013 
1014  xpath = "/product/imageAttributes/lookupTable";
1015  xml_nodes.clear();
1016  xmlDocument->findNodes(xpath, xml_nodes);
1017  if(xml_nodes.size() == 0)
1018  {
1019  setErrorStatus();
1020  if(traceDebug())
1021  {
1023  << MODULE << " DEBUG:"
1024  << "\nCould not find: " << xpath
1025  << std::endl;
1026  }
1027  return false;
1028  }
1029 
1030  node = xml_nodes.begin();
1031  while (node != xml_nodes.end())
1032  {
1033  if( (*node)->getAttributeValue("incidenceAngleCorrection") == incidenceAngleCorrectionName )
1034  {
1035  // Get the xml file.
1036  lutXmlFile = _productXmlFile.expand().path().dirCat((*node)->getText());
1037 
1038  if ( lutXmlFile.exists() )
1039  {
1040  //---
1041  // Instantiate the XML parser:
1042  //---
1043  ossimXmlDocument* xmlLutDocument = new ossimXmlDocument();
1044  if ( xmlLutDocument->openFile(lutXmlFile) )
1045  {
1046  std::vector<ossimRefPtr<ossimXmlNode> > xml_lutNodes;
1047  ossimString s;
1048 
1049  xpath = "/lut/offset";
1050  xml_lutNodes.clear();
1051  xmlLutDocument->findNodes(xpath, xml_lutNodes);
1052  if(xml_lutNodes.size() == 0)
1053  {
1054  setErrorStatus();
1055  if(traceDebug())
1056  {
1058  << MODULE << " DEBUG:"
1059  << "\nCould not find: " << xpath
1060  << std::endl;
1061  }
1062  return false;
1063  }
1064  ossim_float64 offset = xml_lutNodes[0]->getText().toFloat64();
1065  noise.set_offset(offset);
1066 
1067  xpath = "/lut/gains";
1068  xml_lutNodes.clear();
1069  xmlLutDocument->findNodes(xpath, xml_lutNodes);
1070  if(xml_lutNodes.size() == 0)
1071  {
1072  setErrorStatus();
1073  if(traceDebug())
1074  {
1076  << MODULE << " DEBUG:"
1077  << "\nCould not find: " << xpath
1078  << std::endl;
1079  }
1080  return false;
1081  }
1082  noise.set_gain(xml_lutNodes[0]->getText());
1083  }
1084  }
1085  }
1086  ++node;
1087  }
1088 
1089  if (traceDebug())
1090  {
1091  ossimNotify(ossimNotifyLevel_DEBUG)<< MODULE << " leaving...\n";
1092  }
1093 
1094  return true;
1095 }
void clear()
Erases the entire container.
Definition: ossimString.h:432
ossimFilename expand() const
Method to do file name expansion.
double ossim_float64
bool openFile(const ossimFilename &filename)
bool exists() const
std::string::iterator begin()
Definition: ossimString.h:420
ossim_float64 toFloat64() const
ossimFilename dirCat(const ossimFilename &file) const
void findNodes(const ossimString &xpath, std::vector< ossimRefPtr< ossimXmlNode > > &nodelist) const
Appends any matching nodes to the list supplied (should be empty):
ossimFilename path() const
OSSIMDLLEXPORT std::ostream & ossimNotify(ossimNotifyLevel level=ossimNotifyLevel_WARN)

◆ InitPlatformPosition()

bool ossimplugins::ossimRadarSat2Model::InitPlatformPosition ( const ossimKeywordlist kwl,
const char *  prefix 
)
privatevirtual

Initializes the Platform Position from a projection keywordlist.

Implements ossimplugins::ossimGeometricSarSensorModel.

Definition at line 408 of file ossimRadarSat2Model.cpp.

References ossimplugins::ossimGeometricSarSensorModel::_platformPosition, ossimKeywordlist::find(), and ossimplugins::ossim::iso8601TimeStringToCivilDate().

409 {
410  /*
411  * Retrieval of ephemerisis number
412  */
413  const char* neph_str = kwl.find(prefix,"neph");
414  int neph = atoi(neph_str);
415 
416  Ephemeris** ephemeris = new Ephemeris*[neph];
417  for (int i = 0; i < neph; ++i)
418  {
419  ephemeris[i] = 0; // In case of early termination, for delete block.
420  }
421 
422  /*
423  * Retrieval of ephemerisis
424  */
425  for (int i=0;i<neph;i++)
426  {
427  double pos[3];
428  double vit[3];
429  char name[64];
430 
431 
432  sprintf(name,"eph%i_date",i);
433  const char* date_str = kwl.find(prefix,name);
434 
435  sprintf(name,"eph%i_posX",i);
436  const char* px_str = kwl.find(prefix,name);
437  pos[0] = atof(px_str);
438 
439  sprintf(name,"eph%i_posY",i);
440  const char* py_str = kwl.find(prefix,name);
441  pos[1] = atof(py_str);
442 
443  sprintf(name,"eph%i_posZ",i);
444  const char* pz_str = kwl.find(prefix,name);
445  pos[2] = atof(pz_str);
446 
447 
448  sprintf(name,"eph%i_velX",i);
449  const char* vx_str = kwl.find(prefix,name);
450  vit[0] = atof(vx_str) ;
451 
452  sprintf(name,"eph%i_velY",i);
453  const char* vy_str = kwl.find(prefix,name);
454  vit[1] = atof(vy_str) ;
455 
456  sprintf(name,"eph%i_velZ",i);
457  const char* vz_str = kwl.find(prefix,name);
458  vit[2] = atof(vz_str) ;
459 
460  /*
461  * Conversion to JSD Date
462  */
463  std::string utcString(date_str);
464  CivilDateTime eph_civil_date;
465 
466  if (! ossim::iso8601TimeStringToCivilDate(utcString, eph_civil_date))
467  {
468  for (i=0;i<neph;++i)
469  {
470  delete ephemeris[i];
471  }
472  delete[] ephemeris;
473  ephemeris = 0;
474 
475  return false;
476  }
477 
478  JSDDateTime eph_jsd_date(eph_civil_date);
479 
480  GeographicEphemeris* eph = new GeographicEphemeris(eph_jsd_date,pos,vit);
481 
482  ephemeris[i] = eph;
483  }
484 
485  /*
486  * Creation of the platform position interpolator
487  */
488  if (_platformPosition != 0)
489  {
490  delete _platformPosition;
491  }
492  _platformPosition = new PlatformPosition(ephemeris,neph);
493 
494  /*
495  * Free of memory used by ephemerisis list : the constructor copies the ephemerisis
496  */
497  for (int i=0;i<neph;i++)
498  {
499  delete ephemeris[i];
500  }
501  delete[] ephemeris;
502  ephemeris = 0;
503 
504  return true;
505 }
const char * find(const char *key) const
bool iso8601TimeStringToCivilDate(const std::string &dataString, CivilDateTime &outputDate)
Converts date string from ISO 8601 format to CivilDateTime.
PlatformPosition * _platformPosition
Handle the position of the platform.

◆ initPlatformPosition()

bool ossimplugins::ossimRadarSat2Model::initPlatformPosition ( const ossimXmlDocument xdoc,
const ossimRadarSat2ProductDoc rsDoc 
)
private

Definition at line 770 of file ossimRadarSat2Model.cpp.

References ossimplugins::ossimGeometricSarSensorModel::_platformPosition, ossimplugins::ossimRadarSat2ProductDoc::initPlatformPosition(), ossimNotify(), and ossimNotifyLevel_DEBUG.

Referenced by open().

772 {
773  static const char MODULE[] = "ossimRadarSat2Model::initPlatformPosition";
774 
775  if (traceDebug())
776  {
777  ossimNotify(ossimNotifyLevel_DEBUG)<< MODULE << " entered...\n";
778  }
779 
780  // Initialize the platform position interpolator.
781  if (_platformPosition)
782  {
783  delete _platformPosition;
784  }
785 
786  _platformPosition = new PlatformPosition();
787 
788  bool result = rsDoc.initPlatformPosition(xdoc, _platformPosition);
789 
790  if (!result)
791  {
792  delete _platformPosition;
793  _platformPosition = 0;
794  }
795 
796  if (traceDebug())
797  {
799  << MODULE << " exit status = " << (result?"true":"false\n")
800  << std::endl;
801  }
802 
803  return result;
804 }
PlatformPosition * _platformPosition
Handle the position of the platform.
OSSIMDLLEXPORT std::ostream & ossimNotify(ossimNotifyLevel level=ossimNotifyLevel_WARN)

◆ InitRefNoiseLevel()

bool ossimplugins::ossimRadarSat2Model::InitRefNoiseLevel ( const ossimXmlDocument xmlDocument)
privatevirtual

Definition at line 1097 of file ossimRadarSat2Model.cpp.

References _noiseLevel, ossimString::begin(), ossimString::clear(), ossimXmlDocument::findNodes(), InitLut(), ossimNotify(), ossimNotifyLevel_DEBUG, ossimplugins::RadarSat2NoiseLevel::set_incidenceAngleCorrectionName(), ossimplugins::RadarSat2NoiseLevel::set_noiseLevelValues(), ossimplugins::RadarSat2NoiseLevel::set_numberOfNoiseLevelValues(), ossimplugins::RadarSat2NoiseLevel::set_pixelFirstNoiseValue(), ossimplugins::RadarSat2NoiseLevel::set_stepSize(), ossimplugins::RadarSat2NoiseLevel::set_units(), and ossimErrorStatusInterface::setErrorStatus().

Referenced by open().

1099 {
1100  static const char MODULE[] = "ossimRadarSat2Model::initRefNoiseLevel";
1101 
1102  ossimString xpath;
1103  std::vector<ossimRefPtr<ossimXmlNode> > xml_nodes;
1104  std::vector<ossimRefPtr<ossimXmlNode> > sub_nodes;
1105  std::vector<ossimRefPtr<ossimXmlNode> >::iterator node;
1106  RadarSat2NoiseLevel ev;
1107 
1108  if (traceDebug())
1109  {
1110  ossimNotify(ossimNotifyLevel_DEBUG)<< MODULE << " entered...\n";
1111  }
1112 
1113  _noiseLevel.clear();
1114 
1115 
1116  xpath = "/product/sourceAttributes/radarParameters/referenceNoiseLevel";
1117  xml_nodes.clear();
1118  xmlDocument->findNodes(xpath, xml_nodes);
1119  if(xml_nodes.size() == 0)
1120  {
1121  setErrorStatus();
1122  if(traceDebug())
1123  {
1125  << MODULE << " DEBUG:"
1126  << "\nCould not find: " << xpath
1127  << std::endl;
1128  }
1129  return false;
1130  }
1131 
1132  node = xml_nodes.begin();
1133  while (node != xml_nodes.end())
1134  {
1135 
1136  ev.set_incidenceAngleCorrectionName( (*node)->getAttributeValue("incidenceAngleCorrection") );
1137 
1138  sub_nodes.clear();
1139  xpath = "pixelFirstNoiseValue";
1140  (*node)->findChildNodes(xpath, sub_nodes);
1141  if (sub_nodes.size() == 0)
1142  {
1143  setErrorStatus();
1144  if(traceDebug())
1145  {
1147  << MODULE << " DEBUG:"
1148  << "\nCould not find: " << xpath
1149  << std::endl;
1150  }
1151  return false;
1152  }
1153  ev.set_pixelFirstNoiseValue(sub_nodes[0]->getText().toUInt32());
1154 
1155  sub_nodes.clear();
1156  xpath = "stepSize";
1157  (*node)->findChildNodes(xpath, sub_nodes);
1158  if (sub_nodes.size() == 0)
1159  {
1160  setErrorStatus();
1161  if(traceDebug())
1162  {
1164  << MODULE << " DEBUG:"
1165  << "\nCould not find: " << xpath
1166  << std::endl;
1167  }
1168  return false;
1169  }
1170  ev.set_stepSize(sub_nodes[0]->getText().toUInt32());
1171 
1172  sub_nodes.clear();
1173  xpath = "numberOfNoiseLevelValues";
1174  (*node)->findChildNodes(xpath, sub_nodes);
1175  if (sub_nodes.size() == 0)
1176  {
1177  setErrorStatus();
1178  if(traceDebug())
1179  {
1181  << MODULE << " DEBUG:"
1182  << "\nCould not find: " << xpath
1183  << std::endl;
1184  }
1185  return false;
1186  }
1187  ev.set_numberOfNoiseLevelValues(sub_nodes[0]->getText().toUInt32());
1188 
1189  sub_nodes.clear();
1190  xpath = "noiseLevelValues";
1191  (*node)->findChildNodes(xpath, sub_nodes);
1192  if (sub_nodes.size() == 0)
1193  {
1194  setErrorStatus();
1195  if(traceDebug())
1196  {
1198  << MODULE << " DEBUG:"
1199  << "\nCould not find: " << xpath
1200  << std::endl;
1201  }
1202  return false;
1203  }
1204  ev.set_units( sub_nodes[0]->getAttributeValue("units") );
1205 
1206 
1207  std::vector<ossimString> s2;
1208  std::vector<ossim_float64> noiseLevelValues;
1209  s2.clear();
1210  noiseLevelValues.clear();
1211  s2 = sub_nodes[0]->getText().split(" ");
1212  for(ossim_uint32 i = 0; i < s2.size(); ++i)
1213  {
1214  noiseLevelValues.push_back( s2[i].toFloat64() );
1215  }
1216  ev.set_noiseLevelValues( noiseLevelValues );
1217 
1218  InitLut(xmlDocument, ev);
1219 
1220 
1221  _noiseLevel.push_back(ev);
1222 
1223  ++node;
1224  }
1225 
1226  if (traceDebug())
1227  {
1228  ossimNotify(ossimNotifyLevel_DEBUG)<< MODULE << " leaving...\n";
1229  }
1230 
1231  return true;
1232 }
void clear()
Erases the entire container.
Definition: ossimString.h:432
std::vector< RadarSat2NoiseLevel > _noiseLevel
noise level values
virtual bool InitLut(const ossimXmlDocument *xmlDocument, RadarSat2NoiseLevel &noise)
std::string::iterator begin()
Definition: ossimString.h:420
unsigned int ossim_uint32
void findNodes(const ossimString &xpath, std::vector< ossimRefPtr< ossimXmlNode > > &nodelist) const
Appends any matching nodes to the list supplied (should be empty):
OSSIMDLLEXPORT std::ostream & ossimNotify(ossimNotifyLevel level=ossimNotifyLevel_WARN)

◆ InitRefPoint()

bool ossimplugins::ossimRadarSat2Model::InitRefPoint ( const ossimKeywordlist kwl,
const char *  prefix 
)
privatevirtual

Initializes the Reference Point from a projection keywordlist.

Implements ossimplugins::ossimGeometricSarSensorModel.

Definition at line 507 of file ossimRadarSat2Model.cpp.

References ossimplugins::ossimGeometricSarSensorModel::_isProductGeoreferenced, ossimplugins::ossimGeometricSarSensorModel::_platformPosition, ossimplugins::ossimGeometricSarSensorModel::_refPoint, ossimplugins::ossimGeometricSarSensorModel::_sensor, distance(), ossimKeywordlist::find(), ossimplugins::SensorParams::get_col_direction(), ossimplugins::CivilDateTime::get_decimal(), ossimplugins::SensorParams::get_lin_direction(), ossimplugins::SensorParams::get_prf(), ossimplugins::CivilDateTime::get_second(), ossimplugins::PlatformPosition::Interpolate(), ossimplugins::ossim::iso8601TimeStringToCivilDate(), ossimplugins::ossimGeometricSarSensorModel::optimizeModel(), ossimplugins::CivilDateTime::set_decimal(), ossimplugins::RefPoint::set_distance(), ossimplugins::RefPoint::set_ephemeris(), ossimplugins::RefPoint::set_pix_col(), ossimplugins::RefPoint::set_pix_line(), ossimplugins::CivilDateTime::set_second(), ossimSensorModel::theGSD, ossimSensorModel::theImageClipRect, ossimSensorModel::theImageSize, ossimIpt::x, ossimDpt::x, and ossimIpt::y.

509 {
510  // in order to use ossimSensorModel::lineSampleToWorld
511  const char* nbCol_str = kwl.find(prefix,"nbCol");
512  const char* nbLin_str = kwl.find(prefix,"nbLin");
513  theImageSize.x = atoi(nbCol_str);
514  theImageSize.y = atoi(nbLin_str);
516 
517  // no reference point (e.g. scene center) is given in the annotation file
518  // we choose to use the upper left corner as reference point
519  if(_refPoint == 0)
520  {
521  _refPoint = new RefPoint();
522  }
523 
524  _refPoint->set_pix_col(0); // upper left corner
525  _refPoint->set_pix_line(0); // upper left corner
526 
527  const char* zeroDopplerTimeFirstLine_str = kwl.find(prefix,"zeroDopplerTimeFirstLine");
528  std::string zeroDopplerTimeFirstLine(zeroDopplerTimeFirstLine_str);
529 
530  if(_platformPosition != 0)
531  {
532  CivilDateTime * date = new CivilDateTime() ;
533  if (! ossim::iso8601TimeStringToCivilDate(zeroDopplerTimeFirstLine, *date)) return false ;
534 
535  if (_sensor->get_lin_direction() == -1) {
536  double time = (double) date->get_second() + date->get_decimal() ; // upper left corner
537  time += theImageSize.y / _sensor->get_prf() ;
538  date->set_second((int) floor(time)) ;
539  date->set_decimal(time - floor(time)) ;
540  }
541 
542  Ephemeris* ephemeris = _platformPosition->Interpolate((JSDDateTime)*date);
543  if (ephemeris == 0) return false ;
544  _refPoint->set_ephemeris(ephemeris);
545 
546  delete ephemeris;
547  ephemeris = 0;
548  delete date;
549  date = 0;
550  }
551  else
552  {
553  return false;
554  }
555 
556  const char* slantRangeNearEdge_str = kwl.find(prefix,"slantRangeNearEdge");
557  double distance = atof(slantRangeNearEdge_str);
558 
559  //---
560  // NOTE: initSRGR method must be called before this method.
561  // in the case of Georeferenced images, the ground range is stored in
562  // place of the slant range
563  // (used for SlantRange computation relative to reference point, necessary
564  // for optimization)
565  //---
567  {
568  if (_sensor->get_col_direction() == 1)
569  {
570  distance += 0.0; // upper left corner
571  }
572  else
573  {
575  }
576  }
577 
579 
580  // Ground Control Points extracted from the model
581  std::list<ossimGpt> groundGcpCoordinates ;
582  std::list<ossimDpt> imageGcpCoordinates ;
583  const char* nTiePoints_str = kwl.find(prefix,"nTiePoints");
584  int nTiePoints = atoi(nTiePoints_str);
585  char name[64];
586  for (int k=0 ; k<nTiePoints ; k++) {
587  sprintf(name,"cornersCol%i",k);
588  const char* i_str = kwl.find(name);
589  int i = atoi(i_str);
590  sprintf(name,"cornersLin%i",k);
591  const char* j_str = kwl.find(name);
592  int j = atoi(j_str);
593  sprintf(name,"cornersLon%i",k);
594  const char* lon_str = kwl.find(name);
595  double lon = atof(lon_str);
596  sprintf(name,"cornersLat%i",k);
597  const char* lat_str = kwl.find(name);
598  double lat = atof(lat_str);
599  sprintf(name,"cornersHeight%i",k);
600  const char* height_str = kwl.find(name);
601  double height = atof(height_str);
602 
603  ossimDpt imageGCP(i,j);
604  ossimGpt groundGCP(lat ,lon , height);
605  groundGcpCoordinates.push_back(groundGCP) ;
606  imageGcpCoordinates.push_back(imageGCP) ;
607  }
608 
609  // Default optimization
610  optimizeModel(groundGcpCoordinates, imageGcpCoordinates) ;
611 
612  return true;
613 }
const char * find(const char *key) const
bool iso8601TimeStringToCivilDate(const std::string &dataString, CivilDateTime &outputDate)
Converts date string from ISO 8601 format to CivilDateTime.
Ephemeris * Interpolate(JSDDateTime date) const
This function interpolates its ephemeris to create a new ephemeris at the given date and time...
void set_pix_line(double pix_line)
Definition: RefPoint.cpp:80
void set_pix_col(double pix_col)
Definition: RefPoint.cpp:85
bool _isProductGeoreferenced
True iff the product is ground range.
ossimDrect theImageClipRect
PlatformPosition * _platformPosition
Handle the position of the platform.
ossim_int32 y
Definition: ossimIpt.h:142
double x
Definition: ossimDpt.h:164
ossim_int32 x
Definition: ossimIpt.h:141
virtual bool optimizeModel(const std::list< ossimGpt > &groundCoordinates, const std::list< ossimDpt > &imageCoordinates)
This function optimizes the model according to a list of Ground Control Points.
void set_ephemeris(Ephemeris *ephemeris)
Definition: RefPoint.cpp:65
float distance(double lat1, double lon1, double lat2, double lon2, int units)
void set_distance(double distance)
Definition: RefPoint.cpp:75

◆ initRefPoint()

bool ossimplugins::ossimRadarSat2Model::initRefPoint ( const ossimXmlDocument xdoc,
const ossimRadarSat2ProductDoc rsDoc 
)
private

Method to initialize RefPoint object from RadarSat "product.xml" file.

Parameters
xdocOpened product.xml file.
Returns
true on success, false on error.

Definition at line 841 of file ossimRadarSat2Model.cpp.

References ossimplugins::ossimGeometricSarSensorModel::_isProductGeoreferenced, ossimplugins::ossimGeometricSarSensorModel::_platformPosition, ossimplugins::ossimGeometricSarSensorModel::_refPoint, ossimplugins::ossimGeometricSarSensorModel::_sensor, distance(), ossimplugins::SensorParams::get_col_direction(), ossimplugins::CivilDateTime::get_decimal(), ossimplugins::SensorParams::get_lin_direction(), ossimplugins::SensorParams::get_prf(), ossimplugins::CivilDateTime::get_second(), ossimplugins::ossimRadarSat2ProductDoc::getSlantRangeNearEdge(), ossimplugins::ossimRadarSat2ProductDoc::getZeroDopplerTimeFirstLine(), ossimplugins::ossimRadarSat2ProductDoc::initTiePoints(), ossimplugins::PlatformPosition::Interpolate(), ossimplugins::ossim::iso8601TimeStringToCivilDate(), ossimplugins::ossimGeometricSarSensorModel::optimizeModel(), ossimNotify(), ossimNotifyLevel_DEBUG, ossimplugins::CivilDateTime::set_decimal(), ossimplugins::RefPoint::set_distance(), ossimplugins::RefPoint::set_ephemeris(), ossimplugins::RefPoint::set_pix_col(), ossimplugins::RefPoint::set_pix_line(), ossimplugins::CivilDateTime::set_second(), setModelRefPoint(), ossimSensorModel::theGSD, ossimSensorModel::theImageSize, ossimSensorModel::theRefImgPt, ossimString::toDouble(), ossimIpt::x, ossimDpt::x, ossimIpt::y, and ossimDpt::y.

Referenced by open().

843 {
844  static const char MODULE[] = "ossimRadarSat2Model::initRefPoint";
845 
846  if (traceDebug())
847  {
848  ossimNotify(ossimNotifyLevel_DEBUG)<< MODULE << " entered...\n";
849  }
850 
851  if ( !_sensor || !_platformPosition )
852  {
853  if (traceDebug())
854  {
856  << MODULE << "null pointer error! exiting\n";
857  }
858  return false;
859  }
860 
861  // Reference point.
862  if (_refPoint)
863  {
864  delete _refPoint;
865  }
866  _refPoint = new RefPoint();
867 
868  // Ground Control Points extracted from the model.
869  std::list<ossimGpt> groundGcpCoordinates;
870  std::list<ossimDpt> imageGcpCoordinates;
871  if ( rsDoc.initTiePoints(xdoc,
872  groundGcpCoordinates,
873  imageGcpCoordinates) == false )
874  {
875  if (traceDebug())
876  {
878  << MODULE << "initTiePoint error! exiting\n";
879  }
880  return false;
881  }
882 
883  if ( setModelRefPoint(groundGcpCoordinates, imageGcpCoordinates) )
884  {
887  }
888  else
889  {
890  // no reference point (e.g. scene center) is given in the annotation file
891  // we choose to use the upper left corner as reference point
892  _refPoint->set_pix_col(0); // upper left corner
893  _refPoint->set_pix_line(0); // upper left corner
894  }
895 
896  ossimString s;
897  CivilDateTime date;
898  if ( rsDoc.getZeroDopplerTimeFirstLine(xdoc, s) )
899  {
901  {
902  if (traceDebug())
903  {
905  << MODULE << "getZeroDopplerTimeFirstLine error! exiting\n";
906  }
907  return false;
908  }
909  }
910 
911  if (_sensor->get_lin_direction() == -1)
912  {
913  // upper left corner
914  double time = (double) date.get_second() + date.get_decimal();
915  time += theImageSize.y / _sensor->get_prf() ;
916  date.set_second((int) floor(time)) ;
917  date.set_decimal(time - floor(time));
918  }
919 
920  if (traceDebug())
921  {
923  << "date:\n"
924  << date
925  << "\n";
926  }
927 
928  JSDDateTime jsdate(date);
929 
930  // Ephemeris * ephemeris = _platformPosition->Interpolate((JSDDateTime)date);
931  Ephemeris * ephemeris = _platformPosition->Interpolate(jsdate);
932  if (ephemeris == 0)
933  {
934  if (traceDebug())
935  {
937  << MODULE << " Interpolate error! exiting\n";
938  }
939  return false;
940  }
941  _refPoint->set_ephemeris(ephemeris);
942  delete ephemeris;
943  ephemeris = 0;
944 
945  double distance = 1;
946 
947  // Only set distance to
949  {
950  if ( !rsDoc.getSlantRangeNearEdge(xdoc, s) )
951  {
952  if (traceDebug())
953  {
955 
956  << MODULE << "getSlantRangeNearEdge error! exiting\n";
957  }
958  return false;
959  }
960  distance = s.toDouble();
961  }
962 
963  //---
964  // in the case of Georeferenced images, the ground range is stored in
965  // place of the slant range
966  // (used for SlantRange computation relative to reference point,
967  // necessary for optimization)
968  //---
970  {
971  if (_sensor->get_col_direction() == 1)
972  {
973  distance += 0 ; // upper left corner
974  }
975  else
976  {
978  }
979  }
980 
981 
983 
984  // Default optimization
985  optimizeModel(groundGcpCoordinates, imageGcpCoordinates) ;
986 
987  if (traceDebug())
988  {
990  << MODULE << " exit status = true\n";
991  }
992 
993  return true;
994 }
double y
Definition: ossimDpt.h:165
bool iso8601TimeStringToCivilDate(const std::string &dataString, CivilDateTime &outputDate)
Converts date string from ISO 8601 format to CivilDateTime.
Ephemeris * Interpolate(JSDDateTime date) const
This function interpolates its ephemeris to create a new ephemeris at the given date and time...
void set_pix_line(double pix_line)
Definition: RefPoint.cpp:80
void set_pix_col(double pix_col)
Definition: RefPoint.cpp:85
bool _isProductGeoreferenced
True iff the product is ground range.
double toDouble() const
PlatformPosition * _platformPosition
Handle the position of the platform.
ossim_int32 y
Definition: ossimIpt.h:142
double x
Definition: ossimDpt.h:164
ossim_int32 x
Definition: ossimIpt.h:141
virtual bool optimizeModel(const std::list< ossimGpt > &groundCoordinates, const std::list< ossimDpt > &imageCoordinates)
This function optimizes the model according to a list of Ground Control Points.
void set_ephemeris(Ephemeris *ephemeris)
Definition: RefPoint.cpp:65
bool setModelRefPoint(const std::list< ossimGpt > &groundGcpCoordinates, const std::list< ossimDpt > &imageGcpCoordinates)
Sets ossimSensorModel members theRefImgPt and theRefGndPt from tie points.
float distance(double lat1, double lon1, double lat2, double lon2, int units)
void set_distance(double distance)
Definition: RefPoint.cpp:75
OSSIMDLLEXPORT std::ostream & ossimNotify(ossimNotifyLevel level=ossimNotifyLevel_WARN)

◆ InitSensorParams()

bool ossimplugins::ossimRadarSat2Model::InitSensorParams ( const ossimKeywordlist kwl,
const char *  prefix 
)
privatevirtual

Initializes the Sensor Params from a projection keywordlist.

Implements ossimplugins::ossimGeometricSarSensorModel.

Definition at line 347 of file ossimRadarSat2Model.cpp.

References ossimplugins::ossimGeometricSarSensorModel::_sensor, ossimKeywordlist::find(), ossimplugins::SensorParams::Left, ossimplugins::SensorParams::Right, ossimplugins::SensorParams::set_col_direction(), ossimplugins::SensorParams::set_lin_direction(), ossimplugins::SensorParams::set_nAzimuthLook(), ossimplugins::SensorParams::set_nRangeLook(), ossimplugins::SensorParams::set_prf(), ossimplugins::SensorParams::set_rwl(), ossimplugins::SensorParams::set_semiMajorAxis(), ossimplugins::SensorParams::set_semiMinorAxis(), ossimplugins::SensorParams::set_sf(), and ossimplugins::SensorParams::set_sightDirection().

349 {
350 
351  // sensor frequencies
352  const char* central_freq_str = kwl.find(prefix,"central_freq");
353  double central_freq = atof(central_freq_str);
354  const char* fr_str = kwl.find(prefix,"fr");
355  double fr = atof(fr_str);
356  const char* fa_str = kwl.find(prefix,"fa");
357  double fa = atof(fa_str);
358 
359  //number of different looks
360  const char* n_azilok_str = kwl.find(prefix,"n_azilok");
361  double n_azilok = atof(n_azilok_str);
362  const char* n_rnglok_str = kwl.find(prefix,"n_rnglok");
363  double n_rnglok = atof(n_rnglok_str);
364 
365  //ellipsoid parameters
366  const char* ellip_maj_str = kwl.find(prefix,"ellip_maj");
367  double ellip_maj = atof(ellip_maj_str) * 1000.0; // km -> m
368  const char* ellip_min_str = kwl.find(prefix,"ellip_min");
369  double ellip_min = atof(ellip_min_str) * 1000.0; // km -> m
370 
371  if(_sensor != 0)
372  {
373  delete _sensor;
374  }
375 
376  _sensor = new SensorParams();
377 
378  const char* lineTimeOrdering_str = kwl.find(prefix,"lineTimeOrdering");
379  std::string lineTimeOrdering(lineTimeOrdering_str) ;
380  const char* pixelTimeOrdering_str = kwl.find(prefix,"pixelTimeOrdering");
381  std::string pixelTimeOrdering(pixelTimeOrdering_str) ;
382  if (pixelTimeOrdering == "Increasing") _sensor->set_col_direction(1);
383  else _sensor->set_col_direction(- 1);
384  if (lineTimeOrdering == "Increasing") _sensor->set_lin_direction(1);
385  else _sensor->set_lin_direction(- 1);
386 
387  const char* lookDirection_str = kwl.find(prefix,"lookDirection");
388  std::string lookDirection(lookDirection_str) ;
389  if ((lookDirection == "Right")||(lookDirection == "RIGHT")) _sensor->set_sightDirection(SensorParams::Right) ;
391 
392  _sensor->set_sf(fr);
393  const double CLUM = 2.99792458e+8 ;
394  double wave_length = CLUM / central_freq ;
395  _sensor->set_rwl(wave_length);
396  _sensor->set_nAzimuthLook(n_azilok);
397  _sensor->set_nRangeLook(n_rnglok);
398 
399  // fa is the processing PRF
400  _sensor->set_prf(fa * n_azilok);
401 
402  _sensor->set_semiMajorAxis(ellip_maj) ;
403  _sensor->set_semiMinorAxis(ellip_min) ;
404 
405  return true;
406 }
void set_sightDirection(SightDirection sight)
Definition: SensorParams.h:93
void set_rwl(double rwl)
Definition: SensorParams.h:83
const char * find(const char *key) const
void set_lin_direction(int dir)
Definition: SensorParams.h:128
void set_semiMinorAxis(double value)
Definition: SensorParams.h:158
void set_semiMajorAxis(double value)
Definition: SensorParams.h:153
void set_nRangeLook(double look)
Definition: SensorParams.h:138
void set_nAzimuthLook(double look)
Definition: SensorParams.h:133
void set_prf(double prf)
Definition: SensorParams.h:73
void set_col_direction(int dir)
Definition: SensorParams.h:123
void set_sf(double sf)
Definition: SensorParams.h:78

◆ initSensorParams()

bool ossimplugins::ossimRadarSat2Model::initSensorParams ( const ossimXmlDocument xdoc,
const ossimRadarSat2ProductDoc rsDoc 
)
private

Definition at line 806 of file ossimRadarSat2Model.cpp.

References ossimplugins::ossimGeometricSarSensorModel::_sensor, ossimplugins::ossimRadarSat2ProductDoc::initSensorParams(), ossimNotify(), and ossimNotifyLevel_DEBUG.

Referenced by open().

808 {
809  static const char MODULE[] = "ossimRadarSat2Model::initSensorParams";
810 
811  if (traceDebug())
812  {
813  ossimNotify(ossimNotifyLevel_DEBUG)<< MODULE << " entered...\n";
814  }
815 
816  if (_sensor )
817  {
818  delete _sensor;
819  }
820  _sensor = new SensorParams();
821 
822  bool result = rsDoc.initSensorParams(xdoc, _sensor);
823 
824  if (!result)
825  {
826  delete _sensor;
827  _sensor = 0;
828  }
829 
830  if (traceDebug())
831  {
833  << MODULE << " exit status = " << (result?"true":"false\n")
834  << std::endl;
835  }
836 
837  return result;
838 }
OSSIMDLLEXPORT std::ostream & ossimNotify(ossimNotifyLevel level=ossimNotifyLevel_WARN)

◆ InitSRGR()

bool ossimplugins::ossimRadarSat2Model::InitSRGR ( const ossimKeywordlist kwl,
const char *  prefix 
)
privatevirtual

Initializes the Slant Range to Ground Range data sets : _srgr_update,_SrGr_R0,_SrGr_coeffs_number,_SrGr_coeffs,_nbCol, _pixel_spacing.

Implements ossimplugins::ossimGeometricSarSensorModel.

Definition at line 615 of file ossimRadarSat2Model.cpp.

References ossimplugins::ossimGeometricSarSensorModel::_isProductGeoreferenced, _n_srgr, _SrGr_coeffs, _SrGr_R0, _srgr_update, ossimKeywordlist::find(), ossimplugins::CivilDateTime::get_decimal(), ossimplugins::CivilDateTime::get_second(), and ossimplugins::ossim::iso8601TimeStringToCivilDate().

617 {
618  const char* productType_str = kwl.find(prefix,"productType");
619  ossimString productType(productType_str);
620 
621  _isProductGeoreferenced = (productType != "SLC") ;
622 
623 // // Pixel spacing
624 // const char* pixel_spacing_str = kwl.find(prefix,"pixel_spacing_mean");
625 // _pixel_spacing = atof(pixel_spacing_str);
626 
627 // // Number of columns
628 // const char* nbCol_str = kwl.find(prefix,"nbCol");
629 // _nbCol = atoi(nbCol_str);
630 
631  // number of SRGR coefficient sets
632  const char* SrGr_coeffs_number_str = kwl.find(prefix,"SrGr_coeffs_number");
633  _n_srgr = atoi(SrGr_coeffs_number_str);
634 
635  // SRGR coefficients and exponents
636  char name[64];
637  for(int i=0;i<_n_srgr;i++)
638  {
639  std::vector<double> srgr_set ;
640  for(int j=0;j<4;j++)
641  {
642  sprintf(name,"SrGr_coeffs_%i_%i",i,j);
643  const char* coeff_str = kwl.find(prefix,name);
644  double coeff = atof(coeff_str);
645  srgr_set.push_back(coeff);
646  }
647  _SrGr_coeffs.push_back(srgr_set);
648  // SRGR polynomial reference
649  sprintf(name,"SrGr_R0_%i",i);
650  const char* SrGr_R0_str = kwl.find(prefix,name);
651  _SrGr_R0.push_back(atof(SrGr_R0_str));
652  // SRGR update time
653  sprintf(name,"SrGr_update_%i",i);
654  const char* SrGr_update_str = kwl.find(prefix,name);
655  CivilDateTime SrGr_update_date ;
656  ossim::iso8601TimeStringToCivilDate(std::string(SrGr_update_str), SrGr_update_date) ;
657  _srgr_update.push_back((double) SrGr_update_date.get_second()+ SrGr_update_date.get_decimal());
658  }
659 
660  return true;
661 }
const char * find(const char *key) const
bool iso8601TimeStringToCivilDate(const std::string &dataString, CivilDateTime &outputDate)
Converts date string from ISO 8601 format to CivilDateTime.
bool _isProductGeoreferenced
True iff the product is ground range.
int _n_srgr
Slant Range FOR EACH Ground Range (SRGR) number of coefficients sets.
std::vector< double > _SrGr_R0
Slant Range FOR EACH Ground Range Projection reference point.
std::vector< double > _srgr_update
Slant Range FOR EACH Ground Range coefficient sets update times.
std::vector< std::vector< double > > _SrGr_coeffs
Slant Range FOR EACH Ground Range Projection coefficients.

◆ initSRGR()

bool ossimplugins::ossimRadarSat2Model::initSRGR ( const ossimXmlDocument xdoc,
const ossimRadarSat2ProductDoc rsDoc 
)
private
Note
This method must be called before initRefPoint.

Definition at line 685 of file ossimRadarSat2Model.cpp.

References ossimplugins::ossimGeometricSarSensorModel::_isProductGeoreferenced, _n_srgr, _SrGr_coeffs, _SrGr_R0, _srgr_update, ossimXmlNode::findFirstNode(), ossimXmlDocument::findNodes(), ossimplugins::CivilDateTime::get_decimal(), ossimplugins::CivilDateTime::get_second(), ossimplugins::ossimRadarSat2ProductDoc::getProductType(), ossimXmlNode::getText(), ossimplugins::ossim::iso8601TimeStringToCivilDate(), ossimNotify(), ossimNotifyLevel_DEBUG, ossimString::split(), ossimString::toDouble(), and ossimRefPtr< T >::valid().

Referenced by open().

687 {
688  static const char MODULE[] = "ossimRadarSat2Model::initSRGR";
689 
690  if (traceDebug())
691  {
692  ossimNotify(ossimNotifyLevel_DEBUG)<< MODULE << " entered...\n";
693  }
694 
695  bool result = true;
696 
697  ossimString s;
698 
699  // Get the product type.
700  if ( rsDoc.getProductType(xdoc, s) )
701  {
702  _isProductGeoreferenced = (s != "SLC");
703  }
704  else
705  {
706  result = false;
707  }
708 
709  ossimString path =
710  "/product/imageGenerationParameters/slantRangeToGroundRange";
711  std::vector<ossimRefPtr<ossimXmlNode> > xnodes;
712  xdoc->findNodes(path, xnodes);
713  if ( xnodes.size() )
714  {
715  //---
716  // Set the number of slant range for each ground range (srgs)
717  // coefficients.
718  //---
719  _n_srgr = static_cast<int>(xnodes.size());
720 
721  for (ossim_uint32 i = 0; i < xnodes.size(); ++i)
722  {
723  if (xnodes[i].valid())
724  {
725  ossimRefPtr<ossimXmlNode> node = 0;
726  node = xnodes[i]->findFirstNode(
727  ossimString("zeroDopplerAzimuthTime"));
728  if (node.valid())
729  {
730  CivilDateTime date;
732  _srgr_update.push_back((double) date.get_second()+
733  date.get_decimal());
734  }
735 
736  node = xnodes[i]->findFirstNode(
737  ossimString("groundRangeOrigin"));
738  if (node.valid())
739  {
740  _SrGr_R0.push_back(node->getText().toDouble());
741  }
742 
743  node = xnodes[i]->findFirstNode(
744  ossimString("groundToSlantRangeCoefficients"));
745  if (node.valid())
746  {
747  std::vector<ossimString> vs;
748  node->getText().split(vs, ' ');
749  std::vector<double> vd;
750  for (ossim_uint32 idx = 0; idx < vs.size(); ++idx)
751  {
752  vd.push_back(vs[idx].toDouble());
753  }
754  _SrGr_coeffs.push_back(vd);
755  }
756  }
757  }
758  }
759 
760  if (traceDebug())
761  {
763  << MODULE << " exit status = " << (result?"true":"false\n")
764  << std::endl;
765  }
766 
767  return result;
768 }
bool valid() const
Definition: ossimRefPtr.h:75
void split(std::vector< ossimString > &result, const ossimString &separatorList, bool skipBlankFields=false) const
Splits this string into a vector of strings (fields) using the delimiter list specified.
bool iso8601TimeStringToCivilDate(const std::string &dataString, CivilDateTime &outputDate)
Converts date string from ISO 8601 format to CivilDateTime.
const ossimRefPtr< ossimXmlNode > & findFirstNode(const ossimString &rel_xpath) const
bool _isProductGeoreferenced
True iff the product is ground range.
const ossimString & getText() const
Definition: ossimXmlNode.h:92
int _n_srgr
Slant Range FOR EACH Ground Range (SRGR) number of coefficients sets.
unsigned int ossim_uint32
double toDouble() const
std::vector< double > _SrGr_R0
Slant Range FOR EACH Ground Range Projection reference point.
std::vector< double > _srgr_update
Slant Range FOR EACH Ground Range coefficient sets update times.
std::vector< std::vector< double > > _SrGr_coeffs
Slant Range FOR EACH Ground Range Projection coefficients.
void findNodes(const ossimString &xpath, std::vector< ossimRefPtr< ossimXmlNode > > &nodelist) const
Appends any matching nodes to the list supplied (should be empty):
OSSIMDLLEXPORT std::ostream & ossimNotify(ossimNotifyLevel level=ossimNotifyLevel_WARN)

◆ loadState()

bool ossimplugins::ossimRadarSat2Model::loadState ( const ossimKeywordlist kwl,
const char *  prefix = 0 
)
virtual

Method to the load (recreate) the state of the object from a keyword list.

Return true if ok or false on error.

Returns
true if load OK, false on error

Reimplemented from ossimplugins::ossimGeometricSarSensorModel.

Definition at line 1325 of file ossimRadarSat2Model.cpp.

References _n_srgr, _noiseLevel, ossimplugins::ossimGeometricSarSensorModel::_productXmlFile, _SrGr_coeffs, _SrGr_R0, _srgr_update, ossimPolygon::clear(), ossimKeywordlist::find(), getClassName(), ossimplugins::ossimGeometricSarSensorModel::loadState(), open(), ossimNotify(), ossimNotifyLevel_DEBUG, ossimNotifyLevel_WARN, ossimSensorModel::theBoundGndPolygon, ossimString::toBool(), ossimString::toDouble(), ossimString::toInt(), ossimString::toString(), and ossimKeywordNames::TYPE_KW.

1327 {
1328  static const char MODULE[] = "ossimRadarSat2Model::loadState";
1329 
1330  if (traceDebug())
1331  {
1332  ossimNotify(ossimNotifyLevel_DEBUG) << MODULE << " entered...\n";
1333  }
1334 
1335  const char* lookup = 0;
1336  ossimString s;
1337 
1338  // Check the type first.
1339  lookup = kwl.find(prefix, ossimKeywordNames::TYPE_KW);
1340  if (lookup)
1341  {
1342  s = lookup;
1343  if (s != getClassName())
1344  {
1345  return false;
1346  }
1347  }
1348 
1349  // Get the product.xml file name.
1350  lookup = kwl.find(prefix, PRODUCT_XML_FILE_KW);
1351  if (lookup)
1352  {
1353  _productXmlFile = lookup;
1354 
1355  // See if caller wants to load from xml vice keyword list.
1356  lookup = kwl.find(prefix, LOAD_FROM_PRODUCT_FILE_KW);
1357  if (lookup)
1358  {
1359  s = lookup;
1360  if ( s.toBool() )
1361  {
1362  // Loading from product.xml file.
1363  return open(_productXmlFile);
1364  }
1365  }
1366  }
1367 
1368  //---
1369  // Temp: This must be cleared or you end up with a bounding rect of all
1370  // zero's.
1371  //---
1373 
1374  // Load the base class.
1375  bool result = ossimGeometricSarSensorModel::loadState(kwl, prefix);
1376 
1377 
1378  if (result)
1379  {
1380  lookup = kwl.find(prefix, NUMBER_SRGR_COEFFICIENTS_KW);
1381  if (lookup)
1382  {
1383  s = lookup;
1384  _n_srgr = s.toInt();
1385  }
1386  else
1387  {
1388  if (traceDebug())
1389  {
1391  << MODULE
1392  << "\nRequired keyword not found: "
1393  << NUMBER_SRGR_COEFFICIENTS_KW << "\n";
1394  }
1395  result = false;
1396  }
1397 
1398  if (result && _n_srgr)
1399  {
1400  const ossim_uint32 COUNT = static_cast<ossim_uint32>(_n_srgr);
1401 
1402  _srgr_update.resize(COUNT);
1403  _SrGr_R0.resize(COUNT);
1404  _SrGr_coeffs.resize(COUNT);
1405 
1406  ossimString kw1 = "sr_gr_update_";
1407  ossimString kw2 = "sr_gr_r0_";
1408  ossimString kw3 = "sr_gr_coeffs_";
1409 
1410  for(ossim_uint32 i = 0; i < COUNT; ++i)
1411  {
1412  ossimString kw;
1414 
1415  // Get the _srgr_update's.
1416  kw = kw1;
1417  kw += iStr;
1418 
1419  lookup = kwl.find(prefix, kw);
1420  if (lookup)
1421  {
1422  s = lookup;
1423  _srgr_update[i] = s.toDouble();
1424  }
1425  else
1426  {
1427  if (traceDebug())
1428  {
1430  << MODULE
1431  << "\nRequired keyword not found: "
1432  << kw << "\n";
1433  }
1434  result = false;
1435  }
1436 
1437  // Get the sr_gr_r0_'s.
1438  kw = kw2;
1439  kw += iStr;
1440  lookup = kwl.find(prefix, kw);
1441  if (lookup)
1442  {
1443  s = lookup;
1444  _SrGr_R0[i] = s.toDouble();
1445  }
1446  else
1447  {
1448  if (traceDebug())
1449  {
1451  << MODULE
1452  << "\nRequired keyword not found: "
1453  << kw << "\n";
1454  }
1455  result = false;
1456  }
1457 
1458  //---
1459  // Get the _SrGr_coeffs.
1460  // Note we are assuming a count of 6.
1461  //---
1462  const ossim_uint32 COEFFS_COUNT = 6;
1463  _SrGr_coeffs[i].resize(COEFFS_COUNT);
1464 
1465  for (ossim_uint32 j = 0; j < COEFFS_COUNT; ++j)
1466  {
1468  kw = kw3;
1469  kw += iStr;
1470  kw += "_";
1471  kw += jStr;
1472  lookup = kwl.find(prefix, kw);
1473  if (lookup)
1474  {
1475  s = lookup;
1476  _SrGr_coeffs[i][j] = s.toDouble();
1477  }
1478  else
1479  {
1480  if (traceDebug())
1481  {
1483  << MODULE
1484  << "\nRequired keyword not found: "
1485  << kw << "\n";
1486  }
1487  result = false;
1488  }
1489  }
1490 
1491  } // matches: for(ossim_uint32 i = 0; i < COUNT; ++i)
1492 
1493  } // matches: if (_n_srgr)
1494  else
1495  {
1496  result = false;
1497  }
1498 
1499  } // matches: if (result)
1500 
1501  if(result)
1502  {
1503  for(ossim_uint32 i = 0; i < _noiseLevel.size(); ++i)
1504  {
1505  _noiseLevel[i].loadState(kwl, prefix);
1506  }
1507  }
1508 
1509  if (traceDebug())
1510  {
1512  << MODULE << " exit status = " << (result?"true":"false\n")
1513  << std::endl;
1514  }
1515 
1516  return result;
1517 }
bool open(const ossimFilename &file)
Method to intantial model from a file.
const char * find(const char *key) const
std::vector< RadarSat2NoiseLevel > _noiseLevel
noise level values
static ossimString toString(bool aValue)
Numeric to string methods.
static const char * TYPE_KW
int _n_srgr
Slant Range FOR EACH Ground Range (SRGR) number of coefficients sets.
virtual bool loadState(const ossimKeywordlist &kwl, const char *prefix=0)
Method to the load (recreate) the state of the object from a keyword list.
bool toBool() const
String to numeric methods.
unsigned int ossim_uint32
ossimPolygon theBoundGndPolygon
double toDouble() const
std::vector< double > _SrGr_R0
Slant Range FOR EACH Ground Range Projection reference point.
std::vector< double > _srgr_update
Slant Range FOR EACH Ground Range coefficient sets update times.
std::vector< std::vector< double > > _SrGr_coeffs
Slant Range FOR EACH Ground Range Projection coefficients.
virtual ossimString getClassName() const
Method to return the class name.
int toInt() const
OSSIMDLLEXPORT std::ostream & ossimNotify(ossimNotifyLevel level=ossimNotifyLevel_WARN)

◆ open()

bool ossimplugins::ossimRadarSat2Model::open ( const ossimFilename file)

Method to intantial model from a file.

Attempts to find the required xml file.

Parameters
file
Returns
true on success, false on error.

Definition at line 118 of file ossimRadarSat2Model.cpp.

References ossimplugins::ossimGeometricSarSensorModel::_imageFilename, ossimplugins::ossimGeometricSarSensorModel::_productXmlFile, ossimSupportFilesList::add(), ossimplugins::ossimGeometricSarSensorModel::createReplacementOCG(), ossimFilename::dirCat(), ossimString::downcase(), ossimFilename::exists(), ossimFilename::expand(), ossimFilename::ext(), ossimplugins::ossimRadarSat2ProductDoc::getAcquisitionType(), ossimplugins::ossimRadarSat2ProductDoc::getBeamModeMnemonic(), ossimplugins::ossimRadarSat2ProductDoc::getImageId(), ossimplugins::ossimRadarSat2ProductDoc::getSatellite(), ossimplugins::ossimRadarSat2ProductDoc::initGsd(), ossimplugins::ossimRadarSat2ProductDoc::initImageSize(), initPlatformPosition(), InitRefNoiseLevel(), initRefPoint(), initSensorParams(), initSRGR(), ossimSupportFilesList::instance(), ossimFilename::isFile(), ossimplugins::ossimRadarSat2ProductDoc::isRadarSat2(), ossimplugins::ossimGeometricSarSensorModel::lineSampleToWorld(), ossimDrect::ll(), ossimDrect::lr(), ossimFilename::NIL, ossimXmlDocument::openFile(), ossimNotify(), ossimNotifyLevel_DEBUG, ossimFilename::path(), ossimSensorModel::setGroundRect(), ossimSensorModel::theGSD, ossimSensorModel::theImageClipRect, ossimSensorModel::theImageID, ossimSensorModel::theImageSize, ossimSensorModel::theMeanGSD, ossimSensorModel::theSensorID, ossimSensorModel::theSubImageOffset, ossimDrect::ul(), ossimDrect::ur(), ossimIpt::x, ossimDpt::x, ossimIpt::y, and ossimDpt::y.

Referenced by ossimplugins::ossimRadarSat2TiffReader::getInternalImageGeometry(), and loadState().

119 {
120  static const char MODULE[] = "ossimRadarSat2Model::open";
121 
122  if (traceDebug())
123  {
124  ossimNotify(ossimNotifyLevel_DEBUG)<< MODULE << " entered...\n";
125  }
126 
127  bool result = false;
128 
129  // Get the xml file.
130  ossimFilename xmlFile;
131  _imageFilename = file.expand();
132 
133  if (file.ext().downcase() == "xml")
134  {
135  xmlFile = file;
136  }
137  else if (file.isFile())
138  {
139  xmlFile = file.expand().path().dirCat("product.xml");
140  }
141 
142  if (traceDebug())
143  {
145  << "product xml file: " << xmlFile << "\n";
146  }
147 
148  if ( xmlFile.exists() )
149  {
150 
151  //---
152  // Instantiate the XML parser:
153  //---
154  ossimXmlDocument* xdoc = new ossimXmlDocument();
155  if ( xdoc->openFile(xmlFile) )
156  {
157  ossimRadarSat2ProductDoc rsDoc;
158 
159  result = rsDoc.isRadarSat2(xdoc);
160 
161  if (result)
162  {
163  if (traceDebug())
164  {
166  << "isRadarSat2...\n";
167  ossimString s;
168  if ( rsDoc.getBeamModeMnemonic(xdoc, s) )
169  {
171  << "beam_mode_mnemonic: " << s << "\n";
172  }
173  if ( rsDoc.getAcquisitionType(xdoc, s) )
174  {
176  << "acquisition_type: " << s << "\n";
177  }
178  }
179 
180  // Set the base class number of lines and samples
181  result = rsDoc.initImageSize(xdoc, theImageSize);
182 
183  if (result)
184  {
185  // Set the base class clip rect.
187  0, 0,
189  }
190 
191  // Set the sub image offset. tmp hard coded (drb).
192  theSubImageOffset.x = 0.0;
193  theSubImageOffset.y = 0.0;
194 
195  // Set the image id.
196  if (result)
197  {
198  result = rsDoc.getImageId(xdoc, theImageID);
199  }
200 
201  // Set the sensor ID.
202  if (result)
203  {
204  result = rsDoc.getSatellite(xdoc, theSensorID);
205  }
206 
207  // Set the base class gsd:
208  result = rsDoc.initGsd(xdoc, theGSD);
209  if (result)
210  {
211  theMeanGSD = (theGSD.x + theGSD.y)/2.0;
212  }
213 
214  if (result)
215  {
216  result = initSRGR(xdoc, rsDoc);
217 
218  if (result)
219  {
220  result = initPlatformPosition(xdoc, rsDoc);
221 
222  if (result)
223  {
224  result = initSensorParams(xdoc, rsDoc);
225 
226  if (result)
227  {
228  result = initRefPoint(xdoc, rsDoc);
229 
230  if (result)
231  {
232  result = InitRefNoiseLevel(xdoc);
233  }
234  }
235  }
236  }
237  }
238  }
239 
240  } // matches: if ( xdoc->openFile(xmlFile) )
241 
242  delete xdoc;
243  xdoc = 0;
244 
245  } // matches: if ( xmlFile.exists() )
246 
247  if (result)
248  {
249  _productXmlFile = xmlFile;
251  }
252  else
253  {
255  }
256 
257  if (result)
258  {
259  // Assign the ossimSensorModel::theBoundGndPolygon
260  ossimGpt ul;
261  ossimGpt ur;
262  ossimGpt lr;
263  ossimGpt ll;
268 
269  if (traceDebug())
270  {
272  << "theImageClipRect : " << theImageClipRect
273  << "ul, ur, lr, ll " << ul << ", " << ur
274  << ", " << lr << " , " << ll << endl;
275  }
276 
277  setGroundRect(ul, ur, lr, ll); // ossimSensorModel method.
278 
279  // OSSIM preferences specifies whether a coarse grid needs to be generated:
280  if (!createReplacementOCG())
281  result = false;
282  }
283 
284  if (traceDebug())
285  {
287  << MODULE << " exit status = " << (result?"true":"false\n")
288  << std::endl;
289  }
290 
291  return result;
292 }
ossimString theSensorID
bool initPlatformPosition(const ossimXmlDocument *xdoc, const ossimRadarSat2ProductDoc &rsDoc)
bool createReplacementOCG()
Creates replacement coarse grid model if user requested via ossim preferences keyword "geometric_sar_...
static const ossimFilename NIL
This was taken from Wx widgets for performing touch and access date stamps.
Definition: ossimFilename.h:40
ossimString theImageID
ossimFilename expand() const
Method to do file name expansion.
bool initSensorParams(const ossimXmlDocument *xdoc, const ossimRadarSat2ProductDoc &rsDoc)
const ossimDpt & ul() const
Definition: ossimDrect.h:339
double y
Definition: ossimDpt.h:165
ossimDpt theSubImageOffset
void add(const ossimFilename &f)
Add support data filename to the list:
bool openFile(const ossimFilename &filename)
bool exists() const
bool isFile() const
static ossimString downcase(const ossimString &aString)
Definition: ossimString.cpp:48
ossimDrect theImageClipRect
ossim_int32 y
Definition: ossimIpt.h:142
void setGroundRect(const ossimGpt &ul, const ossimGpt &ur, const ossimGpt &lr, const ossimGpt &ll)
const ossimDpt & ur() const
Definition: ossimDrect.h:340
bool initSRGR(const ossimXmlDocument *xdoc, const ossimRadarSat2ProductDoc &rsDoc)
virtual void lineSampleToWorld(const ossimDpt &image_point, ossimGpt &gpt) const
double x
Definition: ossimDpt.h:164
ossimFilename dirCat(const ossimFilename &file) const
bool initRefPoint(const ossimXmlDocument *xdoc, const ossimRadarSat2ProductDoc &rsDoc)
Method to initialize RefPoint object from RadarSat "product.xml" file.
ossimString ext() const
ossim_int32 x
Definition: ossimIpt.h:141
const ossimDpt & ll() const
Definition: ossimDrect.h:342
static ossimSupportFilesList * instance()
const ossimDpt & lr() const
Definition: ossimDrect.h:341
virtual bool InitRefNoiseLevel(const ossimXmlDocument *xmlDocument)
ossimFilename path() const
OSSIMDLLEXPORT std::ostream & ossimNotify(ossimNotifyLevel level=ossimNotifyLevel_WARN)
ossim_float64 theMeanGSD

◆ print()

std::ostream & ossimplugins::ossimRadarSat2Model::print ( std::ostream &  out) const
virtual

METHOD: print() Fulfills base-class pure virtual. Dumps contents of object to ostream.

Reimplemented from ossimplugins::ossimGeometricSarSensorModel.

Definition at line 294 of file ossimRadarSat2Model.cpp.

References _n_srgr, _SrGr_coeffs, _SrGr_R0, _srgr_update, and ossimplugins::ossimGeometricSarSensorModel::print().

295 {
296  // Capture the original flags.
297  std::ios_base::fmtflags f = out.flags();
298 
299  out << setprecision(15) << setiosflags(ios::fixed)
300  << "\nossimRadarSat2Model class data members:\n"
301  << "_n_srgr: " << _n_srgr << "\n";
302 
303  ossim_uint32 idx = 0;
304  std::vector<double>::const_iterator i = _srgr_update.begin();
305  while ( i != _srgr_update.end() )
306  {
307  out << "sr_gr_update_" << idx << ": " << (*i) << "\n";
308  ++i;
309  ++idx;
310  }
311 
312  idx = 0;
313  i = _SrGr_R0.begin();
314  while ( i != _SrGr_R0.end() )
315  {
316  out << "sr_gr_r0_" << idx << ": " << (*i) << "\n";
317  ++i;
318  ++idx;
319  }
320 
321  idx = 0;
322  std::vector< std::vector<double> >::const_iterator i2 =
323  _SrGr_coeffs.begin();
324  while ( i2 != _SrGr_coeffs.end() )
325  {
326  ossim_uint32 idx2 = 0;
327  i = (*i2).begin();
328  while ( i != (*i2).end() )
329  {
330  out << "sr_gr_coeffs_" << idx << "_" << idx2 << ": " << (*i) << "\n";
331  ++i;
332  ++idx2;
333  }
334  ++i2;
335  ++idx;
336  }
337 
339 
340 
341  // Reset flags.
342  out.setf(f);
343 
344  return out;
345 }
int _n_srgr
Slant Range FOR EACH Ground Range (SRGR) number of coefficients sets.
unsigned int ossim_uint32
std::vector< double > _SrGr_R0
Slant Range FOR EACH Ground Range Projection reference point.
virtual std::ostream & print(std::ostream &out) const
std::vector< double > _srgr_update
Slant Range FOR EACH Ground Range coefficient sets update times.
std::vector< std::vector< double > > _SrGr_coeffs
Slant Range FOR EACH Ground Range Projection coefficients.

◆ saveState()

bool ossimplugins::ossimRadarSat2Model::saveState ( ossimKeywordlist kwl,
const char *  prefix = 0 
) const
virtual

Method to save object state to a keyword list.

Parameters
kwlKeyword list to save to.
prefixadded to keys when saved.
Returns
true on success, false on error.

Reimplemented from ossimplugins::ossimGeometricSarSensorModel.

Definition at line 1237 of file ossimRadarSat2Model.cpp.

References _n_srgr, _noiseLevel, ossimplugins::ossimGeometricSarSensorModel::_productXmlFile, _SrGr_coeffs, _SrGr_R0, _srgr_update, ossimKeywordlist::add(), ossimString::c_str(), ossimNotify(), ossimNotifyLevel_DEBUG, ossimplugins::ossimGeometricSarSensorModel::saveState(), and ossimString::toString().

1239 {
1240  static const char MODULE[] = "ossimRadarSat2Model::saveState";
1241 
1242  if (traceDebug())
1243  {
1244  ossimNotify(ossimNotifyLevel_DEBUG)<< MODULE << " entered...\n";
1245  }
1246 
1247  bool result = true;
1248 
1249  // Save our state:
1250  kwl.add(prefix, PRODUCT_XML_FILE_KW, _productXmlFile.c_str());
1251  kwl.add(prefix, NUMBER_SRGR_COEFFICIENTS_KW, _n_srgr);
1252 
1253  // Make sure all the arrays are equal in size.
1254  const ossim_uint32 COUNT = static_cast<ossim_uint32>(_n_srgr);
1255 
1256  if ( (_srgr_update.size() == COUNT) &&
1257  (_SrGr_R0.size() == COUNT) &&
1258  (_SrGr_coeffs.size() == COUNT) )
1259  {
1260  ossimString kw1 = "sr_gr_update_";
1261  ossimString kw2 = "sr_gr_r0_";
1262  ossimString kw3 = "sr_gr_coeffs_";
1263 
1264  for(ossim_uint32 i = 0; i < COUNT; ++i)
1265  {
1267 
1268  ossimString kw = kw1;
1269  kw += iStr;
1270  kwl.add(prefix, kw, _srgr_update[i]);
1271 
1272  kw = kw2;
1273  kw += iStr;
1274  kwl.add(prefix, kw, _SrGr_R0[i]);
1275 
1276  for (ossim_uint32 j = 0; j < _SrGr_coeffs[i].size(); ++j)
1277  {
1279  kw = kw3;
1280  kw += iStr;
1281  kw += "_";
1282  kw += jStr;
1283  kwl.add(prefix, kw,_SrGr_coeffs[i][j]);
1284  }
1285  }
1286  }
1287  else
1288  {
1289  result = false;
1290  }
1291 
1292  if (result)
1293  {
1294  // Call base save state:
1295  result = ossimGeometricSarSensorModel::saveState(kwl, prefix);
1296  }
1297 
1298  if (result)
1299  {
1300  for(ossim_uint32 i = 0; i < _noiseLevel.size(); ++i)
1301  {
1302  _noiseLevel[i].saveState(kwl, prefix);
1303  }
1304 
1305  }
1306 
1307  //---
1308  // Uncomment to force load from product file instead of loadState.
1309  //---
1310  //if (result)
1311  //{
1312  // kwl.add(prefix, LOAD_FROM_PRODUCT_FILE_KW, "true");
1313  //}
1314 
1315  if (traceDebug())
1316  {
1318  << MODULE << " exit status = " << (result?"true":"false\n")
1319  << std::endl;
1320  }
1321 
1322  return result;
1323 }
std::vector< RadarSat2NoiseLevel > _noiseLevel
noise level values
static ossimString toString(bool aValue)
Numeric to string methods.
void add(const char *prefix, const ossimKeywordlist &kwl, bool overwrite=true)
int _n_srgr
Slant Range FOR EACH Ground Range (SRGR) number of coefficients sets.
unsigned int ossim_uint32
std::vector< double > _SrGr_R0
Slant Range FOR EACH Ground Range Projection reference point.
virtual bool saveState(ossimKeywordlist &kwl, const char *prefix=0) const
Method to save object state to a keyword list.
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
std::vector< double > _srgr_update
Slant Range FOR EACH Ground Range coefficient sets update times.
std::vector< std::vector< double > > _SrGr_coeffs
Slant Range FOR EACH Ground Range Projection coefficients.
OSSIMDLLEXPORT std::ostream & ossimNotify(ossimNotifyLevel level=ossimNotifyLevel_WARN)

◆ setModelRefPoint()

bool ossimplugins::ossimRadarSat2Model::setModelRefPoint ( const std::list< ossimGpt > &  groundGcpCoordinates,
const std::list< ossimDpt > &  imageGcpCoordinates 
)
private

Sets ossimSensorModel members theRefImgPt and theRefGndPt from tie points.

Parameters
groundGcpCoordinatesGround tie points.
imageGcpCoordinatesImage tie points.
Returns
true on success, false on error.

Definition at line 1519 of file ossimRadarSat2Model.cpp.

References ossimIpt::hasNans(), ossimNotify(), ossimNotifyLevel_DEBUG, ossimSensorModel::theImageSize, ossimSensorModel::theRefGndPt, ossimSensorModel::theRefImgPt, ossimIpt::x, ossimDpt::x, ossimIpt::y, and ossimDpt::y.

Referenced by initRefPoint().

1522 {
1523  static const char MODULE[] = "ossimRadarSat2Model::setModelRefPoint";
1524  if (traceDebug())
1525  {
1526  ossimNotify(ossimNotifyLevel_DEBUG)<< MODULE << " entered...\n";
1527  }
1528 
1529  bool result = false;
1530 
1531  if ( !theImageSize.hasNans() &&
1532  (groundGcpCoordinates.size() == imageGcpCoordinates.size()) )
1533  {
1534  const ossim_float64 THRESHOLD = 1.0;
1535  ossimDpt center;
1536  center.x = theImageSize.x / 2.0;
1537  center.y = theImageSize.y / 2.0;
1538  std::list<ossimGpt>::const_iterator gi = groundGcpCoordinates.begin();
1539  std::list<ossimDpt>::const_iterator di = imageGcpCoordinates.begin();
1540 
1541  result = true;
1542 
1543  // Set the first point to reference for starters:
1544  theRefImgPt = (*di);
1545  theRefGndPt = (*gi);
1546  ++gi;
1547  ++di;
1548 
1549  // Loop to find the image point closest to center.
1550  while( gi != groundGcpCoordinates.end() )
1551  {
1552  ossim_float64 deltaX = std::fabs( (*di).x - center.x);
1553  ossim_float64 deltaY = std::fabs( (*di).y - center.y);
1554  ossim_float64 deltaX2 = std::fabs( theRefImgPt.x - center.x);
1555  ossim_float64 deltaY2 = std::fabs( theRefImgPt.y - center.y);
1556 
1557  if ( (deltaX <= deltaX2) && (deltaY <= deltaY2) )
1558  {
1559  // Closer to center than previous:
1560  theRefImgPt = (*di);
1561  theRefGndPt = (*gi);
1562 
1563  // If threshold is met get out of loop:
1564  if ( (deltaX <= THRESHOLD) && (deltaY <= THRESHOLD) )
1565  {
1566  break;
1567  }
1568  }
1569 
1570  ++gi;
1571  ++di;
1572 
1573  } // matches: while( gi != groundGcpCoordinates.end() )
1574  }
1575 
1576  if (traceDebug())
1577  {
1578  if ( result )
1579  {
1581  << "image reference point: " << theRefImgPt
1582  << "\nground reference point: " << theRefGndPt
1583  << "\n";
1584  }
1586  << MODULE << " exit status = " << (result?"true":"false\n")
1587  << std::endl;
1588  }
1589 
1590  return result;
1591 
1592 } // End: bool ossimRadarSat2Model::setModelRefPoint( ... )
double y
Definition: ossimDpt.h:165
double ossim_float64
ossim_int32 y
Definition: ossimIpt.h:142
double x
Definition: ossimDpt.h:164
ossim_int32 x
Definition: ossimIpt.h:141
bool hasNans() const
Definition: ossimIpt.h:58
OSSIMDLLEXPORT std::ostream & ossimNotify(ossimNotifyLevel level=ossimNotifyLevel_WARN)

Member Data Documentation

◆ _n_srgr

int ossimplugins::ossimRadarSat2Model::_n_srgr
private

Slant Range FOR EACH Ground Range (SRGR) number of coefficients sets.

Definition at line 170 of file ossimRadarSat2Model.h.

Referenced by FindSRGRSetNumber(), getSlantRangeFromGeoreferenced(), InitSRGR(), initSRGR(), loadState(), print(), and saveState().

◆ _noiseLevel

std::vector< RadarSat2NoiseLevel > ossimplugins::ossimRadarSat2Model::_noiseLevel
private

noise level values

Definition at line 190 of file ossimRadarSat2Model.h.

Referenced by InitRefNoiseLevel(), loadState(), and saveState().

◆ _SrGr_coeffs

std::vector< std::vector<double> > ossimplugins::ossimRadarSat2Model::_SrGr_coeffs
private

Slant Range FOR EACH Ground Range Projection coefficients.

Definition at line 185 of file ossimRadarSat2Model.h.

Referenced by getSlantRangeFromGeoreferenced(), InitSRGR(), initSRGR(), loadState(), print(), and saveState().

◆ _SrGr_R0

std::vector<double> ossimplugins::ossimRadarSat2Model::_SrGr_R0
private

Slant Range FOR EACH Ground Range Projection reference point.

Definition at line 180 of file ossimRadarSat2Model.h.

Referenced by InitSRGR(), initSRGR(), loadState(), print(), and saveState().

◆ _srgr_update

std::vector<double> ossimplugins::ossimRadarSat2Model::_srgr_update
private

Slant Range FOR EACH Ground Range coefficient sets update times.

Definition at line 176 of file ossimRadarSat2Model.h.

Referenced by FindSRGRSetNumber(), InitSRGR(), initSRGR(), loadState(), print(), and saveState().


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