From 7da52347822af6bb10f377bb6cf52f6e65b989bb Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ga=C3=ABlle=20USSEGLIO?= <gaelle.usseglio@cnes.fr>
Date: Fri, 2 Feb 2018 14:58:20 +0000
Subject: [PATCH] ENH : Update of SarSensorModelAdapter with 2 two new
 functions

---
 .../include/otbSarSensorModelAdapter.h        |  8 ++-
 .../src/otbSarSensorModelAdapter.cxx          | 56 +++++++++++++++++++
 2 files changed, 63 insertions(+), 1 deletion(-)

diff --git a/Modules/Adapters/OSSIMAdapters/include/otbSarSensorModelAdapter.h b/Modules/Adapters/OSSIMAdapters/include/otbSarSensorModelAdapter.h
index 17705f7f41..abaabd28f7 100644
--- a/Modules/Adapters/OSSIMAdapters/include/otbSarSensorModelAdapter.h
+++ b/Modules/Adapters/OSSIMAdapters/include/otbSarSensorModelAdapter.h
@@ -91,7 +91,13 @@ public:
   /** Transform world point (lat,lon,hgt) to input image point
   (col,row) */
   bool WorldToLineSample(const Point3DType & inGEoPOint, Point2DType & cr) const;
-  
+
+  /** 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;
+
   static bool ImageLineToDeburstLine(const std::vector<std::pair<unsigned long,unsigned long> >& lines, unsigned long imageLine, unsigned long & deburstLine);
 
   static void DeburstLineToImageLine(const std::vector<std::pair<unsigned long,unsigned long> >& lines, unsigned long deburstLine, unsigned long & imageLine);
diff --git a/Modules/Adapters/OSSIMAdapters/src/otbSarSensorModelAdapter.cxx b/Modules/Adapters/OSSIMAdapters/src/otbSarSensorModelAdapter.cxx
index 83360cefad..324a185565 100644
--- a/Modules/Adapters/OSSIMAdapters/src/otbSarSensorModelAdapter.cxx
+++ b/Modules/Adapters/OSSIMAdapters/src/otbSarSensorModelAdapter.cxx
@@ -162,6 +162,62 @@ bool SarSensorModelAdapter::WorldToLineSample(const Point3DType & inGeoPoint, Po
   return true;
 }
 
+bool SarSensorModelAdapter::WorldToCartesian(const Point3DType & inGeoPoint, Point3DType & outCartesianPoint) const
+{
+  if(m_SensorModel.get() == ITK_NULLPTR)
+    {
+      return false;
+    }
+
+  ossimGpt inGpt;
+  inGpt.lat = inGeoPoint[0];
+  inGpt.lon = inGeoPoint[1];
+  inGpt.hgt = inGeoPoint[2];
+
+
+  ossimEcefPoint outCartesien(inGpt);
+
+  
+  if(outCartesien.isNan())
+    return false;
+
+  outCartesianPoint[0] = outCartesien.x();
+  outCartesianPoint[1] = outCartesien.y();
+  outCartesianPoint[2] = outCartesien.z();
+
+  return true;
+
+}
+
+bool SarSensorModelAdapter::WorldToSatPosition(const Point3DType & inGeoPoint, Point3DType & satelitePosition) const
+{
+  if(m_SensorModel.get() == ITK_NULLPTR)
+    {
+      return false;
+    }
+
+  ossimGpt inGpt;
+  inGpt.lat = inGeoPoint[0];
+  inGpt.lon = inGeoPoint[1];
+  inGpt.hgt = inGeoPoint[2];
+
+  
+  ossimplugins::ossimSarSensorModel::TimeType azimuthTime;
+  double rangeTime;
+  ossimEcefPoint sensorPos;
+  ossimEcefVector sensorVel;
+
+  const bool success = m_SensorModel->worldToAzimuthRangeTime(inGpt, azimuthTime, rangeTime,sensorPos,sensorVel);
+  
+  if(sensorPos.isNan())
+    return false;
+
+  satelitePosition[0] = sensorPos.x();
+  satelitePosition[1] = sensorPos.y();
+  satelitePosition[2] = sensorPos.z();
+
+  return true;
+}
 
 
 } // namespace otb
-- 
GitLab