Line data Source code
1 : /****************************************************************************** 2 : * 3 : * Project: Interlis 2 Translator 4 : * Purpose: Definition of classes for OGR Interlis 2 driver. 5 : * Author: Markus Schnider, Sourcepole AG 6 : * 7 : ****************************************************************************** 8 : * Copyright (c) 2004, Pirmin Kalberer, Sourcepole AG 9 : * 10 : * SPDX-License-Identifier: MIT 11 : ****************************************************************************/ 12 : 13 : #ifndef OGR_ILI2_H_INCLUDED 14 : #define OGR_ILI2_H_INCLUDED 15 : 16 : #include "ogrsf_frmts.h" 17 : #include "imdreader.h" 18 : #include "ili2reader.h" 19 : 20 : #include <string> 21 : #include <list> 22 : 23 : class OGRILI2DataSource; 24 : 25 : /************************************************************************/ 26 : /* OGRILI2Layer */ 27 : /************************************************************************/ 28 : 29 : class OGRILI2Layer final : public OGRLayer 30 : { 31 : private: 32 : OGRFeatureDefn *poFeatureDefn; 33 : GeomFieldInfos oGeomFieldInfos; 34 : std::list<OGRFeature *> listFeature; 35 : std::list<OGRFeature *>::const_iterator listFeatureIt; 36 : 37 : OGRILI2DataSource *poDS; 38 : 39 : public: 40 : OGRILI2Layer(OGRFeatureDefn *poFeatureDefn, 41 : const GeomFieldInfos &oGeomFieldInfos, 42 : OGRILI2DataSource *poDS); 43 : 44 : ~OGRILI2Layer(); 45 : 46 : void AddFeature(OGRFeature *poFeature); 47 : 48 : void ResetReading() override; 49 : OGRFeature *GetNextFeature() override; 50 : 51 : GIntBig GetFeatureCount(int bForce = TRUE) override; 52 : 53 : OGRErr ICreateFeature(OGRFeature *poFeature) override; 54 : 55 4449 : OGRFeatureDefn *GetLayerDefn() override 56 : { 57 4449 : return poFeatureDefn; 58 : } 59 : 60 2 : CPLString GetIliGeomType(const char *cFieldName) 61 : { 62 4 : return oGeomFieldInfos[cFieldName].iliGeomType; 63 : } 64 : 65 : OGRErr CreateField(const OGRFieldDefn *poField, 66 : int bApproxOK = TRUE) override; 67 : 68 : int TestCapability(const char *) override; 69 : 70 : GDALDataset *GetDataset() override; 71 : }; 72 : 73 : /************************************************************************/ 74 : /* OGRILI2DataSource */ 75 : /************************************************************************/ 76 : 77 : class OGRILI2DataSource final : public GDALDataset 78 : { 79 : private: 80 : std::list<OGRLayer *> listLayer; 81 : 82 : char *pszName; 83 : ImdReader *poImdReader; 84 : IILI2Reader *poReader; 85 : VSILFILE *fpOutput; 86 : 87 : int nLayers; 88 : OGRILI2Layer **papoLayers; 89 : 90 : CPL_DISALLOW_COPY_ASSIGN(OGRILI2DataSource) 91 : 92 : public: 93 : OGRILI2DataSource(); 94 : virtual ~OGRILI2DataSource(); 95 : 96 : int Open(const char *, char **papszOpenOptions, int bTestOpen); 97 : int Create(const char *pszFile, char **papszOptions); 98 : 99 51 : int GetLayerCount() override 100 : { 101 51 : return static_cast<int>(listLayer.size()); 102 : } 103 : 104 : OGRLayer *GetLayer(int) override; 105 : 106 : OGRLayer *ICreateLayer(const char *pszName, 107 : const OGRGeomFieldDefn *poGeomFieldDefn, 108 : CSLConstList papszOptions) override; 109 : 110 2 : VSILFILE *GetOutputFP() 111 : { 112 2 : return fpOutput; 113 : } 114 : 115 : int TestCapability(const char *) override; 116 : }; 117 : 118 : #endif /* OGR_ILI2_H_INCLUDED */