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