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