diff --git a/Utilities/otbossimplugins/ossim/ossimGeometricSarSensorModel.cpp b/Utilities/otbossimplugins/ossim/ossimGeometricSarSensorModel.cpp index f32c4367e68b0825eca196269a239dab11a970d9..099b6ed2098bd9efd673433329c3f7346fd49b78 100644 --- a/Utilities/otbossimplugins/ossim/ossimGeometricSarSensorModel.cpp +++ b/Utilities/otbossimplugins/ossim/ossimGeometricSarSensorModel.cpp @@ -45,6 +45,7 @@ ossimGeometricSarSensorModel::ossimGeometricSarSensorModel() ossimSensorModel(), _platformPosition(0), _sensor(0), + _sarSensor(0), _refPoint(0), _isProductGeoreferenced(false), _optimizationFactorX(0.0), @@ -69,6 +70,7 @@ ossimGeometricSarSensorModel::ossimGeometricSarSensorModel( _imageFilename(rhs._imageFilename), _productXmlFile(rhs._productXmlFile) { + _sarSensor = new SarSensor(_sensor,_platformPosition); } ossimGeometricSarSensorModel::~ossimGeometricSarSensorModel() @@ -85,6 +87,12 @@ ossimGeometricSarSensorModel::~ossimGeometricSarSensorModel() _sensor = 0; } + if (_sarSensor != 0) + { + delete _sarSensor; + _sarSensor = 0; + } + if(_refPoint != 0) { delete _refPoint; @@ -134,7 +142,12 @@ void ossimGeometricSarSensorModel::lineSampleHeightToWorld( const double& heightEllipsoid, ossimGpt& worldPoint) const { - SarSensor sensor(_sensor,_platformPosition); + + if (!_sarSensor) + { + // bad design consequence, should be fixed. + _sarSensor = new SarSensor(_sensor, _platformPosition); + } double lon, lat; // const double CLUM = 2.99792458e+8 ; @@ -155,7 +168,7 @@ void ossimGeometricSarSensorModel::lineSampleHeightToWorld( slantRange = getSlantRange(col) ; } - int etatLoc = sensor.ImageToWorld(slantRange, azimuthTime, heightEllipsoid, lon, lat); + int etatLoc = _sarSensor->ImageToWorld(slantRange, azimuthTime, heightEllipsoid, lon, lat); if(traceDebug()) { @@ -402,6 +415,8 @@ bool ossimGeometricSarSensorModel::loadState(const ossimKeywordlist &kwl, result = false; } + _sarSensor = new SarSensor(_sensor, _platformPosition); + // Load the ref point. if ( !_refPoint) { diff --git a/Utilities/otbossimplugins/ossim/ossimGeometricSarSensorModel.h b/Utilities/otbossimplugins/ossim/ossimGeometricSarSensorModel.h index e4921a569e0b759d8101b997b91beec272449709..b23a356c29f7d5cac84a97ac6a8575ee8be95d93 100644 --- a/Utilities/otbossimplugins/ossim/ossimGeometricSarSensorModel.h +++ b/Utilities/otbossimplugins/ossim/ossimGeometricSarSensorModel.h @@ -36,6 +36,7 @@ namespace ossimplugins class PlatformPosition; class SensorParams; class RefPoint; +class SarSensor; /** * @brief This class allows for direct localisation and indirect localisation @@ -189,6 +190,11 @@ protected: PlatformPosition *_platformPosition; SensorParams * _sensor; RefPoint * _refPoint; + // Note that this is only mutable because of bad design of the + // classes, with a bunch of classes initializing the variables of + // the base class directly, the 3 variable above must be made + // private. + mutable SarSensor* _sarSensor; /** * @brief True iff the product is ground range @@ -209,7 +215,7 @@ protected: double _optimizationBiasX ; double _optimizationBiasY ; - ossimFilename _imageFilename; + ossimFilename _imageFilename; ossimFilename _productXmlFile; ossimRefPtr<ossimCoarseGridModel> _replacementOcgModel; diff --git a/Utilities/otbossimplugins/ossim/otb/SarSensor.cpp b/Utilities/otbossimplugins/ossim/otb/SarSensor.cpp index 1f21df61eba6ade40522a4bff29b74b64f047f69..df51232a27923af335367754a400a2d8d0ac7515 100644 --- a/Utilities/otbossimplugins/ossim/otb/SarSensor.cpp +++ b/Utilities/otbossimplugins/ossim/otb/SarSensor.cpp @@ -34,7 +34,7 @@ SarSensor::~SarSensor() { } -int SarSensor::ImageToWorld(double distance, JSDDateTime time, double height, double& lon, double& lat) +int SarSensor::ImageToWorld(double distance, JSDDateTime time, double height, double& lon, double& lat) const { const double TWOPI = 6.28318530717958647693 ; @@ -75,7 +75,7 @@ int SarSensor::ImageToWorld(double distance, JSDDateTime time, double height, do int SarSensor::localisationSAR ( GeographicEphemeris PosVit , double lambda , double dist , double fDop , int sensVisee , double rayonEqu , double rayonPol , - double h , RectangularCoordinate* cart ) + double h , RectangularCoordinate* cart ) const { double coordCart[3]; coordCart[0]=0.0; diff --git a/Utilities/otbossimplugins/ossim/otb/SarSensor.h b/Utilities/otbossimplugins/ossim/otb/SarSensor.h index 826d276ad81bef10c7182fa1d91e989ca2effa0d..7d5209592b1fe1212669c83cbfa12d186ee720f6 100644 --- a/Utilities/otbossimplugins/ossim/otb/SarSensor.h +++ b/Utilities/otbossimplugins/ossim/otb/SarSensor.h @@ -53,7 +53,7 @@ public: * * @remark : the doppler frequency is set to zero in this implementation */ - virtual int ImageToWorld(double distance, JSDDateTime time, double height, double& lon, double& lat); + virtual int ImageToWorld(double distance, JSDDateTime time, double height, double& lon, double& lat) const; protected: /** @@ -62,7 +62,7 @@ protected: int localisationSAR ( GeographicEphemeris PosVit , double lambda , double dist , double fDop , int sensVisee , double rayonEqu , double rayonPol , - double h , RectangularCoordinate* cart ); + double h , RectangularCoordinate* cart ) const; private: }; diff --git a/Utilities/otbossimplugins/ossim/otb/Sensor.h b/Utilities/otbossimplugins/ossim/otb/Sensor.h index 92e2903b62b6adf6fbd6bd0f08c06d93dd2e70a8..a2996f2ded565aec19fd8773c9ed6913d939e21b 100644 --- a/Utilities/otbossimplugins/ossim/otb/Sensor.h +++ b/Utilities/otbossimplugins/ossim/otb/Sensor.h @@ -50,7 +50,7 @@ public: * @retval lon : Longitude of the world point * @retval lat : Latitude of the world point */ - virtual int ImageToWorld(double distance, JSDDateTime time, double height, double& lon, double& lat) = 0; + virtual int ImageToWorld(double distance, JSDDateTime time, double height, double& lon, double& lat) const = 0; protected: SensorParams * _params; PlatformPosition* _position;