diff --git a/Modules/Adapters/GdalAdapters/include/otbOGRExtendedFilenameToOptions.h b/Modules/Adapters/GdalAdapters/include/otbOGRExtendedFilenameToOptions.h index d0a1ba667e77012701d71ac75b733c64ed86f802..243b1d0f050771ce84749343b5857c524cf51ef4 100644 --- a/Modules/Adapters/GdalAdapters/include/otbOGRExtendedFilenameToOptions.h +++ b/Modules/Adapters/GdalAdapters/include/otbOGRExtendedFilenameToOptions.h @@ -79,10 +79,11 @@ public: void SetGDALLayerOptions( const GDALOptionType & options ); void AddGDALLayerOptions( const GDALOptionType & options ); - + static Pointer GetGDALLayerOptionsHelper( const GDALOptionType & options ); protected: OGRExtendedFilenameToOptions(); + OGRExtendedFilenameToOptions( const GDALOptionType & options ); ~OGRExtendedFilenameToOptions() override {}; private: diff --git a/Modules/Adapters/GdalAdapters/src/otbOGRDataSourceWrapper.cxx b/Modules/Adapters/GdalAdapters/src/otbOGRDataSourceWrapper.cxx index 4ea0057464dc0d4e0ef9a9ff3d4278edf000f963..b48d6911789bf0aef9df414e46c9edda7d9dd058 100644 --- a/Modules/Adapters/GdalAdapters/src/otbOGRDataSourceWrapper.cxx +++ b/Modules/Adapters/GdalAdapters/src/otbOGRDataSourceWrapper.cxx @@ -284,6 +284,12 @@ otb::ogr::Layer otb::ogr::DataSource::CreateLayer( // Other mode : Check if the layer already exists. otb::ogr::Layer layer = GetLayer(name); // won't throw on failure + FileNameHelperType::Pointer layerOptionHelper = + FileNameHelperType::GetGDALLayerOptionsHelper( m_LayerOptions ); + layerOptionHelper->AddGDALLayerOptions( papszOptions ); + std::vector<std::string> layerOptions = + layerOptionHelper->GetGDALLayerOptions(); + switch (m_OpenMode) { case Modes::Update_LayerOverwrite: @@ -296,7 +302,11 @@ otb::ogr::Layer otb::ogr::DataSource::CreateLayer( // Then create it OGRLayer * ol = m_DataSource->CreateLayer( - name.c_str(), poSpatialRef, eGType, otb::ogr::StringListConverter(papszOptions).to_ogr()); + name.c_str() , + poSpatialRef , + eGType , + otb::ogr::StringListConverter( layerOptions ).to_ogr() ); + if (!ol) { itkGenericExceptionMacro(<< "Failed to create the layer <"<<name @@ -319,7 +329,11 @@ otb::ogr::Layer otb::ogr::DataSource::CreateLayer( { // Then create it OGRLayer * ol = m_DataSource->CreateLayer( - name.c_str(), poSpatialRef, eGType, otb::ogr::StringListConverter(papszOptions).to_ogr()); + name.c_str() , + poSpatialRef , + eGType , + otb::ogr::StringListConverter( layerOptions ).to_ogr() ); + if (!ol) { itkGenericExceptionMacro(<< "Failed to create the layer <"<<name @@ -343,7 +357,11 @@ otb::ogr::Layer otb::ogr::DataSource::CreateLayer( // Case where the layer does not exists OGRLayer * ol = m_DataSource->CreateLayer( - name.c_str(), poSpatialRef, eGType, otb::ogr::StringListConverter(papszOptions).to_ogr()); + name.c_str() , + poSpatialRef , + eGType , + otb::ogr::StringListConverter( layerOptions ).to_ogr() ); + if (!ol) { itkGenericExceptionMacro(<< "Failed to create the layer <"<<name @@ -384,9 +402,18 @@ otb::ogr::Layer otb::ogr::DataSource::CopyLayer( default: break; } + + FileNameHelperType::Pointer layerOptionHelper = + FileNameHelperType::GetGDALLayerOptionsHelper( m_LayerOptions ); + layerOptionHelper->AddGDALLayerOptions( papszOptions ); + std::vector<std::string> layerOptions = + layerOptionHelper->GetGDALLayerOptions(); OGRLayer * l0 = &srcLayer.ogr(); - OGRLayer * ol = m_DataSource->CopyLayer(l0, newName.c_str(), otb::ogr::StringListConverter(papszOptions).to_ogr()); + OGRLayer * ol = m_DataSource->CopyLayer( + l0 , + newName.c_str() , + otb::ogr::StringListConverter( layerOptions ).to_ogr() ); if (!ol) { itkGenericExceptionMacro(<< "Failed to copy the layer <" diff --git a/Modules/Adapters/GdalAdapters/src/otbOGRExtendedFilenameToOptions.cxx b/Modules/Adapters/GdalAdapters/src/otbOGRExtendedFilenameToOptions.cxx index 59defd8f47054ab591348f29af36aafb3d3b6353..69892352cda38ca197fe6b21f2cc691ad46a215d 100644 --- a/Modules/Adapters/GdalAdapters/src/otbOGRExtendedFilenameToOptions.cxx +++ b/Modules/Adapters/GdalAdapters/src/otbOGRExtendedFilenameToOptions.cxx @@ -36,6 +36,23 @@ OGRExtendedFilenameToOptions() } +OGRExtendedFilenameToOptions:: +OGRExtendedFilenameToOptions( const GDALOptionType & options ): +m_LayerOptions() +{ + this->SetGDALLayerOptions( options ); +} + +OGRExtendedFilenameToOptions::Pointer +OGRExtendedFilenameToOptions:: +GetGDALLayerOptionsHelper( const GDALOptionType & options ) +{ + Pointer res = new OGRExtendedFilenameToOptions( options ); + res->UnRegister(); + return res; +} + + void OGRExtendedFilenameToOptions:: SetExtendedFileName(const char *extFname)