From 0c8eab2c3335a6f20d50df00ee75e78f5a1a4353 Mon Sep 17 00:00:00 2001
From: Julien Michel <julien.michel@cnes.fr>
Date: Tue, 3 Nov 2015 10:59:41 +0100
Subject: [PATCH] BUG: Properly handle Integer64 fields in OGRFieldWrapper and
 OGRLayerStreamStitchingFilter

---
 .../GdalAdapters/include/otbOGRFieldWrapper.txx     | 13 +++++++++++++
 .../include/otbOGRLayerStreamStitchingFilter.txx    |  4 ++++
 2 files changed, 17 insertions(+)

diff --git a/Modules/Adapters/GdalAdapters/include/otbOGRFieldWrapper.txx b/Modules/Adapters/GdalAdapters/include/otbOGRFieldWrapper.txx
index 673ae0f9b2..d8e013a45e 100644
--- a/Modules/Adapters/GdalAdapters/include/otbOGRFieldWrapper.txx
+++ b/Modules/Adapters/GdalAdapters/include/otbOGRFieldWrapper.txx
@@ -23,6 +23,7 @@
 /*===============================[ Includes ]================================*/
 /*===========================================================================*/
 #include "otbOGRFieldWrapper.h"
+#include "otbConfigure.h"
 #include <cassert>
 #include <vector>
 #include <boost/mpl/map.hpp>
@@ -84,6 +85,10 @@ typedef boost::mpl::map
   , pair<char*                   , int_<OFTString> >
   , pair<char const*             , int_<OFTString> >
   , pair<std::vector<std::string>, int_<OFTStringList> >
+  #ifdef OTB_USE_GDAL_20
+    , pair<GIntBig, int_<OFTInteger64> >
+    , pair<std::vector<GIntBig>, int_<OFTInteger64List> >
+  #endif
   // OFTBinary
   // OFTDate
   // OFTTime
@@ -312,6 +317,10 @@ typedef map
   , pair<int_<OFTRealList>,    MemberContainerGetterPtr<double, &OGRFeature::GetFieldAsDoubleList> >
   , pair<int_<OFTString>,      MemberGetterPtr<char const*,     &OGRFeature::GetFieldAsString, std::string> >
   , pair<int_<OFTStringList>,  StringListMemberGetterPtr<std::vector<std::string> > >
+  #ifdef OTB_USE_GDAL_20
+  , pair<int_<OFTInteger64>, MemberGetterPtr<GIntBig, &OGRFeature::GetFieldAsInteger64> >
+  , pair<int_<OFTInteger64List>, MemberContainerGetterPtr<GIntBig, &OGRFeature::GetFieldAsInteger64List> >
+  #endif
   > FieldGetters_Map;
 
 /**\ingroup GeometryInternals
@@ -327,6 +336,10 @@ typedef map
   , pair<int_<OFTRealList>,    MemberContainerSetterPtr<double, &OGRFeature::SetField> >
   , pair<int_<OFTString>,      MemberSetterPtr<char const*,     &OGRFeature::SetField/*, std::string*/> >
   , pair<int_<OFTStringList>,  StringListMemberSetterPtr<std::vector<std::string> > >
+  #ifdef OTB_USE_GDAL_20
+  , pair<int_<OFTInteger64>, MemberSetterPtr<GIntBig, &OGRFeature::SetField> >
+  , pair<int_<OFTInteger64List>, MemberContainerSetterPtr<const GIntBig, &OGRFeature::SetField> >
+  #endif
   > FieldSetters_Map;
 
 /**\ingroup GeometryInternals
diff --git a/Modules/Segmentation/OGRProcessing/include/otbOGRLayerStreamStitchingFilter.txx b/Modules/Segmentation/OGRProcessing/include/otbOGRLayerStreamStitchingFilter.txx
index b9ff295467..2e3e56f9e3 100644
--- a/Modules/Segmentation/OGRProcessing/include/otbOGRLayerStreamStitchingFilter.txx
+++ b/Modules/Segmentation/OGRProcessing/include/otbOGRLayerStreamStitchingFilter.txx
@@ -317,7 +317,11 @@ OGRLayerStreamStitchingFilter<TInputImage>
                ogr::Field field = upper.feat[0];
                try
                  {
+                 #ifdef OTB_USE_GDAL_20
+                 fusionFeature[0].SetValue(field.GetValue<GIntBig>());
+                 #else
                  fusionFeature[0].SetValue(field.GetValue<int>());
+                 #endif
                  m_OGRLayer.CreateFeature(fusionFeature);
                  m_OGRLayer.DeleteFeature(lower.feat.GetFID());
                  m_OGRLayer.DeleteFeature(upper.feat.GetFID());
-- 
GitLab