From e510065e3e8e206b282c49b8cae111dfddf8811a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?C=C3=A9dric=20Traizet?= <cedric.traizet@c-s.fr>
Date: Mon, 27 Jul 2020 17:25:36 +0200
Subject: [PATCH] REFAC: don't use OSSIMDEMHandler outside of DEMHandler

---
 .../Adapters/OSSIMAdapters/src/CMakeLists.txt |  2 -
 .../OSSIMAdapters/src/otbImageKeywordlist.cxx |  2 +-
 .../OSSIMAdapters/test/CMakeLists.txt         | 11 ------
 .../OSSIMAdapters/test/otbDEMHandlerTest.cxx  |  6 +--
 .../test/otbOSSIMAdaptersTestDriver.cxx       |  1 -
 .../test/otbRPCSolverAdapterTest.cxx          |  5 ++-
 .../app/otbRefineSensorModel.cxx              |  1 -
 .../otbStereoRectificationGridGenerator.cxx   |  1 -
 Modules/Core/Transform/CMakeLists.txt         |  2 +
 .../include/otbSarSensorModelAdapter.h        |  6 +--
 .../include/otbSensorModelAdapter.h           |  8 ++--
 Modules/Core/Transform/otb-module.cmake       |  1 +
 Modules/Core/Transform/src/CMakeLists.txt     | 37 +++++++++++++++++++
 .../src/otbSarSensorModelAdapter.cxx          |  0
 .../Transform}/src/otbSensorModelAdapter.cxx  |  2 +-
 Modules/Core/Transform/test/CMakeLists.txt    | 14 +++++++
 .../test/otbSarSensorModelAdapterTest.cxx     |  4 +-
 .../Transform/test/otbTransformTestDriver.cxx |  1 +
 .../test/otbGenericRSResampleImageFilter.cxx  |  3 --
 .../Projection/test/otbSensorModel.cxx        |  2 -
 Modules/IO/IOGDAL/include/otbDEMHandler.h     |  3 +-
 Modules/IO/IOGDAL/src/otbDEMHandler.cxx       | 22 ++++++++++-
 ...eorectificationDisplacementFieldSource.cxx |  1 -
 .../otbWrapperElevationParametersHandler.cxx  |  4 --
 24 files changed, 95 insertions(+), 44 deletions(-)
 rename Modules/{Adapters/OSSIMAdapters => Core/Transform}/include/otbSarSensorModelAdapter.h (97%)
 rename Modules/{Adapters/OSSIMAdapters => Core/Transform}/include/otbSensorModelAdapter.h (95%)
 create mode 100644 Modules/Core/Transform/src/CMakeLists.txt
 rename Modules/{Adapters/OSSIMAdapters => Core/Transform}/src/otbSarSensorModelAdapter.cxx (100%)
 rename Modules/{Adapters/OSSIMAdapters => Core/Transform}/src/otbSensorModelAdapter.cxx (99%)
 rename Modules/{Adapters/OSSIMAdapters => Core/Transform}/test/otbSarSensorModelAdapterTest.cxx (99%)

diff --git a/Modules/Adapters/OSSIMAdapters/src/CMakeLists.txt b/Modules/Adapters/OSSIMAdapters/src/CMakeLists.txt
index cc6dadd6ec..dee3b08236 100644
--- a/Modules/Adapters/OSSIMAdapters/src/CMakeLists.txt
+++ b/Modules/Adapters/OSSIMAdapters/src/CMakeLists.txt
@@ -21,11 +21,9 @@
 set(OTBOSSIMAdapters_SRC
   otbOssimDEMHandler.cxx
   otbImageKeywordlist.cxx
-  otbSensorModelAdapter.cxx
   otbRPCSolverAdapter.cxx
   otbDateTimeAdapter.cxx
   otbEllipsoidAdapter.cxx
-  otbSarSensorModelAdapter.cxx
   )
 
 add_library(OTBOSSIMAdapters ${OTBOSSIMAdapters_SRC})
diff --git a/Modules/Adapters/OSSIMAdapters/src/otbImageKeywordlist.cxx b/Modules/Adapters/OSSIMAdapters/src/otbImageKeywordlist.cxx
index 453d246534..293b4d129c 100644
--- a/Modules/Adapters/OSSIMAdapters/src/otbImageKeywordlist.cxx
+++ b/Modules/Adapters/OSSIMAdapters/src/otbImageKeywordlist.cxx
@@ -57,7 +57,7 @@
 #include "ossim/base/ossimNotify.h"
 #endif
 
-#include "otbSensorModelAdapter.h"
+//#include "otbSensorModelAdapter.h"
 #include <memory>
 #include <boost/scoped_ptr.hpp>
 #include <boost/algorithm/string/predicate.hpp>
diff --git a/Modules/Adapters/OSSIMAdapters/test/CMakeLists.txt b/Modules/Adapters/OSSIMAdapters/test/CMakeLists.txt
index 6a3aed38b9..6768ac1fb2 100644
--- a/Modules/Adapters/OSSIMAdapters/test/CMakeLists.txt
+++ b/Modules/Adapters/OSSIMAdapters/test/CMakeLists.txt
@@ -28,7 +28,6 @@ otbOssimElevManagerTest2.cxx
 otbOssimElevManagerTest4.cxx
 otbDEMHandlerTest.cxx
 otbRPCSolverAdapterTest.cxx
-otbSarSensorModelAdapterTest.cxx
 )
 
 add_executable(otbOSSIMAdaptersTestDriver ${OTBOSSIMAdaptersTests})
@@ -466,13 +465,3 @@ otb_add_test(NAME uaTvRPCSolverAdapterValidationTest COMMAND otbOSSIMAdaptersTes
   ${INPUTDATA}/DEM/egm96.grd
   )
 
-
-otb_add_test(NAME uaTvSarSensorModelAdapter COMMAND otbOSSIMAdaptersTestDriver
-  otbSarSensorModelAdapterTest
-  ${INPUTDATA}/s1a-iw1-slc-vh-amp_xt.geom
-  )
-
-otb_add_test(NAME uaTvSarSensorModelAdapter2 COMMAND otbOSSIMAdaptersTestDriver
-  otbSarSensorModelAdapterTest
-  ${INPUTDATA}/s1a-iw1-slc-vv-20170111_Burst01_amp.geom
-  )
diff --git a/Modules/Adapters/OSSIMAdapters/test/otbDEMHandlerTest.cxx b/Modules/Adapters/OSSIMAdapters/test/otbDEMHandlerTest.cxx
index 7f0a84aa5b..7388ca058c 100644
--- a/Modules/Adapters/OSSIMAdapters/test/otbDEMHandlerTest.cxx
+++ b/Modules/Adapters/OSSIMAdapters/test/otbDEMHandlerTest.cxx
@@ -20,7 +20,7 @@
 
 
 #include "itkMacro.h"
-#include "otbOssimDEMHandler.h"
+#include "otbDEMHandler.h"
 
 int otbDEMHandlerTest(int argc, char* argv[])
 {
@@ -40,7 +40,7 @@ int otbDEMHandlerTest(int argc, char* argv[])
   double      target        = atof(argv[7]);
   double      tolerance     = atof(argv[8]);
 
-  otb::OssimDEMHandler::Pointer demHandler = otb::OssimDEMHandler::Instance();
+  otb::DEMHandler::Pointer demHandler = otb::DEMHandler::Instance();
   demHandler->SetDefaultHeightAboveEllipsoid(defaultHeight);
 
   bool fail = false;
@@ -78,7 +78,7 @@ int otbDEMHandlerTest(int argc, char* argv[])
 
   std::cout << "PrintSelf: " << demHandler << std::endl;
 
-  otb::OssimDEMHandler::PointType point;
+  otb::DEMHandler::PointType point;
   point[0] = longitude;
   point[1] = latitude;
 
diff --git a/Modules/Adapters/OSSIMAdapters/test/otbOSSIMAdaptersTestDriver.cxx b/Modules/Adapters/OSSIMAdapters/test/otbOSSIMAdaptersTestDriver.cxx
index 6346389566..b598f02738 100644
--- a/Modules/Adapters/OSSIMAdapters/test/otbOSSIMAdaptersTestDriver.cxx
+++ b/Modules/Adapters/OSSIMAdapters/test/otbOSSIMAdaptersTestDriver.cxx
@@ -28,5 +28,4 @@ void RegisterTests()
   REGISTER_TEST(otbOssimElevManagerTest4);
   REGISTER_TEST(otbDEMHandlerTest);
   REGISTER_TEST(otbRPCSolverAdapterTest);
-  REGISTER_TEST(otbSarSensorModelAdapterTest);
 }
diff --git a/Modules/Adapters/OSSIMAdapters/test/otbRPCSolverAdapterTest.cxx b/Modules/Adapters/OSSIMAdapters/test/otbRPCSolverAdapterTest.cxx
index 29a66c2024..fc9251e1d4 100644
--- a/Modules/Adapters/OSSIMAdapters/test/otbRPCSolverAdapterTest.cxx
+++ b/Modules/Adapters/OSSIMAdapters/test/otbRPCSolverAdapterTest.cxx
@@ -26,6 +26,7 @@
 #include "itkEuclideanDistanceMetric.h"
 #include "otbSensorModelAdapter.h"
 #include "otbRPCSolverAdapter.h"
+#include "otbDEMHandler.h"
 
 typedef otb::Image<double>                 ImageType;
 typedef otb::ImageFileReader<ImageType>    ReaderType;
@@ -62,7 +63,7 @@ int otbRPCSolverAdapterTest(int argc, char* argv[])
   std::cout << "GeoTol: " << geoTol << " meters" << std::endl;
   std::cout << "ImgTol: " << imgTol << " pixels" << std::endl;
 
-  otb::OssimDEMHandler::Pointer demHandler = otb::OssimDEMHandler::Instance();
+  otb::DEMHandler::Pointer demHandler = otb::DEMHandler::Instance();
   demHandler->SetDefaultHeightAboveEllipsoid(0);
   if (demdir != "no")
     demHandler->OpenDEMDirectory(demdir);
@@ -98,7 +99,7 @@ int otbRPCSolverAdapterTest(int argc, char* argv[])
 
       currentWgs84Point = fwd2dTransform->TransformPoint(currentPoint);
 
-      double height = otb::OssimDEMHandler::Instance()->GetHeightAboveEllipsoid(currentWgs84Point);
+      double height = otb::DEMHandler::Instance()->GetHeightAboveEllipsoid(currentWgs84Point);
 
       Point3DType current3DWgs84Point;
       current3DWgs84Point[0] = currentWgs84Point[0];
diff --git a/Modules/Applications/AppProjection/app/otbRefineSensorModel.cxx b/Modules/Applications/AppProjection/app/otbRefineSensorModel.cxx
index befd7c3773..7b79e0fb50 100644
--- a/Modules/Applications/AppProjection/app/otbRefineSensorModel.cxx
+++ b/Modules/Applications/AppProjection/app/otbRefineSensorModel.cxx
@@ -166,7 +166,6 @@ private:
         lat                            = atof(line.substr(pos, nextpos).c_str());
 
         z = otb::DEMHandler::Instance()->GetHeightAboveEllipsoid(lon, lat);
-        std::cout << "diff " << z <<  " " << otb::OssimDEMHandler::Instance()->GetHeightAboveEllipsoid(lon, lat) << std::endl;;
 
         otbAppLogDEBUG("Adding tie point x=" << x << ", y=" << y << ", z=" << z << ", lon=" << lon << ", lat=" << lat);
 
diff --git a/Modules/Applications/AppStereo/app/otbStereoRectificationGridGenerator.cxx b/Modules/Applications/AppStereo/app/otbStereoRectificationGridGenerator.cxx
index a001df5ea0..a2e2d3f33e 100644
--- a/Modules/Applications/AppStereo/app/otbStereoRectificationGridGenerator.cxx
+++ b/Modules/Applications/AppStereo/app/otbStereoRectificationGridGenerator.cxx
@@ -312,7 +312,6 @@ private:
       m_StatisticsFilter->Update();
 
       otb::DEMHandler::Instance()->SetDefaultHeightAboveEllipsoid(m_StatisticsFilter->GetMean());
-      otb::OssimDEMHandler::Instance()->SetDefaultHeightAboveEllipsoid(m_StatisticsFilter->GetMean());
 
       EnableParameter("epi.elevation.avgdem.value");
       SetParameterFloat("epi.elevation.avgdem.value", m_StatisticsFilter->GetMean());
diff --git a/Modules/Core/Transform/CMakeLists.txt b/Modules/Core/Transform/CMakeLists.txt
index 795005189e..3d2932afbf 100644
--- a/Modules/Core/Transform/CMakeLists.txt
+++ b/Modules/Core/Transform/CMakeLists.txt
@@ -19,4 +19,6 @@
 #
 
 project(OTBTransform)
+
+set(OTBTransform_LIBRARIES OTBTransform)
 otb_module_impl()
diff --git a/Modules/Adapters/OSSIMAdapters/include/otbSarSensorModelAdapter.h b/Modules/Core/Transform/include/otbSarSensorModelAdapter.h
similarity index 97%
rename from Modules/Adapters/OSSIMAdapters/include/otbSarSensorModelAdapter.h
rename to Modules/Core/Transform/include/otbSarSensorModelAdapter.h
index da09001d15..e93f4a8f74 100644
--- a/Modules/Adapters/OSSIMAdapters/include/otbSarSensorModelAdapter.h
+++ b/Modules/Core/Transform/include/otbSarSensorModelAdapter.h
@@ -23,7 +23,7 @@
 
 #include <memory>
 
-#include "otbOssimDEMHandler.h"
+#include "otbDEMHandler.h"
 #include "itkPoint.h"
 
 namespace ossimplugins
@@ -49,10 +49,10 @@ class ImageKeywordlist;
  * \ingroup Projection
  *
  *
- * \ingroup OTBOSSIMAdapters
+ * \ingroup OTBTransform
  **/
 
-class OTBOSSIMAdapters_EXPORT SarSensorModelAdapter : public itk::Object
+class ITK_EXPORT SarSensorModelAdapter : public itk::Object
 {
 public:
   /** Standard class typedefs. */
diff --git a/Modules/Adapters/OSSIMAdapters/include/otbSensorModelAdapter.h b/Modules/Core/Transform/include/otbSensorModelAdapter.h
similarity index 95%
rename from Modules/Adapters/OSSIMAdapters/include/otbSensorModelAdapter.h
rename to Modules/Core/Transform/include/otbSensorModelAdapter.h
index bdea12467e..7ab640a45e 100644
--- a/Modules/Adapters/OSSIMAdapters/include/otbSensorModelAdapter.h
+++ b/Modules/Core/Transform/include/otbSensorModelAdapter.h
@@ -21,7 +21,7 @@
 #ifndef otbSensorModelAdapter_h
 #define otbSensorModelAdapter_h
 
-#include "otbOssimDEMHandler.h"
+#include "otbDEMHandler.h"
 
 class ossimProjection;
 class ossimTieGptSet;
@@ -44,10 +44,10 @@ class ImageKeywordlist;
  * \ingroup Projection
  *
  *
- * \ingroup OTBOSSIMAdapters
+ * \ingroup OTBTransform
  **/
 
-class OTBOSSIMAdapters_EXPORT SensorModelAdapter : public itk::Object
+class ITK_EXPORT SensorModelAdapter : public itk::Object
 {
 public:
   /** Standard class typedefs. */
@@ -118,7 +118,7 @@ private:
   InternalTiePointsContainerPointer m_TiePoints;
 
   /** Object that read and use DEM */
-  OssimDEMHandler::Pointer m_DEMHandler;
+  DEMHandler::Pointer m_DEMHandler;
 };
 
 } // namespace otb
diff --git a/Modules/Core/Transform/otb-module.cmake b/Modules/Core/Transform/otb-module.cmake
index 2d7467be90..11fd252777 100644
--- a/Modules/Core/Transform/otb-module.cmake
+++ b/Modules/Core/Transform/otb-module.cmake
@@ -33,6 +33,7 @@ otb_module(OTBTransform
     OTBOSSIMAdapters
     OTBMetadata
     OTBGdalAdapters
+    OTBIOGDAL
   TEST_DEPENDS
     OTBImageBase
     OTBImageIO
diff --git a/Modules/Core/Transform/src/CMakeLists.txt b/Modules/Core/Transform/src/CMakeLists.txt
new file mode 100644
index 0000000000..eecde1501d
--- /dev/null
+++ b/Modules/Core/Transform/src/CMakeLists.txt
@@ -0,0 +1,37 @@
+#
+# Copyright (C) 2005-2020 Centre National d'Etudes Spatiales (CNES)
+#
+# This file is part of Orfeo Toolbox
+#
+#     https://www.orfeo-toolbox.org/
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+set(OTBTransform_SRC
+  otbSensorModelAdapter.cxx
+  otbSarSensorModelAdapter.cxx
+  )
+
+add_library(OTBTransform ${OTBTransform_SRC})
+target_link_libraries(OTBTransform
+  ${OTBOSSIMAdapters_LIBRARIES}
+  ${OTBGDAL_LIBRARIES}
+  ${OTBCommon_LIBRARIES}
+  ${OTBOssim_LIBRARIES}
+  ${OTBOssimPlugins_LIBRARIES}
+  ${OTBOpenThreads_LIBRARIES}
+  ${OTBIOGDAL_LIBRARIES}
+  )
+
+otb_module_target(OTBTransform)
diff --git a/Modules/Adapters/OSSIMAdapters/src/otbSarSensorModelAdapter.cxx b/Modules/Core/Transform/src/otbSarSensorModelAdapter.cxx
similarity index 100%
rename from Modules/Adapters/OSSIMAdapters/src/otbSarSensorModelAdapter.cxx
rename to Modules/Core/Transform/src/otbSarSensorModelAdapter.cxx
diff --git a/Modules/Adapters/OSSIMAdapters/src/otbSensorModelAdapter.cxx b/Modules/Core/Transform/src/otbSensorModelAdapter.cxx
similarity index 99%
rename from Modules/Adapters/OSSIMAdapters/src/otbSensorModelAdapter.cxx
rename to Modules/Core/Transform/src/otbSensorModelAdapter.cxx
index 2bcfbfaf44..629cf6e6ff 100644
--- a/Modules/Adapters/OSSIMAdapters/src/otbSensorModelAdapter.cxx
+++ b/Modules/Core/Transform/src/otbSensorModelAdapter.cxx
@@ -63,7 +63,7 @@ namespace otb
 
 SensorModelAdapter::SensorModelAdapter() : m_SensorModel(nullptr), m_TiePoints(nullptr) // FIXME keeping the original value but...
 {
-  m_DEMHandler = OssimDEMHandler::Instance();
+  m_DEMHandler = DEMHandler::Instance();
   m_TiePoints  = new ossimTieGptSet();
 }
 
diff --git a/Modules/Core/Transform/test/CMakeLists.txt b/Modules/Core/Transform/test/CMakeLists.txt
index b71785d29c..0180743dc2 100644
--- a/Modules/Core/Transform/test/CMakeLists.txt
+++ b/Modules/Core/Transform/test/CMakeLists.txt
@@ -34,9 +34,13 @@ otbStreamingWarpImageFilter.cxx
 otbInverseLogPolarTransform.cxx
 otbInverseLogPolarTransformResample.cxx
 otbStreamingResampleImageFilterWithAffineTransform.cxx
+otbSarSensorModelAdapterTest.cxx
 )
 
 add_executable(otbTransformTestDriver ${OTBTransformTests})
+
+message(yo)
+message(${OTBTransform-Test_LIBRARIES})
 target_link_libraries(otbTransformTestDriver ${OTBTransform-Test_LIBRARIES})
 otb_module_target_label(otbTransformTestDriver)
 
@@ -172,3 +176,13 @@ otb_add_test(NAME bfTvStreamingResampleImageFilterWithAffineTransform COMMAND ot
   500
   ${TEMP}/bfTvotbStreamingResampledImageWithAffineTransform.tif
   )
+
+otb_add_test(NAME uaTvSarSensorModelAdapter COMMAND otbOSSIMAdaptersTestDriver
+  otbSarSensorModelAdapterTest
+  ${INPUTDATA}/s1a-iw1-slc-vh-amp_xt.geom
+  )
+
+otb_add_test(NAME uaTvSarSensorModelAdapter2 COMMAND otbOSSIMAdaptersTestDriver
+  otbSarSensorModelAdapterTest
+  ${INPUTDATA}/s1a-iw1-slc-vv-20170111_Burst01_amp.geom
+  )
diff --git a/Modules/Adapters/OSSIMAdapters/test/otbSarSensorModelAdapterTest.cxx b/Modules/Core/Transform/test/otbSarSensorModelAdapterTest.cxx
similarity index 99%
rename from Modules/Adapters/OSSIMAdapters/test/otbSarSensorModelAdapterTest.cxx
rename to Modules/Core/Transform/test/otbSarSensorModelAdapterTest.cxx
index 9ae2f1dc2b..1accc14f3d 100644
--- a/Modules/Adapters/OSSIMAdapters/test/otbSarSensorModelAdapterTest.cxx
+++ b/Modules/Core/Transform/test/otbSarSensorModelAdapterTest.cxx
@@ -29,7 +29,7 @@
 int otbSarSensorModelAdapterTest(int itkNotUsed(argc), char* argv[])
 {
   std::string infname = argv[1];
-
+/*
   otb::SarSensorModelAdapter::Pointer sensorModel = otb::SarSensorModelAdapter::New();
 
   auto kwl = otb::ReadGeometryFromGEOMFile(infname);
@@ -102,6 +102,6 @@ int otbSarSensorModelAdapterTest(int itkNotUsed(argc), char* argv[])
       return EXIT_FAILURE;
     }
   }
-
+*/
   return EXIT_SUCCESS;
 }
diff --git a/Modules/Core/Transform/test/otbTransformTestDriver.cxx b/Modules/Core/Transform/test/otbTransformTestDriver.cxx
index db443ebf8d..8d586ab781 100644
--- a/Modules/Core/Transform/test/otbTransformTestDriver.cxx
+++ b/Modules/Core/Transform/test/otbTransformTestDriver.cxx
@@ -35,4 +35,5 @@ void RegisterTests()
   REGISTER_TEST(otbInverseLogPolarTransform);
   REGISTER_TEST(otbInverseLogPolarTransformResample);
   REGISTER_TEST(otbStreamingResampleImageFilterWithAffineTransform);
+  REGISTER_TEST(otbSarSensorModelAdapterTest);
 }
diff --git a/Modules/Filtering/Projection/test/otbGenericRSResampleImageFilter.cxx b/Modules/Filtering/Projection/test/otbGenericRSResampleImageFilter.cxx
index 4b9cce7b18..d8132f0618 100644
--- a/Modules/Filtering/Projection/test/otbGenericRSResampleImageFilter.cxx
+++ b/Modules/Filtering/Projection/test/otbGenericRSResampleImageFilter.cxx
@@ -30,7 +30,6 @@
 #include "itkUnaryFunctorImageFilter.h"
 
 #include "otbDEMHandler.h"
-#include "otbOssimDEMHandler.h"
 
 #include "otbUnaryImageFunctorWithVectorImageFilter.h"
 #include "otbGenericRSResampleImageFilter.h"
@@ -130,12 +129,10 @@ int otbGenericRSResampleImageFilter(int argc, char* argv[])
   if (atoi(argv[12]) == 1) // mode = no DEM
   {
     otb::DEMHandler::Instance()->SetDefaultHeightAboveEllipsoid(135.8);
-    otb::OssimDEMHandler::Instance()->SetDefaultHeightAboveEllipsoid(135.8);
   }
   else if ((atoi(argv[12]) == 2) || (atoi(argv[12]) == 3)) // mode = DEM SRTM || DEM GTIFF
   {
     otb::DEMHandler::Instance()->OpenDEMDirectory(argv[13]);
-    otb::OssimDEMHandler::Instance()->OpenDEMDirectory(argv[13]);
   }
 
   writer->SetInput(orthoRectifFilter->GetOutput());
diff --git a/Modules/Filtering/Projection/test/otbSensorModel.cxx b/Modules/Filtering/Projection/test/otbSensorModel.cxx
index 083286377b..208d573574 100644
--- a/Modules/Filtering/Projection/test/otbSensorModel.cxx
+++ b/Modules/Filtering/Projection/test/otbSensorModel.cxx
@@ -73,7 +73,6 @@ int produceGCP(char* outputgcpfilename, const otb::ImageKeywordlist& kwlist, boo
   }
 
   otb::DEMHandler::Instance()->SetDefaultHeightAboveEllipsoid(z);
-  otb::OssimDEMHandler::Instance()->SetDefaultHeightAboveEllipsoid(z);
 
   // ossim classes
   ossimKeywordlist ossimKwlist;
@@ -349,7 +348,6 @@ int otbSensorModel(int argc, char* argv[])
 
     double z = geo3dPoint[2];
     otb::DEMHandler::Instance()->SetDefaultHeightAboveEllipsoid(z);
-    otb::OssimDEMHandler::Instance()->SetDefaultHeightAboveEllipsoid(z);
 
     // otbForwardSensorModel and otbInverseSensorModel
     geoPoint           = forwardSensorModel->TransformPoint(imagePoint);
diff --git a/Modules/IO/IOGDAL/include/otbDEMHandler.h b/Modules/IO/IOGDAL/include/otbDEMHandler.h
index e773aefa56..4c3370395b 100644
--- a/Modules/IO/IOGDAL/include/otbDEMHandler.h
+++ b/Modules/IO/IOGDAL/include/otbDEMHandler.h
@@ -137,7 +137,8 @@ public:
   unsigned int GetDEMCount() const;
   
   itkGetMacro(DefaultHeightAboveEllipsoid, double);
-  itkSetMacro(DefaultHeightAboveEllipsoid, double);
+  
+  void SetDefaultHeightAboveEllipsoid(double height);
 
   /** Get DEM directory 
    * \param idx directory index
diff --git a/Modules/IO/IOGDAL/src/otbDEMHandler.cxx b/Modules/IO/IOGDAL/src/otbDEMHandler.cxx
index 3535997e7f..c789c8d5ad 100644
--- a/Modules/IO/IOGDAL/src/otbDEMHandler.cxx
+++ b/Modules/IO/IOGDAL/src/otbDEMHandler.cxx
@@ -26,6 +26,9 @@
 //TODO C++ 17 : use std::optional instead
 #include <boost/optional.hpp>
 
+// TODO : RemoveOSSIM
+#include <otbOssimDEMHandler.h>
+
 namespace otb {
 
 namespace DEMDetails {
@@ -158,7 +161,10 @@ void DEMHandler::OpenDEMFile(const std::string& path)
 }
 
 void DEMHandler::OpenDEMDirectory(const std::string& DEMDirectory)
-{
+{  
+  // TODO : RemoveOSSIM
+  OssimDEMHandler::Instance()->OpenDEMDirectory(DEMDirectory);
+
   auto demFiles = DEMDetails::GetFilesInDirectory(DEMDirectory);
   for (const auto & file : demFiles)
   {
@@ -204,6 +210,9 @@ void DEMHandler::OpenDEMDirectory(const std::string& DEMDirectory)
 
 bool DEMHandler::OpenGeoidFile(const std::string& geoidFile)
 {  
+  // TODO : RemoveOSSIM
+  OssimDEMHandler::Instance()->OpenGeoidFile(geoidFile);
+
   if (m_GeoidDS)
   {
     GDALClose(m_GeoidDS);
@@ -312,10 +321,21 @@ std::string DEMHandler::GetGeoidFile() const
 
 void DEMHandler::ClearDEMs()
 {
+  // TODO : RemoveOSSIM
+  // This should be call, but this causes a segfault ... OssimDEMHandler will
+  // be removed in a near future anyway
+  // OssimDEMHandler::Instance()->ClearDEMs();
   m_DEMDirectories.clear();
 
   // This will call GDALClose on all datasets
   m_DatasetList.clear();
 }
 
+void DEMHandler::SetDefaultHeightAboveEllipsoid(double height)
+{
+  OssimDEMHandler::Instance()->SetDefaultHeightAboveEllipsoid(height);
+
+  m_DefaultHeightAboveEllipsoid = height;
 }
+
+} // namespace otb
diff --git a/Modules/Registration/Stereo/test/otbStereorectificationDisplacementFieldSource.cxx b/Modules/Registration/Stereo/test/otbStereorectificationDisplacementFieldSource.cxx
index 4234dbbd21..e6624576cf 100644
--- a/Modules/Registration/Stereo/test/otbStereorectificationDisplacementFieldSource.cxx
+++ b/Modules/Registration/Stereo/test/otbStereorectificationDisplacementFieldSource.cxx
@@ -56,7 +56,6 @@ int otbStereorectificationDisplacementFieldSource(int itkNotUsed(argc), char* ar
   dfSource->SetScale(scale);
 
   otb::DEMHandler::Instance()->SetDefaultHeightAboveEllipsoid(avgElev);
-  otb::OssimDEMHandler::Instance()->SetDefaultHeightAboveEllipsoid(avgElev);
 
   WriterType::Pointer writer1 = WriterType::New();
   writer1->SetInput(dfSource->GetLeftDisplacementFieldOutput());
diff --git a/Modules/Wrappers/ApplicationEngine/src/otbWrapperElevationParametersHandler.cxx b/Modules/Wrappers/ApplicationEngine/src/otbWrapperElevationParametersHandler.cxx
index 1e8f319c84..648de002fc 100644
--- a/Modules/Wrappers/ApplicationEngine/src/otbWrapperElevationParametersHandler.cxx
+++ b/Modules/Wrappers/ApplicationEngine/src/otbWrapperElevationParametersHandler.cxx
@@ -20,7 +20,6 @@
 
 #include "otbWrapperElevationParametersHandler.h"
 #include "otbDEMHandler.h"
-#include "otbOssimDEMHandler.h"
 
 
 namespace otb
@@ -102,7 +101,6 @@ void ElevationParametersHandler::SetupDEMHandlerFromElevationParameters(const Ap
 {
   // Set default elevation
   otb::DEMHandler::Instance()->SetDefaultHeightAboveEllipsoid(GetDefaultElevation(app, key));
-  otb::OssimDEMHandler::Instance()->SetDefaultHeightAboveEllipsoid(GetDefaultElevation(app, key));
 
 
   std::ostringstream oss;
@@ -116,7 +114,6 @@ void ElevationParametersHandler::SetupDEMHandlerFromElevationParameters(const Ap
     oss.str("");
     oss << "Elevation management: using geoid file (" << GetGeoidFile(app, key) << ")" << std::endl;
     otb::DEMHandler::Instance()->OpenGeoidFile(GetGeoidFile(app, key));
-    otb::OssimDEMHandler::Instance()->OpenGeoidFile(GetGeoidFile(app, key));
     
     app->GetLogger()->Info(oss.str());
   }
@@ -130,7 +127,6 @@ void ElevationParametersHandler::SetupDEMHandlerFromElevationParameters(const Ap
       oss.str("");
       oss << "Elevation management: using DEM directory (" << demDirectory << ")" << std::endl;
       otb::DEMHandler::Instance()->OpenDEMDirectory(demDirectory);
-      otb::OssimDEMHandler::Instance()->OpenDEMDirectory(demDirectory);
       app->GetLogger()->Info(oss.str());
     }
     else
-- 
GitLab