otbOGRVersionProxy.h 5.8 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
/*
 * Copyright (C) 2005-2017 Centre National d'Etudes Spatiales (CNES)
 *
 * This file is part of Orfeo Toolbox
 *
 *     https://www.orfeo-toolbox.org/
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
20

21 22
#ifndef otbOGRVersionProxy_h
#define otbOGRVersionProxy_h
23 24

#include <string>
25
#include <vector>
26
#include "otbConfigure.h"
27
#include "itkMacro.h"
28

29 30 31 32 33 34 35 36 37
#if defined(_MSC_VER)
#pragma warning ( push )
#pragma warning ( disable: 4251 )
#include "ogr_core.h" // OGR enums
#pragma warning ( pop )
#else
#include "ogr_core.h" // OGR enums
#endif

38 39
class GDALDataset;
class GDALDriver;
40 41
class OGRFeature;

42 43
#include "OTBGdalAdaptersExport.h"

44 45
namespace otb
{
46 47 48 49 50
namespace ogr
{
namespace version_proxy
{

51
/** 
52
 * This namespace holds proxy functions hiding interface changes in gdal 2.0 
53
 *
54
 * This namespace holds proxy functions hiding interface changes in OGR
55 56
 * dataset between gdal 1.x (x>10) and gdal 2.x. It defines a common
 * interface that should be used in place of calling directly the
57
 * wrapped gdal functions.
58 59 60
 * 
 * Whenever GDALDataset and GDALDriver have to be used to open a
 * vector dataset (or OGRDataSource an OGRSFDriver for gdal 1.x), one
61
 * should use ogr::version_proxy types GDALDatasetType and
62 63
 * GDALDriverType.
 * 
64
 * See function documentation for details.
65 66
 */

67 68
  typedef GDALDataset GDALDatasetType;
  typedef GDALDriver GDALDriverType;
69 70

  /** 
71
   * This function opens a file, possibly in read-only mode, and returns
72 73 74 75 76 77 78 79
   * a dataset.
   *
   * Calls OGRSFDriverRegistrar::Open for gdal 1.x implementation and GDALopenEx for
   * gdal 2.x implementation.

   * \param filename Filename of the file to open
   * \param readOnly: If true, dataset is open in read-only mode.
   * \return NULL if file could not be open.
80 81
   */
  OTBGdalAdapters_EXPORT   
82
  GDALDatasetType * Open(const char * filename, bool readOnly = true , std::vector< std::string > const & options = std::vector< std::string >() );
83 84

  /**
85
   * This function closes a dataset.
86 87 88 89 90 91 92
   *
   * Calls OGRDataSource::DestroyDataSource for gdal 1.x
   * implementation and GDALClose for gdal 2.x implementation.
   *
   * \param dataset Pointer to the dataset to close. Will not be
   * checked for null pointer.
   */
93
  OTBGdalAdapters_EXPORT
94
  void Close(GDALDatasetType * dataset);
95 96

  /**
97
   * This function creates a new dataset.
98 99 100 101 102 103 104 105 106 107 108 109
   *
   * Calls OGRSFDriver::CreateDataSource for gdal 1.x implementation
   * and GDALDriver::Create with (0,0) raster size for gdal 2.x
   * implementation
   * 
   * \param driver Pointer to the driver used for creation. Will not
   * be checked for null pointer.
   *
   * \param name Name of the dataset to create.
   * 
   * \return NULL if dataset could not be created.
   */
110
  OTBGdalAdapters_EXPORT
111
  GDALDatasetType * Create(GDALDriverType * driver, const char * name , std::vector< std::string > const & options = std::vector< std::string >() );
112

113 114

  /**
115
   * This function physically deletes an existing dataset.
116 117 118 119 120
   * 
   * Calls OGRDataSource::DeleteDataSource for gdal 1.x implementation
   * and GDALDriver::Delete for gdal 2.x implementation.
   *
   * \param name Name of the dataset to destroy.
121 122
   */
  OTBGdalAdapters_EXPORT   
123
  bool Delete(const char * name);
124

125
  /**
126
   * This function returns a pointer to the driver from its name.
127 128 129 130 131 132 133 134 135 136
   * 
   * Calls OGRSFDriverRegistrar::GetRegistrar()->GetDriverByName() for
   * gdal 1.x implementation and
   * GetGDALDriverManager()->GetDriverByName() for gdal 2.x
   * implementation.
   * 
   * \param name Name of the driver to retrieve
   * 
   * \return NULL if no driver could be retrieved.
   */
137
  OTBGdalAdapters_EXPORT 
138
  GDALDriverType *  GetDriverByName(const char * name);
139

140
  OTBGdalAdapters_EXPORT
141 142
  std::string GetDriverNameFromDataSource(const GDALDatasetType * ds);

143 144 145 146 147 148 149 150 151 152 153
  /**
   * Sync dataset to disk.
   *
   * Calls OGRDataSource::SyncToDisk() for gdal 1.x implementation and
   * GDALDataset::FlushCache() for gdal 2.x  implementation.
   *
   * \param dataset Pointer to the dataset to sync. Will not be
   * checked for null pointer.
   *
   * \return True if sync went on without any error.
   */
154 155
   OTBGdalAdapters_EXPORT
   bool SyncToDisk(GDALDatasetType * dataset);
156

157 158 159 160 161 162 163 164 165 166 167 168
  /**
   * Return the list of files composing the dataset.
   * 
   * Calls OGRDataSource::GetName() and wrap in string vector for gdal
   * 1.x implementation, and GDALDataset::GetFileList and wrap in
   * string vector for gdal 2.x implementation.
   *  
   * \param dataset Pointer to the dataset to get the file list from. Will not be
   * checked for null pointer.
   * 
   * \return A vector of string containing the list of files.
   */
169 170
   
  OTBGdalAdapters_EXPORT 
171
  std::vector<std::string> GetFileListAsStringVector(GDALDatasetType * dataset);
172 173 174 175 176 177 178 179 180 181

  /** 
   * Return the list of available drivers.
   *
   * Calls OGRSFDriverRegistrar::GetRegistrar() for gdal 1.x
   * implementation and GetGDALDriverManager() for gdal 2.x
   * implementation.
   *
   * \return A vector of string containing the list of available drivers.
   */  
182
  OTBGdalAdapters_EXPORT
183
  std::vector<std::string> GetAvailableDriversAsStringVector();
184

185 186 187 188 189 190 191 192 193
  /**
   * Returns true if the field 'index' is set and not-null in the given feature
   *
   * Before gdal 2.2, it calls OGRFeature::IsFieldSet().
   * After gdal 2.2, it calls OGRFeature::IsFieldSetAndNotNull()
   */
   OTBGdalAdapters_EXPORT
   bool IsFieldSetAndNotNull(OGRFeature *feat, int index);

194 195
}
}
196 197 198
} // end namespace otb

#endif