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

This class allows for direct localisation and indirect localisation using the geometric model of SAR sensors. More...

#include <ossimGeometricSarSensorModel.h>

Inheritance diagram for ossimplugins::ossimGeometricSarSensorModel:
ossimSensorModel ossimProjection ossimOptimizableProjection ossimAdjustableParameterInterface ossimObject ossimErrorStatusInterface ossimReferenced ossimplugins::ossimAlosPalsarModel ossimplugins::ossimCosmoSkymedModel ossimplugins::ossimEnvisatAsarModel ossimplugins::ossimErsSarModel ossimplugins::ossimRadarSat2Model ossimplugins::ossimRadarSatModel ossimplugins::ossimTerraSarModel

Public Member Functions

 ossimGeometricSarSensorModel ()
 default constructor More...
 
 ossimGeometricSarSensorModel (const ossimGeometricSarSensorModel &rhs)
 copy constructor More...
 
virtual ~ossimGeometricSarSensorModel ()
 Destructor. More...
 
virtual double getSlantRangeFromGeoreferenced (double col) const =0
 This function associates an image column number to a slant range when the image is georeferenced (ground projected) 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
 
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
 
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 ossimObjectdup () const =0
 
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)
 
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...
 

Static Public Attributes

static const char * CREATE_OCG_PREF_KW = "geometric_sar_sensor_model.create_ocg"
 

Protected Member Functions

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

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
 

Private Member Functions

virtual bool InitPlatformPosition (const ossimKeywordlist &kwl, const char *prefix)=0
 Initializes the Platform Position from a projection keywordlist. More...
 
virtual bool InitSensorParams (const ossimKeywordlist &kwl, const char *prefix)=0
 Initializes the Sensor Params from a projection keywordlist. More...
 
virtual bool InitRefPoint (const ossimKeywordlist &kwl, const char *prefix)=0
 Initializes the Reference Point from a projection keywordlist. More...
 
virtual bool InitSRGR (const ossimKeywordlist &kwl, const char *prefix)=0
 Initializes the Slant Range to/for each Ground Range data sets from a projection keywordlist. 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)
 

Detailed Description

This class allows for direct localisation and indirect localisation using the geometric model of SAR sensors.

This class must be specified for each sensor.

Definition at line 36 of file ossimGeometricSarSensorModel.h.

Constructor & Destructor Documentation

◆ ossimGeometricSarSensorModel() [1/2]

ossimplugins::ossimGeometricSarSensorModel::ossimGeometricSarSensorModel ( )

default constructor

Definition at line 42 of file ossimGeometricSarSensorModel.cpp.

43  :
46  _sensor(0),
47  _refPoint(0),
48  _sarSensor(0),
52  _optimizationBiasX(0.0),
54  {
55  }
bool _isProductGeoreferenced
True iff the product is ground range.
PlatformPosition * _platformPosition
Handle the position of the platform.
double _optimizationFactorX
Optimization result : linear error correction in both dimensions.

◆ ossimGeometricSarSensorModel() [2/2]

ossimplugins::ossimGeometricSarSensorModel::ossimGeometricSarSensorModel ( const ossimGeometricSarSensorModel rhs)

copy constructor

Definition at line 57 of file ossimGeometricSarSensorModel.cpp.

References _platformPosition, _sarSensor, and _sensor.

59  :
60  ossimSensorModel(rhs),
61  _platformPosition(rhs._platformPosition?rhs._platformPosition->Clone():(PlatformPosition*)0),
62  _sensor(rhs._sensor?rhs._sensor->Clone():(SensorParams*)0),
63  _refPoint(rhs._refPoint?rhs._refPoint->Clone():( RefPoint *)0),
64  _isProductGeoreferenced(rhs._isProductGeoreferenced),
65  _optimizationFactorX(rhs._optimizationFactorX),
66  _optimizationFactorY(rhs._optimizationFactorY),
67  _optimizationBiasX(rhs._optimizationBiasX),
68  _optimizationBiasY(rhs._optimizationBiasY),
69  _imageFilename(rhs._imageFilename),
70  _productXmlFile(rhs._productXmlFile)
71  {
72  _sarSensor = new SarSensor(_sensor,_platformPosition);
73  }
bool _isProductGeoreferenced
True iff the product is ground range.
PlatformPosition * _platformPosition
Handle the position of the platform.
double _optimizationFactorX
Optimization result : linear error correction in both dimensions.

◆ ~ossimGeometricSarSensorModel()

ossimplugins::ossimGeometricSarSensorModel::~ossimGeometricSarSensorModel ( )
virtual

Destructor.

Definition at line 75 of file ossimGeometricSarSensorModel.cpp.

References _platformPosition, _refPoint, _sarSensor, and _sensor.

76  {
77  if (_platformPosition != 0)
78  {
79  delete _platformPosition;
81  }
82 
83  if(_sensor != 0)
84  {
85  delete _sensor;
86  _sensor = 0;
87  }
88 
89  if (_sarSensor != 0)
90  {
91  delete _sarSensor;
92  _sarSensor = 0;
93  }
94 
95  if(_refPoint != 0)
96  {
97  delete _refPoint;
98  _refPoint = 0;
99  }
100  }
PlatformPosition * _platformPosition
Handle the position of the platform.

Member Function Documentation

◆ clearGCPlist()

void ossimplugins::ossimGeometricSarSensorModel::clearGCPlist ( )
virtual

Clears _optimizationGCPsGroundCoordinates and _optimizationGCPsImageCoordinates attributes Updates the optimisation factors and bias.

Definition at line 185 of file ossimGeometricSarSensorModel.cpp.

References _optimizationGCPsGroundCoordinates, _optimizationGCPsImageCoordinates, and optimizeModel().

185  {
188 
189  // optimization model update
191  }
std::list< ossimGpt > _optimizationGCPsGroundCoordinates
List Ground Control Points used by the optimization.
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.

◆ createReplacementOCG()

bool ossimplugins::ossimGeometricSarSensorModel::createReplacementOCG ( )
protected

Creates replacement coarse grid model if user requested via ossim preferences keyword "geometric_sar_sensor_model.create_ocg: <bool>".

Returns
true if load OK, false on error

Definition at line 606 of file ossimGeometricSarSensorModel.cpp.

References ossimPreferences::instance(), ossimCoarseGridModel::setInterpolationError(), and ossimString::toBool().

Referenced by ossimplugins::ossimRadarSat2Model::open().

607 {
608  // Read the preferences to determine if we need to do this:
610  if (!str.toBool())
611  return true; // this is not an error condition
612 
613  // Compute the coarse grid:
617 
618  if (traceDebug())
619  {
620  ossimNotify(ossimNotifyLevel_NOTICE)<<"\nComputing coarse grid..."<<endl;
621  }
622  _replacementOcgModel->buildGrid(theImageClipRect, this, 500.00, true, false);
623 
624  // Save the coarse grid to appropriate location given image filename:
625  bool status = _replacementOcgModel->saveCoarseGrid(_imageFilename); // this saves geom file as well
626 
627  return status;
628 }
ossimRefPtr< ossimCoarseGridModel > _replacementOcgModel
static void setMinGridSpacing(ossim_int32 minSpacing=100)
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.
static void setInterpolationError(double error=.1)
This is used when building a grid from a projector.
static ossimPreferences * instance()
return status
ossimDrect theImageClipRect
bool saveCoarseGrid(const ossimFilename &cgFileName) const
Saves the coarse grid to the specified file.
OSSIMDLLEXPORT std::ostream & ossimNotify(ossimNotifyLevel level=ossimNotifyLevel_WARN)

◆ get_optimizationBiasX()

double ossimplugins::ossimGeometricSarSensorModel::get_optimizationBiasX ( ) const
inline

◆ get_optimizationBiasY()

double ossimplugins::ossimGeometricSarSensorModel::get_optimizationBiasY ( ) const
inline

◆ get_optimizationFactorX()

double ossimplugins::ossimGeometricSarSensorModel::get_optimizationFactorX ( ) const
inline

Accessors to the optimization parameters.

Definition at line 159 of file ossimGeometricSarSensorModel.h.

159 { return _optimizationFactorX; }
double _optimizationFactorX
Optimization result : linear error correction in both dimensions.

◆ get_optimizationFactorY()

double ossimplugins::ossimGeometricSarSensorModel::get_optimizationFactorY ( ) const
inline

◆ get_platformPosition()

PlatformPosition * ossimplugins::ossimGeometricSarSensorModel::get_platformPosition ( ) const

Definition at line 791 of file ossimGeometricSarSensorModel.cpp.

792 {
793  return _platformPosition;
794 }
PlatformPosition * _platformPosition
Handle the position of the platform.

◆ get_refPoint()

RefPoint * ossimplugins::ossimGeometricSarSensorModel::get_refPoint ( ) const

Definition at line 803 of file ossimGeometricSarSensorModel.cpp.

◆ get_sensorParams()

SensorParams * ossimplugins::ossimGeometricSarSensorModel::get_sensorParams ( ) const

Definition at line 797 of file ossimGeometricSarSensorModel.cpp.

798 {
799  return _sensor;
800 }

◆ getGCPlist()

void ossimplugins::ossimGeometricSarSensorModel::getGCPlist ( std::list< ossimGpt > &  groundCoordinates,
std::list< ossimDpt > &  imageCoordinates 
)
virtual

Returns _optimizationGCPsGroundCoordinates and _optimizationGCPsImageCoordinates attributes.

Return values
groundCoordinates: GCP ground coordinates
imageCoordinates: actual image coordinates corresponding to groundCoordinates

Definition at line 193 of file ossimGeometricSarSensorModel.cpp.

References _optimizationGCPsGroundCoordinates, and _optimizationGCPsImageCoordinates.

193  {
194  groundCoordinates = _optimizationGCPsGroundCoordinates ;
195  imageCoordinates = _optimizationGCPsImageCoordinates ;
196  }
std::list< ossimGpt > _optimizationGCPsGroundCoordinates
List Ground Control Points used by the optimization.

◆ getPlatformPositionAtLine()

bool ossimplugins::ossimGeometricSarSensorModel::getPlatformPositionAtLine ( double  line,
vector< double > &  position,
vector< double > &  speed 
)
virtual

This function associates an image line number to a platform position and speed.

Parameters
lineLine coordinate of the image point
positionPosition of the sensor at line line
speedSpeed of the sensor at line line

Definition at line 122 of file ossimGeometricSarSensorModel.cpp.

References _platformPosition, ossimplugins::PlatformPosition::getPlatformPositionAtTime(), and getTime().

123  {
124  JSDDateTime time = getTime(line);
125  return _platformPosition->getPlatformPositionAtTime(time,position,speed);
126  }
virtual JSDDateTime getTime(double line) const
This function associates an image line number to an azimuth time.
PlatformPosition * _platformPosition
Handle the position of the platform.
bool getPlatformPositionAtTime(JSDDateTime time, std::vector< double > &position, std::vector< double > &speed)
This function interpolates its ephemeris to create and extract platform&#39;s position and speed...

◆ getReplacementOcgModel()

ossimRefPtr<ossimCoarseGridModel> ossimplugins::ossimGeometricSarSensorModel::getReplacementOcgModel ( )
inline

Definition at line 164 of file ossimGeometricSarSensorModel.h.

164 { return _replacementOcgModel; }
ossimRefPtr< ossimCoarseGridModel > _replacementOcgModel

◆ getSlantRange()

double ossimplugins::ossimGeometricSarSensorModel::getSlantRange ( double  col) const
virtual

This function associates an image column number to a slant range.

Parameters
colColumn coordinate of the image point

Definition at line 102 of file ossimGeometricSarSensorModel.cpp.

References _refPoint, _sensor, ossimplugins::SensorParams::get_col_direction(), ossimplugins::RefPoint::get_distance(), ossimplugins::SensorParams::get_nRangeLook(), ossimplugins::RefPoint::get_pix_col(), and ossimplugins::SensorParams::get_sf().

Referenced by lineSampleHeightToWorld().

103  {
104  const double CLUM = 2.99792458e+8 ;
105 
106  double dist = _refPoint->get_distance()
107  + _sensor->get_col_direction() * (col - (_refPoint->get_pix_col())) * ((CLUM / 2.0) * _sensor->get_nRangeLook() / _sensor->get_sf()) ;
108 
109  return dist;
110  }
double get_distance() const
Definition: RefPoint.cpp:95
double get_nRangeLook() const
Definition: SensorParams.h:118
double get_pix_col() const
Definition: RefPoint.cpp:105

◆ getSlantRangeFromGeoreferenced()

virtual double ossimplugins::ossimGeometricSarSensorModel::getSlantRangeFromGeoreferenced ( double  col) const
pure 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

Implemented in ossimplugins::ossimRadarSat2Model, ossimplugins::ossimAlosPalsarModel, ossimplugins::ossimTerraSarModel, ossimplugins::ossimRadarSatModel, ossimplugins::ossimEnvisatAsarModel, ossimplugins::ossimErsSarModel, and ossimplugins::ossimCosmoSkymedModel.

Referenced by lineSampleHeightToWorld().

◆ getTime()

JSDDateTime ossimplugins::ossimGeometricSarSensorModel::getTime ( double  line) const
virtual

This function associates an image line number to an azimuth time.

Parameters
lineLine coordinate of the image point

Definition at line 112 of file ossimGeometricSarSensorModel.cpp.

References _refPoint, _sensor, ossimplugins::Ephemeris::get_date(), ossimplugins::RefPoint::get_ephemeris(), ossimplugins::SensorParams::get_lin_direction(), ossimplugins::SensorParams::get_nAzimuthLook(), ossimplugins::RefPoint::get_pix_line(), ossimplugins::SensorParams::get_prf(), ossimplugins::JSDDateTime::get_second(), ossimplugins::JSDDateTime::NormDate(), and ossimplugins::JSDDateTime::set_second().

Referenced by getPlatformPositionAtLine(), and lineSampleHeightToWorld().

113  {
114  double dt = _sensor->get_lin_direction() * (line - _refPoint->get_pix_line()) * _sensor->get_nAzimuthLook() / _sensor->get_prf() ;
115  JSDDateTime time = _refPoint->get_ephemeris()->get_date();
116  time.set_second(time.get_second() + dt);
117  time.NormDate();
118 
119  return time;
120  }
Ephemeris * get_ephemeris()
Definition: RefPoint.cpp:90
void set_second(double second)
Definition: JSDDateTime.h:91
double get_nAzimuthLook() const
Definition: SensorParams.h:113
double get_pix_line() const
Definition: RefPoint.cpp:100
JSDDateTime get_date() const
Definition: Ephemeris.h:63

◆ InitPlatformPosition()

virtual bool ossimplugins::ossimGeometricSarSensorModel::InitPlatformPosition ( const ossimKeywordlist kwl,
const char *  prefix 
)
privatepure virtual

◆ InitRefPoint()

virtual bool ossimplugins::ossimGeometricSarSensorModel::InitRefPoint ( const ossimKeywordlist kwl,
const char *  prefix 
)
privatepure virtual

◆ InitSensorParams()

virtual bool ossimplugins::ossimGeometricSarSensorModel::InitSensorParams ( const ossimKeywordlist kwl,
const char *  prefix 
)
privatepure virtual

◆ InitSRGR()

virtual bool ossimplugins::ossimGeometricSarSensorModel::InitSRGR ( const ossimKeywordlist kwl,
const char *  prefix 
)
privatepure virtual

◆ lineSampleHeightToWorld()

void ossimplugins::ossimGeometricSarSensorModel::lineSampleHeightToWorld ( const ossimDpt image_point,
const double &  heightEllipsoid,
ossimGpt worldPoint 
) const
virtual

This function is able to convert image coordinates into world coordinates the geometric model of SAR sensors.

Parameters
image_pointCoordinates of the image point
heightEllipsoidAltitude of the world point
worldPointCoordinates of the world point (OUT)

Implements ossimSensorModel.

Definition at line 128 of file ossimGeometricSarSensorModel.cpp.

References _isProductGeoreferenced, _optimizationBiasX, _optimizationBiasY, _optimizationFactorX, _optimizationFactorY, _platformPosition, _sarSensor, _sensor, getSlantRange(), getSlantRangeFromGeoreferenced(), getTime(), ossimGpt::hgt, ossimplugins::SarSensor::ImageToWorld(), ossimGpt::lat, ossimGpt::lon, ossimNotify(), ossimNotifyLevel_DEBUG, ossimDpt::x, and ossimDpt::y.

132  {
133 
134  if (!_sarSensor)
135  {
136  // bad design consequence, should be fixed.
137  _sarSensor = new SarSensor(_sensor, _platformPosition);
138  }
139  double lon, lat;
140  // const double CLUM = 2.99792458e+8 ;
141 
142  // optimization
143  double col = image_point.x - (image_point.x * _optimizationFactorX + _optimizationBiasX) ;
144  double line = image_point.y - (image_point.y * _optimizationFactorY + _optimizationBiasY) ;
145 
146  JSDDateTime azimuthTime = getTime(line) ;
147 
148  // Slant range computation, depending on the product type
149  double slantRange;
151  {
152  slantRange = getSlantRangeFromGeoreferenced(col) ;
153  }
154  else
155  {
156  slantRange = getSlantRange(col) ;
157  }
158 
159  int etatLoc = _sarSensor->ImageToWorld(slantRange, azimuthTime, heightEllipsoid, lon, lat);
160 
161  if(traceDebug())
162  {
163  switch (etatLoc)
164  {
165  case 0:
166  ossimNotify(ossimNotifyLevel_DEBUG) << "successful call to lineSampleHeightToWorld" << std::endl;
167  break;
168  case 1:
169  ossimNotify(ossimNotifyLevel_DEBUG) << "lineSampleHeightToWorld : no real root to the equation belongs to the imaging ray" << std::endl;
170  break;
171  case 2:
172  ossimNotify(ossimNotifyLevel_DEBUG) << "lineSampleHeightToWorld : no real root to the equation" << std::endl;
173  break;
174  default :
175  ossimNotify(ossimNotifyLevel_DEBUG) << "lineSampleHeightToWorld : unknown error case" << std::endl;
176  break;
177  }
178  }
179 
180  worldPoint.lat = lat;
181  worldPoint.lon = lon;
182  worldPoint.hgt = heightEllipsoid ;
183  }
double y
Definition: ossimDpt.h:165
virtual int ImageToWorld(double distance, JSDDateTime time, double height, double &lon, double &lat) const
This function is able to convert image coordinates into geodetic world coordinates using a geometric ...
Definition: SarSensor.cpp:37
ossim_float64 hgt
Height in meters above the ellipsiod.
Definition: ossimGpt.h:274
virtual JSDDateTime getTime(double line) const
This function associates an image line number to an azimuth time.
bool _isProductGeoreferenced
True iff the product is ground range.
ossim_float64 lon
Definition: ossimGpt.h:266
PlatformPosition * _platformPosition
Handle the position of the platform.
virtual double getSlantRangeFromGeoreferenced(double col) const =0
This function associates an image column number to a slant range when the image is georeferenced (gro...
double _optimizationFactorX
Optimization result : linear error correction in both dimensions.
double x
Definition: ossimDpt.h:164
ossim_float64 lat
Definition: ossimGpt.h:265
virtual double getSlantRange(double col) const
This function associates an image column number to a slant range.
OSSIMDLLEXPORT std::ostream & ossimNotify(ossimNotifyLevel level=ossimNotifyLevel_WARN)

◆ lineSampleToWorld()

void ossimplugins::ossimGeometricSarSensorModel::lineSampleToWorld ( const ossimDpt image_point,
ossimGpt world_point 
) const
virtual

Implementation of base-class pure virtual projection methods. These methods may be overriden by derived classes if those have more efficient schemes. The implementations here are iterative (relatively slow). Both depend on calls to the pure virtual lineSampleHeightToWorld() method.

Reimplemented from ossimSensorModel.

Definition at line 637 of file ossimGeometricSarSensorModel.cpp.

Referenced by ossimplugins::ossimRadarSatModel::open(), and ossimplugins::ossimRadarSat2Model::open().

639 {
640  bool debug = false; // setable via interactive debugger
641  if (traceDebug() || debug) ossimNotify(ossimNotifyLevel_DEBUG) << "DEBUG ossimSensorModel::lineSampleToWorld:entering..." << std::endl;
642 
643  if(image_point.hasNans())
644  {
645  gpt.makeNan();
646  return;
647  }
648  //***
649  // Extrapolate if image point is outside image:
650  //***
651  if (!insideImage(image_point)&&(!theExtrapolateImageFlag))
652  {
653  gpt = extrapolate(image_point);
654  return;
655  }
656 
657  //***
658  // Determine imaging ray and invoke elevation source object's services to
659  // intersect ray with terrain model:
660  //***
661  // ossimEcefRay ray; In the case of SAR sensors, ray intersection does not have meaning anymore...
662  // imagingRay(image_point, ray);
663  // ossimElevManager::instance()->intersectRay(ray, gpt);
664 
665  static const double LON_LAT_THRESHOLD = .00001; // acceptable lon lat error (degrees)
666  static const int MAX_NUM_ITERATIONS = 30;
667  static const double LON_LAT_STEP = .00001;
668  int iters = 0;
669 
670  //
671  // Utilize iterative scheme for arriving at ground point. Begin with guess
672  // at RefGndPt:
673  //
674  gpt.lond(theRefGndPt.lond());
675  gpt.latd(theRefGndPt.latd());
676  gpt.height(ossimElevManager::instance()->getHeightAboveEllipsoid(gpt));
677 
678  ossimGpt gpt_dlat;
679  ossimGpt gpt_dlon;
680 
681  ossimDpt ip, ip_dlat, ip_dlon;
682  double du_dlat, du_dlon, dv_dlat, dv_dlon;
683  double delta_lat, delta_lon, delta_u, delta_v;
684  double inverse_norm;
685  bool done = false;
686 
687  //***
688  // Begin iterations:
689  //***
690  do
691  {
692  //***
693  // establish perturbed ground points about the guessed point:
694  //***
695  gpt_dlat.latd(gpt.latd() + LON_LAT_STEP);
696  gpt_dlat.lond(gpt.lond());
697  gpt_dlat.height(ossimElevManager::instance()->getHeightAboveEllipsoid(gpt_dlat));
698  gpt_dlon.latd(gpt.latd());
699  gpt_dlon.lond(gpt.lond() + LON_LAT_STEP);
700  gpt_dlon.height(ossimElevManager::instance()->getHeightAboveEllipsoid(gpt_dlon));
701 
702  //***
703  // Compute numerical partials at current guessed point:
704  //***
705  worldToLineSample(gpt, ip);
706  worldToLineSample(gpt_dlat, ip_dlat);
707  worldToLineSample(gpt_dlon, ip_dlon);
708 
709  if(ip.hasNans() || ip_dlat.hasNans() || ip_dlon.hasNans())
710  {
711  gpt.makeNan();
712  return;
713  }
714 
715  du_dlat = (ip_dlat.u - ip.u) / LON_LAT_STEP;
716  du_dlon = (ip_dlon.u - ip.u) / LON_LAT_STEP;
717  dv_dlat = (ip_dlat.v - ip.v) / LON_LAT_STEP;
718  dv_dlon = (ip_dlon.v - ip.v) / LON_LAT_STEP;
719 
720  //
721  // Test for convergence:
722  //
723  delta_u = image_point.u - ip.u;
724  delta_v = image_point.v - ip.v;
725 
726  //
727  // Compute linearized estimate of ground point given ip delta:
728  //
729  inverse_norm = du_dlon*dv_dlat - dv_dlon*du_dlat; // fg-eh
730 
731  if (!ossim::almostEqual(inverse_norm, 0.0, DBL_EPSILON))
732  {
733  delta_lon = (delta_u*dv_dlat - delta_v*du_dlat)/inverse_norm;
734  delta_lat = (delta_v*du_dlon - delta_u*dv_dlon)/inverse_norm;
735  gpt.latd(gpt.latd() + delta_lat);
736  gpt.lond(gpt.lond() + delta_lon);
737  gpt.height(ossimElevManager::instance()->getHeightAboveEllipsoid(gpt));
738  }
739  else
740  {
741  delta_lon = 0;
742  delta_lat = 0;
743  }
744  done = ((fabs(delta_lon) < LON_LAT_THRESHOLD) && (fabs(delta_lat) < LON_LAT_THRESHOLD));
745  iters++;
746  } while ((!done) && (iters < MAX_NUM_ITERATIONS));
747 
748  if (traceDebug() || debug)
749  {
750  ossimNotify(ossimNotifyLevel_DEBUG) << "image_point = " << image_point << std::endl;
751  // ossimNotify(ossimNotifyLevel_DEBUG) << "ray = " << ray << std::endl;
752  ossimNotify(ossimNotifyLevel_DEBUG) << "gpt = " << gpt << std::endl;
753  }
754 
755  if (traceDebug() || debug) ossimNotify(ossimNotifyLevel_DEBUG) << "DEBUG ossimSensorModel::lineSampleToWorld: returning..." << std::endl;
756  return;
757 }
double lond() const
Will convert the radian measure to degrees.
Definition: ossimGpt.h:97
double u
Definition: ossimDpt.h:164
bool almostEqual(T x, T y, T tolerance=FLT_EPSILON)
Definition: ossimCommon.h:53
static ossimElevManager * instance()
METHOD: instance() Implements singelton pattern.
double latd() const
Will convert the radian measure to degrees.
Definition: ossimGpt.h:87
double height() const
Definition: ossimGpt.h:107
#define DBL_EPSILON
bool hasNans() const
Definition: ossimDpt.h:67
virtual ossimDpt extrapolate(const ossimGpt &gp) const
virtual void worldToLineSample(const ossimGpt &world_point, ossimDpt &image_point) const
virtual bool insideImage(const ossimDpt &p) const
OSSIMDLLEXPORT std::ostream & ossimNotify(ossimNotifyLevel level=ossimNotifyLevel_WARN)
double v
Definition: ossimDpt.h:165

◆ loadState()

bool ossimplugins::ossimGeometricSarSensorModel::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 ossimSensorModel.

Reimplemented in ossimplugins::ossimRadarSat2Model, ossimplugins::ossimTerraSarModel, ossimplugins::ossimAlosPalsarModel, ossimplugins::ossimRadarSatModel, ossimplugins::ossimEnvisatAsarModel, and ossimplugins::ossimErsSarModel.

Definition at line 350 of file ossimGeometricSarSensorModel.cpp.

References _isProductGeoreferenced, _optimizationBiasX, _optimizationBiasY, _optimizationFactorX, _optimizationFactorY, _platformPosition, _refPoint, _sarSensor, _sensor, ossimKeywordlist::find(), ossimplugins::RefPoint::loadState(), ossimplugins::PlatformPosition::loadState(), ossimSensorModel::loadState(), ossimplugins::SensorParams::loadState(), ossimNotify(), ossimNotifyLevel_DEBUG, ossimNotifyLevel_WARN, ossimString::toBool(), and ossimString::toDouble().

Referenced by ossimplugins::ossimTerraSarModel::loadState(), and ossimplugins::ossimRadarSat2Model::loadState().

352  {
353  static const char MODULE[] = "ossimGeometricSarSensorModel::loadState";
354 
355  if (traceDebug())
356  {
357  ossimNotify(ossimNotifyLevel_DEBUG) << MODULE << " entered...\n";
358  }
359 
360  bool result = true;
361 
362  // Load the base class;
363  if ( ossimSensorModel::loadState(kwl, prefix) == false )
364  {
365  if (traceDebug())
366  {
368  << MODULE
369  << "\nossimSensorModel::loadState failed!\n";
370  }
371  result = false;
372  }
373 
374  // Load the platform position state.
375  if ( !_platformPosition)
376  {
377  _platformPosition = new PlatformPosition();
378  }
379  if ( _platformPosition->loadState(kwl, prefix) == false )
380  {
381  if (traceDebug())
382  {
384  << MODULE
385  << "\n_platformPosition->loadState failed!\n";
386  }
387  result = false;
388  }
389 
390  // Load the sensor position state.
391  if ( !_sensor)
392  {
393  _sensor = new SensorParams();
394  }
395  if ( _sensor->loadState(kwl, prefix) == false )
396  {
397  if (traceDebug())
398  {
400  << MODULE
401  << "\n_sensor->loadState failed!\n";
402  }
403  result = false;
404  }
405 
406  _sarSensor = new SarSensor(_sensor, _platformPosition);
407 
408  // Load the ref point.
409  if ( !_refPoint)
410  {
411  _refPoint = new RefPoint();
412  }
413  if ( _refPoint->loadState(kwl, prefix) == false )
414  {
415  if (traceDebug())
416  {
418  << MODULE
419  << "\n_refPoint->loadState failed!\n";
420  }
421  result = false;
422  }
423 
424  const char* lookup = 0;
425  ossimString s;
426 
427  lookup = kwl.find(prefix, PRODUCT_GEOREFERENCED_FLAG_KW);
428  if (lookup)
429  {
430  s = lookup;
432  }
433  else
434  {
435  if (traceDebug())
436  {
438  << MODULE
439  << "\nRequired keyword not found: "
440  << PRODUCT_GEOREFERENCED_FLAG_KW << "\n";
441  }
442  result = false;
443  }
444 
445  lookup = kwl.find(prefix, OPTIMIZATION_FACTOR_X_KW);
446  if (lookup)
447  {
448  s = lookup;
450  }
451  else
452  {
453  if (traceDebug())
454  {
456  << MODULE
457  << "\nRequired keyword not found: "
458  << OPTIMIZATION_FACTOR_X_KW << "\n";
459  }
460  result = false;
461  }
462 
463  lookup = kwl.find(prefix, OPTIMIZATION_FACTOR_Y_KW);
464  if (lookup)
465  {
466  s = lookup;
468  }
469  else
470  {
471  if (traceDebug())
472  {
474  << MODULE
475  << "\nRequired keyword not found: "
476  << OPTIMIZATION_FACTOR_Y_KW << "\n";
477  }
478  result = false;
479  }
480 
481  lookup = kwl.find(prefix,OPTIMIZATION_BIAS_X_KW);
482  if (lookup)
483  {
484  s = lookup;
486  }
487  else
488  {
489  if (traceDebug())
490  {
492  << MODULE
493  << "\nRequired keyword not found: "
494  << OPTIMIZATION_BIAS_X_KW << "\n";
495  }
496  result = false;
497  }
498 
499  lookup = kwl.find(prefix,OPTIMIZATION_BIAS_Y_KW);
500  if (lookup)
501  {
502  s = lookup;
504  }
505  else
506  {
507  if (traceDebug())
508  {
510  << MODULE
511  << "\nRequired keyword not found: "
512  << OPTIMIZATION_BIAS_X_KW << "\n";
513  }
514  result = false;
515  }
516 
517  // if (result && traceDebug())
518 // if (result)
519 // {
520 // ossimNotify(ossimNotifyLevel_DEBUG)
521 // << "calling saveState to verify loadState..." << endl;
522 
523 // ossimKeywordlist kwl2;
524 // saveState(kwl2, 0);
525 
526 // ossimNotify(ossimNotifyLevel_DEBUG)
527 // << "saveState result after loadState:" << kwl2 << endl;
528 // }
529 
530  if (traceDebug())
531  {
533  << MODULE << " exit status = " << (result?"true":"false\n")
534  << std::endl;
535  }
536 
537  return result;
538  }
bool loadState(const ossimKeywordlist &kwl, const char *prefix=0)
Method to the load (recreate) the state of the object from a keyword list.
virtual bool loadState(const ossimKeywordlist &kwl, const char *prefix=0)
bool loadState(const ossimKeywordlist &kwl, const char *prefix=0)
Method to the load (recreate) the state of the object from a keyword list.
const char * find(const char *key) const
bool _isProductGeoreferenced
True iff the product is ground range.
bool loadState(const ossimKeywordlist &kwl, const char *prefix=0)
Method to the load (recreate) the state of the object from a keyword list.
Definition: RefPoint.cpp:137
bool toBool() const
String to numeric methods.
double toDouble() const
PlatformPosition * _platformPosition
Handle the position of the platform.
double _optimizationFactorX
Optimization result : linear error correction in both dimensions.
OSSIMDLLEXPORT std::ostream & ossimNotify(ossimNotifyLevel level=ossimNotifyLevel_WARN)

◆ optimizeModel()

bool ossimplugins::ossimGeometricSarSensorModel::optimizeModel ( const std::list< ossimGpt > &  groundCoordinates,
const std::list< ossimDpt > &  imageCoordinates 
)
virtual

This function optimizes the model according to a list of Ground Control Points.

The input list of GCPs is appended to the one present in memory. An inverse localization of each ground GCP is performed. The error between localized GCPs and actual image coordinates is then computed and modeled by a linear model on each dimension. The time and range estimations are updated accordingly.

Parameters
groundCoordinates: input GCP ground coordinates
imageCoordinates: actual image coordinates corresponding to input groundCoordinates

Definition at line 198 of file ossimGeometricSarSensorModel.cpp.

References _optimizationBiasX, _optimizationBiasY, _optimizationFactorX, _optimizationFactorY, _optimizationGCPsGroundCoordinates, _optimizationGCPsImageCoordinates, FLT_EPSILON, true, and ossimSensorModel::worldToLineSample().

Referenced by clearGCPlist(), ossimplugins::ossimCosmoSkymedModel::InitRefPoint(), ossimplugins::ossimErsSarModel::InitRefPoint(), ossimplugins::ossimRadarSat2Model::InitRefPoint(), ossimplugins::ossimEnvisatAsarModel::InitRefPoint(), ossimplugins::ossimRadarSatModel::InitRefPoint(), and ossimplugins::ossimRadarSat2Model::initRefPoint().

199  {
200  if (groundCoordinates.size() != imageCoordinates.size()) return false ;
201 
202  // no optimization is used during the GCP localization error computation
203  _optimizationFactorX = 0.0 ;
204  _optimizationFactorY = 0.0 ;
205  _optimizationBiasX = 0.0 ;
206  _optimizationBiasY = 0.0 ;
207 
208  // appends the user input GCPs to the GCPs already present
209  _optimizationGCPsGroundCoordinates.insert(_optimizationGCPsGroundCoordinates.end(), groundCoordinates.begin(), groundCoordinates.end()) ;
210  _optimizationGCPsImageCoordinates.insert(_optimizationGCPsImageCoordinates.end(), imageCoordinates.begin(), imageCoordinates.end()) ;
211 
212  // no GCP : no optimization
213  if (groundCoordinates.size() == 0) return true ;
214 
215  // Inverse projection of each Ground Control Point
216  std::list<ossimGpt>::iterator itGround = _optimizationGCPsGroundCoordinates.begin() ;
217  std::list<ossimDpt> inverseLocResults ;
218  while (itGround != _optimizationGCPsGroundCoordinates.end())
219  {
220  ossimDpt itLoc ;
221  this->worldToLineSample(*itGround,itLoc);
222  inverseLocResults.push_back(itLoc) ;
223  itGround++;
224  }
225 
226  // error computation
227  int nbPoints = _optimizationGCPsGroundCoordinates.size() ;
228  double xErrorMean = 0.0, yErrorMean = 0.0, xActualPow = 0.0, yActualPow = 0.0, xActualMean = 0.0, yActualMean = 0.0,
229  xErrorByActualMean = 0.0, yErrorByActualMean = 0.0 ;
230  double xLocalError, yLocalError ;
231 
232  std::list<ossimDpt>::iterator itActualCoords = _optimizationGCPsImageCoordinates.begin() ;
233  std::list<ossimDpt>::iterator itEstimatedCoords = inverseLocResults.begin() ;
234  while ((itActualCoords != _optimizationGCPsImageCoordinates.end())&&(itEstimatedCoords != inverseLocResults.end())) {
235  xLocalError = itActualCoords->x - itEstimatedCoords->x ;
236  yLocalError = itActualCoords->y - itEstimatedCoords->y ;
237 
238  xErrorMean += xLocalError ;
239  yErrorMean += yLocalError ;
240  xActualMean += itActualCoords->x ;
241  yActualMean += itActualCoords->y ;
242  xActualPow += itActualCoords->x * itActualCoords->x ;
243  yActualPow += itActualCoords->y * itActualCoords->y ;
244  xErrorByActualMean += xLocalError * itActualCoords->x ;
245  yErrorByActualMean += yLocalError * itActualCoords->y ;
246 
247  ++itActualCoords;
248  ++itEstimatedCoords;
249  }
250 
251  xErrorMean /= nbPoints ;
252  yErrorMean /= nbPoints ;
253  xActualMean /= nbPoints ;
254  yActualMean /= nbPoints ;
255  xActualPow /= nbPoints ;
256  yActualPow /= nbPoints ;
257  xErrorByActualMean /= nbPoints ;
258  yErrorByActualMean /= nbPoints ;
259 
260  // linear regression
261  if (fabs(xActualPow - xActualMean*xActualMean) > FLT_EPSILON)
262  _optimizationFactorX = (xErrorByActualMean - xErrorMean * xActualMean) / (xActualPow - xActualMean*xActualMean) ;
263  if (fabs(yActualPow - yActualMean*yActualMean) > FLT_EPSILON)
264  _optimizationFactorY = (yErrorByActualMean - yErrorMean * yActualMean) / (yActualPow - yActualMean*yActualMean) ;
265  _optimizationBiasX = xErrorMean - _optimizationFactorX * xActualMean ;
266  _optimizationBiasY = yErrorMean - _optimizationFactorY * yActualMean ;
267 
269  //double lineBias = 0.0, columnBias = 0.0 ;
270  //int nbPtsUsed = 0;
271 
272  //std::list<ossimDpt>::iterator itActualCoords = imageCoordinates.begin() ;
273  //std::list<ossimDpt>::iterator itEstimatedCoords = inverseLocResults.begin() ;
274  //while ((itActualCoords != imageCoordinates.end())&&(itEstimatedCoords != inverseLocResults.end())) {
275  //
276  // columnBias += (itActualCoords->x - itEstimatedCoords->x ) ;
277  // lineBias += (itActualCoords->y - itEstimatedCoords->y ) ;
278  //
279  // nbPtsUsed++;
280  // itActualCoords++;
281  // itEstimatedCoords++;
282  //}
283 
285  //lineBias /= nbPtsUsed ;
286  //columnBias /= nbPtsUsed ;
287 
289  //_refPoint->set_pix_col(_refPoint->get_pix_col() - columnBias);
290  //_refPoint->set_pix_line(_refPoint->get_pix_line() - lineBias);
291 
292  return true ;
293  }
std::list< ossimGpt > _optimizationGCPsGroundCoordinates
List Ground Control Points used by the optimization.
#define FLT_EPSILON
virtual void worldToLineSample(const ossimGpt &world_point, ossimDpt &image_point) const
double _optimizationFactorX
Optimization result : linear error correction in both dimensions.

◆ print()

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

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

Reimplemented from ossimSensorModel.

Reimplemented in ossimplugins::ossimRadarSat2Model, ossimplugins::ossimTerraSarModel, and ossimplugins::ossimEnvisatAsarModel.

Definition at line 561 of file ossimGeometricSarSensorModel.cpp.

References ossimKeywordlist::add().

Referenced by ossimplugins::ossimErsSarModel::open(), ossimplugins::ossimAlosPalsarModel::open(), ossimplugins::ossimEnvisatAsarModel::print(), and ossimplugins::ossimRadarSat2Model::print().

562 {
563  out << setprecision(15) << setiosflags(ios::fixed)
564  << "\nossimGeometricSarSensorModel class data members:\n";
565 
566  const char* prefix = 0;
567  ossimKeywordlist kwl;
568  if (_platformPosition)
569  {
570  _platformPosition->saveState(kwl, prefix);
571  }
572  if (_sensor)
573  {
574  _sensor->saveState(kwl, prefix);
575  }
576  if (_refPoint)
577  {
578  _refPoint->saveState(kwl, prefix);
579  }
580 
581  kwl.add(prefix,
582  PRODUCT_GEOREFERENCED_FLAG_KW,
583  (_isProductGeoreferenced?"true":"false"));
584  kwl.add(prefix,
585  OPTIMIZATION_FACTOR_X_KW,
587  kwl.add(prefix,
588  OPTIMIZATION_FACTOR_Y_KW,
590  kwl.add(prefix,
591  OPTIMIZATION_BIAS_X_KW,
593  kwl.add(prefix,
594  OPTIMIZATION_BIAS_Y_KW,
596 
597  out << kwl;
598 
599  return ossimSensorModel::print(out);
600 }
bool saveState(ossimKeywordlist &kwl, const char *prefix=0) const
Method to save object state to a keyword list.
Definition: RefPoint.cpp:110
Represents serializable keyword/value map.
bool _isProductGeoreferenced
True iff the product is ground range.
void add(const char *prefix, const ossimKeywordlist &kwl, bool overwrite=true)
bool saveState(ossimKeywordlist &kwl, const char *prefix=0) const
Method to save object state to a keyword list.
virtual std::ostream & print(std::ostream &out) const
PlatformPosition * _platformPosition
Handle the position of the platform.
double _optimizationFactorX
Optimization result : linear error correction in both dimensions.
bool saveState(ossimKeywordlist &kwl, const char *prefix=0) const
Method to save object state to a keyword list.

◆ saveState()

bool ossimplugins::ossimGeometricSarSensorModel::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 ossimSensorModel.

Reimplemented in ossimplugins::ossimRadarSat2Model, ossimplugins::ossimTerraSarModel, ossimplugins::ossimAlosPalsarModel, ossimplugins::ossimRadarSatModel, ossimplugins::ossimEnvisatAsarModel, and ossimplugins::ossimErsSarModel.

Definition at line 295 of file ossimGeometricSarSensorModel.cpp.

References _isProductGeoreferenced, _optimizationBiasX, _optimizationBiasY, _optimizationFactorX, _optimizationFactorY, _platformPosition, _refPoint, _sensor, ossimKeywordlist::add(), ossimNotify(), ossimNotifyLevel_DEBUG, ossimplugins::RefPoint::saveState(), ossimplugins::PlatformPosition::saveState(), ossimSensorModel::saveState(), and ossimplugins::SensorParams::saveState().

Referenced by ossimplugins::ossimRadarSatModel::saveState(), and ossimplugins::ossimRadarSat2Model::saveState().

298  {
299  static const char MODULE[] = "ossimGeometricSarSensorModel::saveState";
300 
301  bool result = false;
302 
303  if (traceDebug())
304  {
305  ossimNotify(ossimNotifyLevel_DEBUG)<< MODULE << " entered...\n";
306  }
307 
309  {
310  if ( _platformPosition->saveState(kwl, prefix) )
311  {
312  if ( _sensor->saveState(kwl, prefix) )
313  {
314  result = _refPoint->saveState(kwl, prefix);
315 
316  if (result)
317  {
318  kwl.add(prefix,
319  PRODUCT_GEOREFERENCED_FLAG_KW,
320  (_isProductGeoreferenced?"true":"false"));
321  kwl.add(prefix,
322  OPTIMIZATION_FACTOR_X_KW,
324  kwl.add(prefix,
325  OPTIMIZATION_FACTOR_Y_KW,
327  kwl.add(prefix,
328  OPTIMIZATION_BIAS_X_KW,
330  kwl.add(prefix,
331  OPTIMIZATION_BIAS_Y_KW,
333 
334  result = ossimSensorModel::saveState(kwl, prefix);
335  }
336  }
337  }
338  }
339 
340  if (traceDebug())
341  {
343  << MODULE << " exit status = " << (result?"true":"false\n")
344  << std::endl;
345  }
346 
347  return result;
348  }
bool saveState(ossimKeywordlist &kwl, const char *prefix=0) const
Method to save object state to a keyword list.
Definition: RefPoint.cpp:110
bool _isProductGeoreferenced
True iff the product is ground range.
void add(const char *prefix, const ossimKeywordlist &kwl, bool overwrite=true)
bool saveState(ossimKeywordlist &kwl, const char *prefix=0) const
Method to save object state to a keyword list.
virtual bool saveState(ossimKeywordlist &kwl, const char *prefix=0) const
PlatformPosition * _platformPosition
Handle the position of the platform.
double _optimizationFactorX
Optimization result : linear error correction in both dimensions.
bool saveState(ossimKeywordlist &kwl, const char *prefix=0) const
Method to save object state to a keyword list.
OSSIMDLLEXPORT std::ostream & ossimNotify(ossimNotifyLevel level=ossimNotifyLevel_WARN)

◆ set_platformPosition()

void ossimplugins::ossimGeometricSarSensorModel::set_platformPosition ( PlatformPosition platformPosition)

Accessors to the plateform, sensor parameters and reference point.

Definition at line 760 of file ossimGeometricSarSensorModel.cpp.

References ossimplugins::PlatformPosition::Clone().

761 {
762  if(_platformPosition != 0)
763  {
764  delete _platformPosition;
765  _platformPosition = 0;
766  }
767  _platformPosition = platformPosition->Clone();
768 }
PlatformPosition * Clone() const
PlatformPosition * _platformPosition
Handle the position of the platform.

◆ set_refPoint()

void ossimplugins::ossimGeometricSarSensorModel::set_refPoint ( RefPoint refPoint)

Definition at line 780 of file ossimGeometricSarSensorModel.cpp.

References ossimplugins::RefPoint::Clone().

781 {
782  if(_refPoint != 0)
783  {
784  delete _refPoint;
785  _refPoint = 0;
786  }
787  _refPoint = refPoint->Clone();
788 }
RefPoint * Clone()
Definition: RefPoint.h:59

◆ set_sensorParams()

void ossimplugins::ossimGeometricSarSensorModel::set_sensorParams ( SensorParams sensorParams)

Definition at line 770 of file ossimGeometricSarSensorModel.cpp.

References ossimplugins::SensorParams::Clone().

771 {
772  if(_sensor != 0)
773  {
774  delete _sensor;
775  _sensor = 0;
776  }
777  _sensor = sensorParams->Clone();
778 }
virtual SensorParams * Clone()
Definition: SensorParams.h:98

◆ useForward()

virtual bool ossimplugins::ossimGeometricSarSensorModel::useForward ( ) const
inlinevirtual
Returns
true when it's better (more accurate / fast) to use forward (from ground to image) than inverse(from image to ground)
Remarks
This function always return false

Implements ossimOptimizableProjection.

Definition at line 132 of file ossimGeometricSarSensorModel.h.

132 {return false;}

Member Data Documentation

◆ _imageFilename

ossimFilename ossimplugins::ossimGeometricSarSensorModel::_imageFilename
protected

◆ _isProductGeoreferenced

bool ossimplugins::ossimGeometricSarSensorModel::_isProductGeoreferenced
protected

◆ _optimizationBiasX

double ossimplugins::ossimGeometricSarSensorModel::_optimizationBiasX
protected

◆ _optimizationBiasY

double ossimplugins::ossimGeometricSarSensorModel::_optimizationBiasY
protected

◆ _optimizationFactorX

double ossimplugins::ossimGeometricSarSensorModel::_optimizationFactorX
protected

Optimization result : linear error correction in both dimensions.

Definition at line 213 of file ossimGeometricSarSensorModel.h.

Referenced by lineSampleHeightToWorld(), loadState(), optimizeModel(), and saveState().

◆ _optimizationFactorY

double ossimplugins::ossimGeometricSarSensorModel::_optimizationFactorY
protected

◆ _optimizationGCPsGroundCoordinates

std::list<ossimGpt> ossimplugins::ossimGeometricSarSensorModel::_optimizationGCPsGroundCoordinates
protected

List Ground Control Points used by the optimization.

Definition at line 207 of file ossimGeometricSarSensorModel.h.

Referenced by clearGCPlist(), getGCPlist(), and optimizeModel().

◆ _optimizationGCPsImageCoordinates

std::list<ossimDpt> ossimplugins::ossimGeometricSarSensorModel::_optimizationGCPsImageCoordinates
protected

Definition at line 208 of file ossimGeometricSarSensorModel.h.

Referenced by clearGCPlist(), getGCPlist(), and optimizeModel().

◆ _platformPosition

PlatformPosition* ossimplugins::ossimGeometricSarSensorModel::_platformPosition
protected

◆ _productXmlFile

ossimFilename ossimplugins::ossimGeometricSarSensorModel::_productXmlFile
protected

◆ _refPoint

RefPoint* ossimplugins::ossimGeometricSarSensorModel::_refPoint
protected

◆ _replacementOcgModel

ossimRefPtr<ossimCoarseGridModel> ossimplugins::ossimGeometricSarSensorModel::_replacementOcgModel
protected

Definition at line 221 of file ossimGeometricSarSensorModel.h.

◆ _sarSensor

SarSensor* ossimplugins::ossimGeometricSarSensorModel::_sarSensor
mutableprotected

◆ _sensor

SensorParams* ossimplugins::ossimGeometricSarSensorModel::_sensor
protected

◆ CREATE_OCG_PREF_KW

const char * ossimplugins::ossimGeometricSarSensorModel::CREATE_OCG_PREF_KW = "geometric_sar_sensor_model.create_ocg"
static

Definition at line 39 of file ossimGeometricSarSensorModel.h.


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