00001
00041 #ifndef INC_MIE_GDAL_H
00042 #define INC_MIE_GDAL_H
00043
00044 #ifndef INC_MIE_FORMAT_H
00045 #include <mie/format.h>
00046 #endif
00047
00048 #include <mie/settings.h>
00049 #include <mie/uibase.h>
00050 #include <mie/raster.h>
00051
00052 #include <contrib/gdal/gdal.h>
00053 #include <contrib/gdal/gdal_priv.h>
00054
00055
00056 namespace MIE {
00057
00059 class GDALDATASET {
00060 public:
00061 GDALDATASET (
00062 const FILEPATH &source,
00063 GDALAccess access
00064 ) {
00065 char *fname = source.GenerateEncodedOSPath();
00066 m_Dataset = (GDALDataset *)GDALOpen(fname, access);
00067 MmFree(fname);
00068 }
00069
00070 GDALDATASET (
00071 GDALDataset* Dataset
00072 ) { m_Dataset = Dataset; }
00073
00074 ~GDALDATASET ( ) {
00075 if (m_Dataset != NULL) {
00076 GDALClose (m_Dataset);
00077 }
00078 }
00079
00080 bool IsOpen () {
00081 if (m_Dataset == NULL) return false;
00082 return true;
00083 }
00084
00085 GDALDataset *operator->() const {
00086 return m_Dataset;
00087 }
00088
00089 private:
00090 #ifndef GENERATING_DOXYGEN_OUTPUT
00091 GDALDataset *m_Dataset;
00092 #endif
00093 };
00094
00102 class FORMAT_GDAL : public FORMAT {
00103 public:
00104 virtual ~FORMAT_GDAL () { }
00105
00106 protected:
00107 FORMAT_GDAL (FORMATTYPE FormatType, MODE Modes, const char *FormatName);
00108
00111 RVC::IMAGE::CELLTYPE GetColorCompCellType (
00112 GDALDATASET& dataset
00113 ) const;
00114
00116 RVC::IMAGE::CELLTYPE GetCellType (
00117 GDALDataType datatype
00118 ) const;
00119
00121 GDALDataType GetDataType (
00122 RVC::IMAGE::CELLTYPE celltype
00123 ) const;
00124
00125 private:
00126 #ifndef GENERATING_DOXYGEN_OUTPUT
00127 static bool s_IsInitialized;
00128
00129 ERRVALUE ExportAffineTrans (
00130 GDALDATASET& dest,
00131 const MAT3X3& fwdTrans
00132 ) const;
00133
00134 ERRVALUE ExportGeoref (
00135 GDALDATASET& dest,
00136 const RVC::GEOREFERENCE& georef
00137 ) const;
00138
00139 #endif
00140
00141 virtual JOB_IMPORT* v_AllocJobImport (
00142 OBJTYPEFLAG ObjectType,
00143 const SETTINGS &settings
00144 ) const;
00145
00146 virtual JOB_EXPORT* v_AllocJobExport (
00147 const SETTINGS &settings
00148 ) const;
00149
00150 virtual SETTINGS* v_AllocSettings (
00151 MODE mode,
00152 OBJTYPEFLAG ObjType = OBJTYPEFLAG_ALL
00153 ) const;
00154
00155 virtual ERRVALUE v_AnalyzeFile (
00156 const FILEPATH &source,
00157 SETTINGS *settings
00158 ) const;
00159
00161 virtual bool v_CanExport (
00162 RVC::OBJTYPE objtype
00163 ) const;
00164
00165 bool v_CanExportToSingleFile (const RVC::OBJITEMLIST& objitems) const;
00166
00168 virtual bool v_CanImport (
00169 RVC::OBJTYPE objtype
00170 ) const;
00171
00173 ERRVALUE v_Export (
00174 const MISTRING& dest,
00175 const SETTINGS& settings,
00176 const SIMPLE_ARRAY<JOB_EXPORT*>& jobs
00177 ) const;
00178
00180 virtual const char* v_GetDriverName () const = 0;
00181
00183 virtual int v_GetObjItemList (
00184 const MISTRING &source,
00185 RVC::OBJITEMLIST &items,
00186 const SETTINGS &settings
00187 ) const;
00188
00190 virtual ERRVALUE v_Import (
00191 const MISTRING &source,
00192 const SETTINGS &settings,
00193 const SIMPLE_ARRAY<JOB_IMPORT *> &jobs
00194 ) const;
00195
00197 virtual TESTRESULT v_TestFile (
00198 const FILEPATH &filepath
00199 ) const;
00200
00201 };
00202
00203 }
00204
00205 #endif