32 #ifndef PCIDSKDATASET2_H_INCLUDED
33 #define PCIDSKDATASET2_H_INCLUDED
35 #define GDAL_PCIDSK_DRIVER
37 #include "cpl_string.h"
39 #include "ogrsf_frmts.h"
40 #include "ogr_spatialref.h"
42 #include "pcidsk_pct.h"
43 #include "pcidsk_vectorsegment.h"
45 #include <unordered_map>
47 using namespace PCIDSK;
59 mutable OGRSpatialReference* m_poSRS =
nullptr;
60 CPLString osLastMDValue;
61 char **papszLastMDListValue;
63 PCIDSK::PCIDSKFile *poFile;
65 std::vector<OGRPCIDSKLayer*> apoLayers;
67 static GDALDataType PCIDSKTypeToGDAL( PCIDSK::eChanType eType );
74 static int Identify( GDALOpenInfo * );
75 static GDALDataset *Open( GDALOpenInfo * );
76 static GDALDataset *LLOpen(
const char *pszFilename, PCIDSK::PCIDSKFile *,
78 char** papszSiblingFiles =
nullptr );
79 static GDALDataset *Create(
const char * pszFilename,
80 int nXSize,
int nYSize,
int nBands,
82 char **papszParmList );
84 char **GetFileList()
override;
85 CPLErr GetGeoTransform(
double * padfTransform )
override;
86 CPLErr SetGeoTransform(
double * )
override;
88 const OGRSpatialReference* GetSpatialRef()
const override;
89 CPLErr SetSpatialRef(
const OGRSpatialReference* poSRS)
override;
91 virtual char **GetMetadataDomainList()
override;
92 CPLErr SetMetadata(
char **,
const char * )
override;
93 char **GetMetadata(
const char* )
override;
94 CPLErr SetMetadataItem(
const char*,
const char*,
const char*)
override;
95 const char *GetMetadataItem(
const char*,
const char*)
override;
97 virtual void FlushCache()
override;
99 virtual CPLErr IBuildOverviews(
const char *,
int,
int *,
100 int,
int *, GDALProgressFunc,
void * )
override;
102 virtual int GetLayerCount()
override {
return (
int) apoLayers.size(); }
103 virtual OGRLayer *GetLayer(
int )
override;
105 virtual int TestCapability(
const char * )
override;
107 virtual OGRLayer *ICreateLayer(
const char *, OGRSpatialReference *,
108 OGRwkbGeometryType,
char ** )
override;
119 PCIDSK::PCIDSKChannel *poChannel;
120 PCIDSK::PCIDSKFile *poFile;
122 void RefreshOverviewList();
123 std::vector<PCIDSK2Band*> apoOverviews;
125 CPLString osLastMDValue;
126 char **papszLastMDListValue;
128 bool CheckForColorTable();
129 GDALColorTable *poColorTable;
130 bool bCheckedForColorTable;
133 char **papszCategoryNames;
139 PCIDSK::PCIDSKChannel *poChannelIn );
143 virtual CPLErr IReadBlock(
int,
int,
void * )
override;
144 virtual CPLErr IWriteBlock(
int,
int,
void * )
override;
146 virtual int GetOverviewCount()
override;
147 virtual GDALRasterBand *GetOverview(
int)
override;
149 virtual GDALColorInterp GetColorInterpretation()
override;
150 virtual GDALColorTable *GetColorTable()
override;
151 virtual CPLErr SetColorTable( GDALColorTable * )
override;
153 virtual void SetDescription(
const char * )
override;
155 virtual char **GetMetadataDomainList()
override;
156 CPLErr SetMetadata(
char **,
const char * )
override;
157 char **GetMetadata(
const char* )
override;
158 CPLErr SetMetadataItem(
const char*,
const char*,
const char*)
override;
159 const char *GetMetadataItem(
const char*,
const char*)
override;
161 virtual char **GetCategoryNames()
override;
170 PCIDSK::PCIDSKVectorSegment *poVecSeg;
171 PCIDSK::PCIDSKSegment *poSeg;
173 OGRFeatureDefn *poFeatureDefn;
175 OGRFeature * GetNextUnfilteredFeature();
178 PCIDSK::ShapeId hLastShapeId;
182 OGRSpatialReference *poSRS;
184 std::unordered_map<std::string, int> m_oMapFieldNameToIdx{};
187 OGRPCIDSKLayer( PCIDSK::PCIDSKSegment*, PCIDSK::PCIDSKVectorSegment *,
bool bUpdate );
190 void ResetReading()
override;
191 OGRFeature * GetNextFeature()
override;
192 OGRFeature *GetFeature( GIntBig nFeatureId )
override;
193 virtual OGRErr ISetFeature( OGRFeature *poFeature )
override;
195 OGRFeatureDefn * GetLayerDefn()
override {
return poFeatureDefn; }
197 int TestCapability(
const char * )
override;
199 OGRErr DeleteFeature( GIntBig nFID )
override;
200 virtual OGRErr ICreateFeature( OGRFeature *poFeature )
override;
201 virtual OGRErr CreateField( OGRFieldDefn *poField,
202 int bApproxOK = TRUE )
override;
204 GIntBig GetFeatureCount(
int )
override;
205 OGRErr GetExtent( OGREnvelope *psExtent,
int bForce )
override;
206 virtual OGRErr GetExtent(
int iGeomField, OGREnvelope *psExtent,
int bForce)
override
207 {
return OGRLayer::GetExtent(iGeomField, psExtent, bForce); }