From 82a3b3be0519d75fd0da200ac5a10e2bce5961d1 Mon Sep 17 00:00:00 2001 From: Patrick Imbo <patrick.imbo@c-s.fr> Date: Thu, 8 Mar 2012 19:46:52 +0100 Subject: [PATCH] ENH: add GetPlatformPositionAtTime() method --- .../otbPlatformPositionAdapter.cxx | 8 ++++++++ .../otbPlatformPositionAdapter.h | 6 ++++++ .../ossim/otb/PlatformPosition.cpp | 20 ++++++++++++++++++- .../ossim/otb/PlatformPosition.h | 9 +++++++++ 4 files changed, 42 insertions(+), 1 deletion(-) diff --git a/Code/UtilitiesAdapters/OssimAdapters/otbPlatformPositionAdapter.cxx b/Code/UtilitiesAdapters/OssimAdapters/otbPlatformPositionAdapter.cxx index 734a92940d..0cd55e7845 100644 --- a/Code/UtilitiesAdapters/OssimAdapters/otbPlatformPositionAdapter.cxx +++ b/Code/UtilitiesAdapters/OssimAdapters/otbPlatformPositionAdapter.cxx @@ -22,9 +22,11 @@ #include "otbImageKeywordlist.h" #include "ossimGeometricSarSensorModel.h" +#include "otb/PlatformPosition.h" #include "projection/ossimProjection.h" #include "ossim/ossimPluginProjectionFactory.h" + namespace otb { PlatformPositionAdapter::PlatformPositionAdapter(): @@ -65,4 +67,10 @@ void PlatformPositionAdapter::GetPlatformPosition( m_SensorModel->getPlatformPositionAtLine(line, position, speed); } +void PlatformPositionAdapter::GetPlatformPositionAtTime( + ossimplugins::JSDDateTime time, std::vector<double>& position, std::vector<double>& speed) +{ + m_SensorModel->get_platformPosition()->getPlatformPositionAtTime(time, position, speed); +} + } // namespace otb diff --git a/Code/UtilitiesAdapters/OssimAdapters/otbPlatformPositionAdapter.h b/Code/UtilitiesAdapters/OssimAdapters/otbPlatformPositionAdapter.h index 337a997c2e..19a91f0dd8 100644 --- a/Code/UtilitiesAdapters/OssimAdapters/otbPlatformPositionAdapter.h +++ b/Code/UtilitiesAdapters/OssimAdapters/otbPlatformPositionAdapter.h @@ -26,6 +26,7 @@ namespace ossimplugins { class ossimGeometricSarSensorModel; +class JSDDateTime; } namespace otb @@ -60,9 +61,14 @@ public: void CreateSensorModel(const ImageKeywordlist& image_kwl); + /** Get the platform position and speed for a given line. */ void GetPlatformPosition( double line, std::vector<double>& position, std::vector<double>& speed); + /** Get the platform position at a given date and time. */ + void GetPlatformPositionAtTime( + ossimplugins::JSDDateTime time, std::vector<double>& position, std::vector<double>& speed); + protected: PlatformPositionAdapter(); virtual ~PlatformPositionAdapter(); diff --git a/Utilities/otbossimplugins/ossim/otb/PlatformPosition.cpp b/Utilities/otbossimplugins/ossim/otb/PlatformPosition.cpp index 74a55f5e59..abc273567a 100644 --- a/Utilities/otbossimplugins/ossim/otb/PlatformPosition.cpp +++ b/Utilities/otbossimplugins/ossim/otb/PlatformPosition.cpp @@ -13,7 +13,8 @@ #include <string> #include <cmath> #include <iomanip> - +#include <vector> + #include <otb/PlatformPosition.h> #include <otb/Ephemeris.h> #include <otb/HermiteInterpolator.h> @@ -170,6 +171,23 @@ Ephemeris* PlatformPosition::Interpolate(JSDDateTime date) const return ephem; } +bool PlatformPosition::getPlatformPositionAtTime(JSDDateTime time, std::vector<double>& position, std::vector<double>& speed) +{ + Ephemeris* ephemeris = this->Interpolate(time); + double* position_ptr = ephemeris->get_position(); + double* speed_ptr = ephemeris->get_speed(); + if (position.size() != 3) position.resize(3); + if (speed.size() != 3) speed.resize(3); + position[0] = position_ptr[0]; + position[1] = position_ptr[1]; + position[2] = position_ptr[2]; + speed[0] = speed_ptr[0]; + speed[1] = speed_ptr[1]; + speed[2] = speed_ptr[2]; + return true; +} + + void PlatformPosition::setData(Ephemeris** data, int nbrData) { Clear(); diff --git a/Utilities/otbossimplugins/ossim/otb/PlatformPosition.h b/Utilities/otbossimplugins/ossim/otb/PlatformPosition.h index ea6bf78c8d..dbec894a11 100644 --- a/Utilities/otbossimplugins/ossim/otb/PlatformPosition.h +++ b/Utilities/otbossimplugins/ossim/otb/PlatformPosition.h @@ -12,6 +12,7 @@ #ifndef PlatformPosition_h #define PlatformPosition_h +#include <vector> #include <ossimPluginConstants.h> #include <otb/JSDDateTime.h> @@ -67,6 +68,14 @@ public: */ Ephemeris* Interpolate(JSDDateTime date) const; + + /** + * @brief This function interpolates its ephemeris to create and extract platform's position and speed + * @param date Date and time at wich the interpolation have to be done + * @return true, or false if an error occurs + */ + bool getPlatformPositionAtTime(JSDDateTime time, std::vector<double>& position, std::vector<double>& speed); + PlatformPosition* Clone() const { return new PlatformPosition(*this); -- GitLab