/usr/include/OTB-5.8/otbGDALImageIO.h is in libotb-dev 5.8.0+dfsg-3.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 | /*=========================================================================
Program: ORFEO Toolbox
Language: C++
Date: $Date$
Version: $Revision$
Copyright (c) Centre National d'Etudes Spatiales. All rights reserved.
See OTBCopyright.txt for details.
This software is distributed WITHOUT ANY WARRANTY; without even
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE. See the above copyright notices for more information.
=========================================================================*/
#ifndef otbGDALImageIO_h
#define otbGDALImageIO_h
/* C++ Libraries */
#include <string>
/* ITK Libraries */
#include "otbImageIOBase.h"
#include "OTBIOGDALExport.h"
namespace otb
{
class GDALDatasetWrapper;
class GDALDataTypeWrapper;
/** \class GDALImageIO
*
* \brief ImageIO object for reading and writing images with GDAL
*
* This ImageIO uses GDAL interface to read/write images. The
* origin and spacing are translated from/to GDAL geotransform
* matrix (even in the case of a sensor image). It means that
* extracts from sensor images are well supported. Typical
* sensor images in OTB have a spacing of [1,1] and an origin
* at [0.5,0.5] (when there is no GDAL geotransform, GDAL
* physical space is identical to GDAL index space).
*
* Note that the geotransform matrix supports any rotated physical
* space whereas OTB doesn't.
*
* \em Warning : the index coordinate system used in GDAL is attached
* to the corner of the top left pixel, whereas in OTB, the index
* coordinate system is attached to the centre of the top-left
* pixel. It means that the origin coefficients read from the
* GDAL geotransform are the location of the top-left pixel
* corner. This is why this location has to be shifted by
* half a pixel to be used as an OTB origin. In a nutshell,
* OTB images read/written by this ImageIO have the \em same
* physical space as GDAL physical space : a given point of
* image has the same physical location in OTB and in GDAL.
*
* The streaming read is implemented.
*
* \ingroup IOFilters
*
*
* \ingroup OTBIOGDAL
*/
class OTBIOGDAL_EXPORT GDALImageIO : public otb::ImageIOBase
{
public:
typedef unsigned char InputPixelType;
/** Standard class typedefs. */
typedef GDALImageIO Self;
typedef otb::ImageIOBase Superclass;
typedef itk::SmartPointer<Self> Pointer;
typedef std::vector<std::string> GDALCreationOptionsType;
/** Method for creation through the object factory. */
itkNewMacro(Self);
/** Run-time type information (and related methods). */
itkTypeMacro(GDALImageIO, otb::ImageIOBase);
/** Set/Get the level of compression for the output images.
* 0-9; 0 = none, 9 = maximum. */
itkSetMacro(CompressionLevel, int);
itkGetMacro(CompressionLevel, int);
/** Set/Get whether the pixel type (otb side) is complex */
itkSetMacro(IsComplex, bool);
itkGetMacro(IsComplex, bool);
/** Set/Get whether the pixel type (otb side) is Vector or Scalar */
itkSetMacro(IsVectorImage, bool);
itkGetMacro(IsVectorImage, bool);
/** Set/get whether the driver will write RPC tags to TIFF */
itkSetMacro(WriteRPCTags,bool);
itkGetMacro(WriteRPCTags,bool);
/** Set/Get the options */
void SetOptions(const GDALCreationOptionsType& opts)
{
m_CreationOptions = opts;
}
GDALCreationOptionsType GetOptions(void)
{
return m_CreationOptions;
}
/** Provide hist about the output container to deal with complex pixel
* type */
void SetOutputImagePixelType( bool isComplexInternalPixelType,
bool isVectorImage) ITK_OVERRIDE
{
this->SetIsComplex(isComplexInternalPixelType);
this->SetIsVectorImage(isVectorImage);
}
/*-------- This part of the interface deals with reading data. ------ */
/** Determine the file type. Returns true if this ImageIO can read the
* file specified. */
bool CanReadFile(const char*) ITK_OVERRIDE;
/** Determine the file type. Returns true if the ImageIO can stream read the specified file */
bool CanStreamRead() ITK_OVERRIDE
{
return true;
}
/** Set the spacing and dimension information for the set filename. */
void ReadImageInformation() ITK_OVERRIDE;
/** Reads the data from disk into the memory buffer provided. */
void Read(void* buffer) ITK_OVERRIDE;
/** Reads 3D data from multiple files assuming one slice per file. */
virtual void ReadVolume(void* buffer);
/** Get Info about all subDataset in hdf file */
bool GetSubDatasetInfo(std::vector<std::string>& names, std::vector<std::string>& desc);
/** Get if the pixel type in the file is complex or not (GDAL side)*/
bool GDALPixelTypeIsComplex();
/*-------- This part of the interfaces deals with writing data. ----- */
/** Determine the file type. Returns true if this ImageIO can read the
* file specified. */
bool CanWriteFile(const char*) ITK_OVERRIDE;
/** Determine the file type. Returns true if the ImageIO can stream write the specified file */
bool CanStreamWrite() ITK_OVERRIDE;
/** Writes the spacing and dimensions of the image.
* Assumes SetFileName has been called with a valid file name. */
void WriteImageInformation() ITK_OVERRIDE;
/** Writes the data to disk from the memory buffer provided. Make sure
* that the IORegion has been set properly. */
void Write(const void* buffer) ITK_OVERRIDE;
/** Get all resolutions possible from the file dimensions */
bool GetAvailableResolutions(std::vector<unsigned int>& res);
/** Get Info about all resolution possible from the file dimensions */
bool GetResolutionInfo(std::vector<unsigned int>& res, std::vector<std::string>& desc);
/** Get number of available overviews in the file
* Return 0 if no overviews available
* Currently this overview count is only based on the first band
* If no pre-computed overviews are available we provide the overview
* count based on size division by 2*/
unsigned int GetOverviewsCount() ITK_OVERRIDE;
/** Get description about overviews available into the file specified */
std::vector<std::string> GetOverviewsInfo() ITK_OVERRIDE;
/** Returns gdal pixel type as string */
std::string GetGdalPixelTypeAsString() const;
protected:
/**
* Constructor.
* Spacing is set to [1,1] and origin to [0.5,0.5] as it would correspond
* to an image without geotransform
*/
GDALImageIO();
/** Destructor.*/
~GDALImageIO() ITK_OVERRIDE;
void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
/** Read all information on the image*/
void InternalReadImageInformation();
/** Write all information on the image*/
void InternalWriteImageInformation(const void* buffer);
/** Number of bands of the image*/
int m_NbBands;
/** Buffer*/
//float **pafimas;
/** Determines the level of compression for written files.
* Range 0-9; 0 = none, 9 = maximum , default = 4 */
int m_CompressionLevel;
bool m_IsIndexed;
/** Dataset index to extract (starting at 0)*/
unsigned int m_DatasetNumber;
private:
GDALImageIO(const Self &); //purposely not implemented
void operator =(const Self&); //purposely not implemented
/** Determine real file name to write the image */
std::string GetGdalWriteImageFileName(const std::string& gdalDriverShortName, const std::string& filename) const;
std::string FilenameToGdalDriverShortName(const std::string& name) const;
/** Parse a GML box from a Jpeg2000 file and get the origin */
bool GetOriginFromGMLBox(std::vector<double> &origin);
/** Test whether m_CreationOptions has an option
* \param partialOption The beginning of a creation option (for example "QUALITY=")
*/
bool CreationOptionContains(std::string partialOption) const;
/** GDAL parameters. */
typedef itk::SmartPointer<GDALDatasetWrapper> GDALDatasetWrapperPointer;
GDALDatasetWrapperPointer m_Dataset;
GDALDataTypeWrapper* m_PxType;
/** Nombre d'octets par pixel */
int m_BytePerPixel;
bool GDALInfoReportCorner(const char * corner_name, double x, double y,
double& dfGeoX, double& dfGeoY) const;
bool m_FlagWriteImageInformation;
bool m_CanStreamWrite;
/** Whether the pixel type (otb side, not gdal side) is complex
* this information has to be provided by the reader */
bool m_IsComplex;
/** Whether the pixel type (otb side, not gdal side) is Vector
* this information has to be provided by the reader */
bool m_IsVectorImage;
/**
* Creation Options */
GDALCreationOptionsType m_CreationOptions;
/**
* Number of Overviews in the file */
unsigned int m_NumberOfOverviews;
/**
* Size of the different overviews of the file */
std::vector<std::pair<unsigned int, unsigned int> > m_OverviewsSize;
/** Resolution factor
*/
unsigned int m_ResolutionFactor;
/**
* Original dimension of the input image
*/
std::vector<unsigned int> m_OriginalDimensions;
/**
* True if RPC tags should be exported
*/
bool m_WriteRPCTags;
};
} // end namespace otb
#endif // otbGDALImageIO_h
|