From 08f347a1abb13d1f317c65f28c667709dc55b2bf Mon Sep 17 00:00:00 2001
From: Emmanuel Christophe <emmanuel.christophe@orfeo-toolbox.org>
Date: Sat, 26 Mar 2011 11:20:21 -0700
Subject: [PATCH] ENH: add more flexibility to the MapProjectionWrapper

---
 Code/IO/otbMapProjectionWrapper.cxx | 50 ++++++++++++++++++++---------
 1 file changed, 35 insertions(+), 15 deletions(-)

diff --git a/Code/IO/otbMapProjectionWrapper.cxx b/Code/IO/otbMapProjectionWrapper.cxx
index 876af94577..d2675c1605 100644
--- a/Code/IO/otbMapProjectionWrapper.cxx
+++ b/Code/IO/otbMapProjectionWrapper.cxx
@@ -102,25 +102,45 @@ bool MapProjectionWrapper::InstanciateProjection()
 
     bool projectionInformationAvailable = wktTranslator.toOssimKwl(m_ProjectionRefWkt, kwl);
 
-    if (!projectionInformationAvailable)
+    if (projectionInformationAvailable)
       {
-      otbMsgDevMacro(<< "WARNING: Impossible to create the projection from string: " << m_ProjectionRefWkt);
-      return false;
-      }
 
-    //we don't want to have a ossimEquDistCylProjection here:
-    //see discussion in May 2009 on ossim list;
-    //a better solution might be available...
-    std::string projectionString(kwl.find("type"));
-    if (projectionString.find("ossimEquDistCylProjection") != string::npos)
-      {
-      otbMsgDevMacro(<< "WARNING: Not instanciating a ossimEquDistCylProjection: " << projectionString);
-      otbMsgDevMacro(<< "Wkt was: " << kwl);
-      otbMsgDevMacro(<< "From RefWkt: " << m_ProjectionRefWkt);
-      return false;
+      //we don't want to have a ossimEquDistCylProjection here:
+      //see discussion in May 2009 on ossim list;
+      //a better solution might be available...
+      std::string projectionString(kwl.find("type"));
+      if (projectionString.find("ossimEquDistCylProjection") != string::npos)
+        {
+        otbMsgDevMacro(<< "WARNING: Not instanciating a ossimEquDistCylProjection: " << projectionString);
+        otbMsgDevMacro(<< "Wkt was: " << kwl);
+        otbMsgDevMacro(<< "From RefWkt: " << m_ProjectionRefWkt);
+        return false;
+        }
+
+      m_MapProjection = ossimMapProjectionFactory::instance()->createProjection(kwl);
+
       }
+    else
+      {
+      otbMsgDevMacro(<< "WARNING: Impossible to create the projection from Wkt: " << m_ProjectionRefWkt);
+      otbMsgDevMacro(<< "Trying with string as a string (ossimUtmProjection or Utm would qualify");
+      // Trying directly with the m_ProjectionRefWkt (is
+      // ossimUtmProjection for example)
+      ossimString name(m_ProjectionRefWkt);
+      m_MapProjection = ossimMapProjectionFactory::instance()->createProjection(name);
+      if (m_MapProjection == NULL)
+        {
+        // Trying directly extending the m_ProjectionRefWkt (convert the
+        // Utm to ossimUtmProjection for example)
+        ossimString extendedName("ossim");
+        extendedName += m_ProjectionRefWkt;
+        extendedName += "Projection";
+        m_MapProjection = ossimMapProjectionFactory::instance()->createProjection(extendedName);
+        }
+
+      if (m_MapProjection == NULL) return false;
 
-    m_MapProjection = ossimMapProjectionFactory::instance()->createProjection(kwl);
+      }
 
     this->reinstanciateProjection = false;
     return true;
-- 
GitLab