From adb3486fc1eb3014282870f5f325973a005e03d1 Mon Sep 17 00:00:00 2001 From: Christophe Palmann <christophe.palmann@c-s.fr> Date: Tue, 28 Apr 2015 16:58:06 +0200 Subject: [PATCH] ENH: added ossimRpcProjection type to otbSensorModelAdapter (and related test) --- .../src/otbSensorModelAdapter.cxx | 53 +++++++++++++++---- .../AppProjection/test/CMakeLists.txt | 15 +++++- 2 files changed, 56 insertions(+), 12 deletions(-) diff --git a/Modules/Adapters/OSSIMAdapters/src/otbSensorModelAdapter.cxx b/Modules/Adapters/OSSIMAdapters/src/otbSensorModelAdapter.cxx index 9d9994d5d1..ea77605747 100644 --- a/Modules/Adapters/OSSIMAdapters/src/otbSensorModelAdapter.cxx +++ b/Modules/Adapters/OSSIMAdapters/src/otbSensorModelAdapter.cxx @@ -26,6 +26,7 @@ #include "ossim/projection/ossimProjection.h" #include "ossim/projection/ossimSensorModelFactory.h" #include "ossim/projection/ossimSensorModel.h" +#include "ossim/projection/ossimRpcProjection.h" #include "ossim/ossimPluginProjectionFactory.h" #include "ossim/base/ossimTieGptSet.h" @@ -200,16 +201,30 @@ double SensorModelAdapter::Optimize() if(m_SensorModel != NULL) { // try to retrieve a sensor model + ossimSensorModel * sensorModel = NULL; - sensorModel = dynamic_cast<ossimSensorModel *>(m_SensorModel); + sensorModel = dynamic_cast<ossimSensorModel *>(m_SensorModel); + + ossimRpcProjection * simpleRpcModel = NULL; + simpleRpcModel = dynamic_cast<ossimRpcProjection *>(m_SensorModel); + + //Handle expections + if ( (sensorModel == NULL ) && (simpleRpcModel == NULL ) ) + itkExceptionMacro(<< "Optimize(): error, both dynamic_cast from ossimProjection* to ossimSensorModel* / ossimRpcProjection* failed."); + - if(sensorModel != NULL) + if(sensorModel != NULL ) { - // Call optimize fit - precision = sensorModel->optimizeFit(*m_TiePoints); + // Call optimize fit + precision = sensorModel->optimizeFit(*m_TiePoints); } - else - itkExceptionMacro(<< "Optimize(): error, dynamic_cast from ossimProjection* to ossimSensorModel* failed."); + else if (simpleRpcModel != NULL) + { + // Call optimize fit + precision = simpleRpcModel->optimizeFit(*m_TiePoints); + } + + } // Return the precision @@ -241,15 +256,31 @@ bool SensorModelAdapter::WriteGeomFile(const std::string & outfile) ossimSensorModel * sensorModel = NULL; sensorModel = dynamic_cast<ossimSensorModel *>(m_SensorModel); - if (sensorModel == NULL) - itkExceptionMacro(<< "WriteGeomFile(): error, dynamic_cast from ossimProjection* to ossimSensorModel* failed."); + ossimRpcProjection * simpleRpcModel = NULL; + simpleRpcModel = dynamic_cast<ossimRpcProjection *>(m_SensorModel); + + //Handle expections + if ( (sensorModel == NULL ) && (simpleRpcModel == NULL ) ) + itkExceptionMacro(<< "Optimize(): error, both dynamic_cast from ossimProjection* to ossimSensorModel* / ossimRpcProjection* failed."); - ossimKeywordlist geom; - bool success = sensorModel->saveState(geom); + ossimKeywordlist geom; + bool success = false; + if(sensorModel != NULL ) + { + // Save state + success = sensorModel->saveState(geom); + } + else if (simpleRpcModel != NULL) + { + // Save state + success = simpleRpcModel->saveState(geom); + } + + if(success) { - return geom.write(outfile.c_str()); + return geom.write(outfile.c_str()); } } return false; diff --git a/Modules/Applications/AppProjection/test/CMakeLists.txt b/Modules/Applications/AppProjection/test/CMakeLists.txt index 02be7f44ec..bb1c9d742c 100644 --- a/Modules/Applications/AppProjection/test/CMakeLists.txt +++ b/Modules/Applications/AppProjection/test/CMakeLists.txt @@ -253,7 +253,7 @@ otb_test_application(NAME apTvPrRefineSensorModel APP RefineSensorModel OPTIONS -ingeom ${INPUTDATA}/QB_TOULOUSE_MUL_Extract_500_500.geom -inpoints ${INPUTDATA}/QB_TOULOUSE_MUL_Extract_500_500_in_tie_points.txt - -outgeom ${TEMP}/apTvPrRefineSensorModelGeomOutput.geom + -outgeom ${TEMP}/apTvPrRefineSensorModelGeomOutput.geom -outstat ${TEMP}/apTvPrRefineSensorModelStatsOutput.txt -outvector ${TEMP}/apTvPrRefineSensorModelVectorOutput.shp -map utm -map.utm.zone 31 -map.utm.northhem 1 @@ -263,6 +263,17 @@ otb_test_application(NAME apTvPrRefineSensorModel ${BASELINE_FILES}/apTvPrRefineSensorModelGeomOutput.geom ${TEMP}/apTvPrRefineSensorModelGeomOutput.geom) + +otb_test_application(NAME apTvPrRefineSensorModel2 + APP RefineSensorModel + OPTIONS -ingeom ${INPUTDATA}/s1a-iw-grd-vh-20150210t060009-20150210t060034-004557-0059a3-002.geom + -inpoints ${INPUTDATA}/pts_idV5.txt + -outgeom ${TEMP}/apTvPrRefineSensorModelGeomOutput2.geom + VALID --compare-ascii 0.1 + ${BASELINE_FILES}/apTvPrRefineSensorModelGeomOutput2.geom + ${TEMP}/apTvPrRefineSensorModelGeomOutput2.geom) + + #----------- RigidTransformResample TESTS ---------------- otb_test_application(NAME apTvPrRigidTransformResample @@ -276,6 +287,8 @@ otb_test_application(NAME apTvPrRigidTransformResample VALID --compare-image ${NOTOL} ${BASELINE}/owTvRigidTransformResampleTest.tif ${TEMP}/apTvPrRigidTransformResampleTest.tif) + + #----------- ImageEnvelope TESTS ---------------- -- GitLab