From 4408f639d5d33190982afd147d7012dcecbecdf3 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ga=C3=ABlle=20USSEGLIO?= <gaelle.usseglio@cnes.fr>
Date: Mon, 5 Feb 2018 16:03:26 +0000
Subject: [PATCH] ENH : Return velocity vector in WorldToSatPositionAndVelocity
 of ossimSensorAdapter and add test

---
 .../OSSIMAdapters/include/otbSarSensorModelAdapter.h      | 5 +++--
 .../OSSIMAdapters/src/otbSarSensorModelAdapter.cxx        | 8 +++++++-
 .../OSSIMAdapters/test/otbSarSensorModelAdapterTest.cxx   | 6 +++++-
 3 files changed, 15 insertions(+), 4 deletions(-)

diff --git a/Modules/Adapters/OSSIMAdapters/include/otbSarSensorModelAdapter.h b/Modules/Adapters/OSSIMAdapters/include/otbSarSensorModelAdapter.h
index abaabd28f7..312caa5f3a 100644
--- a/Modules/Adapters/OSSIMAdapters/include/otbSarSensorModelAdapter.h
+++ b/Modules/Adapters/OSSIMAdapters/include/otbSarSensorModelAdapter.h
@@ -95,8 +95,9 @@ public:
   /** Transform world point (lat,lon,hgt) to cartesian point (x,y,z) */
   bool WorldToCartesian(const Point3DType & inGeoPoint, Point3DType & outCartesianPoint) const;
 
-/** Transform world point (lat,lon,hgt) to satellite position (x,y,z)*/
-  bool WorldToSatPosition(const Point3DType & inGeoPoint, Point3DType & satelitePosition) const;
+/** Transform world point (lat,lon,hgt) to satellite position (x,y,z) and satellite velocity */
+  bool WorldToSatPositionAndVelocity(const Point3DType & inGeoPoint, Point3DType & satelitePosition,  
+				     Point3DType & sateliteVelocity) const;
 
   static bool ImageLineToDeburstLine(const std::vector<std::pair<unsigned long,unsigned long> >& lines, unsigned long imageLine, unsigned long & deburstLine);
 
diff --git a/Modules/Adapters/OSSIMAdapters/src/otbSarSensorModelAdapter.cxx b/Modules/Adapters/OSSIMAdapters/src/otbSarSensorModelAdapter.cxx
index 324a185565..e3b594a8fb 100644
--- a/Modules/Adapters/OSSIMAdapters/src/otbSarSensorModelAdapter.cxx
+++ b/Modules/Adapters/OSSIMAdapters/src/otbSarSensorModelAdapter.cxx
@@ -189,7 +189,9 @@ bool SarSensorModelAdapter::WorldToCartesian(const Point3DType & inGeoPoint, Poi
 
 }
 
-bool SarSensorModelAdapter::WorldToSatPosition(const Point3DType & inGeoPoint, Point3DType & satelitePosition) const
+  bool SarSensorModelAdapter::WorldToSatPositionAndVelocity(const Point3DType & inGeoPoint, 
+							    Point3DType & satelitePosition, 
+							    Point3DType & sateliteVelocity) const
 {
   if(m_SensorModel.get() == ITK_NULLPTR)
     {
@@ -216,6 +218,10 @@ bool SarSensorModelAdapter::WorldToSatPosition(const Point3DType & inGeoPoint, P
   satelitePosition[1] = sensorPos.y();
   satelitePosition[2] = sensorPos.z();
 
+  sateliteVelocity[0] = sensorVel.x();
+  sateliteVelocity[1] = sensorVel.y();
+  sateliteVelocity[2] = sensorVel.z();    
+
   return true;
 }
 
diff --git a/Modules/Adapters/OSSIMAdapters/test/otbSarSensorModelAdapterTest.cxx b/Modules/Adapters/OSSIMAdapters/test/otbSarSensorModelAdapterTest.cxx
index 828ed4f747..d48f100661 100644
--- a/Modules/Adapters/OSSIMAdapters/test/otbSarSensorModelAdapterTest.cxx
+++ b/Modules/Adapters/OSSIMAdapters/test/otbSarSensorModelAdapterTest.cxx
@@ -62,7 +62,7 @@ int otbSarSensorModelAdapterTest(int itkNotUsed(argc), char* argv[])
   
 
   otb::SarSensorModelAdapter::Point2DType out1,out2;
-  otb::SarSensorModelAdapter::Point3DType in;
+  otb::SarSensorModelAdapter::Point3DType in, out3, out4, out5;
 
   // GCP 99 from input geom file
   //support_data.geom.gcp[99].world_pt.hgt:  2.238244926818182e+02
@@ -75,6 +75,10 @@ int otbSarSensorModelAdapterTest(int itkNotUsed(argc), char* argv[])
 
   sensorModel->WorldToLineSample(in,out1);
   sensorModel->WorldToLineSampleYZ(in,out1,out2);
+
+  sensorModel->WorldToCartesian(in, out5);
+  sensorModel->WorldToSatPositionAndVelocity(in,out3, out4);
+  
   
   return EXIT_SUCCESS;
 }
-- 
GitLab