Line data Source code
1 : /****************************************************************************** 2 : * $Id$ 3 : * 4 : * Project: Interlis 1 Translator 5 : * Purpose: Definition of classes for OGR Interlis 1 driver. 6 : * Author: Pirmin Kalberer, Sourcepole AG 7 : * 8 : ****************************************************************************** 9 : * Copyright (c) 2004, Pirmin Kalberer, Sourcepole AG 10 : * 11 : * SPDX-License-Identifier: MIT 12 : ****************************************************************************/ 13 : 14 : #ifndef OGR_ILI1_H_INCLUDED 15 : #define OGR_ILI1_H_INCLUDED 16 : 17 : #include "ogrsf_frmts.h" 18 : #include "ili1reader.h" 19 : 20 : class OGRILI1DataSource; 21 : 22 : /************************************************************************/ 23 : /* OGRILI1Layer */ 24 : /************************************************************************/ 25 : 26 : class OGRILI1Layer final : public OGRLayer 27 : { 28 : private: 29 : #if 0 30 : OGRSpatialReference *poSRS; 31 : #endif 32 : OGRFeatureDefn *poFeatureDefn; 33 : GeomFieldInfos oGeomFieldInfos; 34 : 35 : int nFeatures; 36 : OGRFeature **papoFeatures; 37 : int nFeatureIdx; 38 : 39 : bool bGeomsJoined; 40 : 41 : OGRILI1DataSource *poDS; 42 : 43 : public: 44 : OGRILI1Layer(OGRFeatureDefn *poFeatureDefn, 45 : const GeomFieldInfos &oGeomFieldInfos, 46 : OGRILI1DataSource *poDS); 47 : 48 : ~OGRILI1Layer(); 49 : 50 : OGRErr AddFeature(OGRFeature *poFeature); 51 : 52 : void ResetReading() override; 53 : OGRFeature *GetNextFeature() override; 54 : OGRFeature *GetNextFeatureRef(); 55 : OGRFeature *GetFeatureRef(GIntBig nFid); 56 : OGRFeature *GetFeatureRef(const char *); 57 : 58 : GIntBig GetFeatureCount(int bForce = TRUE) override; 59 : 60 : OGRErr ICreateFeature(OGRFeature *poFeature) override; 61 : int GeometryAppend(OGRGeometry *poGeometry); 62 : 63 1220 : OGRFeatureDefn *GetLayerDefn() override 64 : { 65 1220 : return poFeatureDefn; 66 : } 67 : 68 : GeomFieldInfos GetGeomFieldInfos() 69 : { 70 : return oGeomFieldInfos; 71 : } 72 : 73 : OGRErr CreateField(const OGRFieldDefn *poField, 74 : int bApproxOK = TRUE) override; 75 : 76 : int TestCapability(const char *) override; 77 : 78 : GDALDataset *GetDataset() override; 79 : 80 : private: 81 : void JoinGeomLayers(); 82 : void JoinSurfaceLayer(OGRILI1Layer *poSurfaceLineLayer, 83 : int nSurfaceFieldIndex); 84 : OGRMultiPolygon *Polygonize(OGRGeometryCollection *poLines, 85 : bool fix_crossing_lines = false); 86 : void PolygonizeAreaLayer(OGRILI1Layer *poAreaLineLayer, int nAreaFieldIndex, 87 : int nPointFieldIndex); 88 : }; 89 : 90 : /************************************************************************/ 91 : /* OGRILI1DataSource */ 92 : /************************************************************************/ 93 : 94 : class OGRILI1DataSource final : public GDALDataset 95 : { 96 : private: 97 : ImdReader *poImdReader; 98 : IILI1Reader *poReader; 99 : VSILFILE *fpTransfer; 100 : char *pszTopic; 101 : int nLayers; 102 : OGRILI1Layer **papoLayers; 103 : 104 : CPL_DISALLOW_COPY_ASSIGN(OGRILI1DataSource) 105 : 106 : public: 107 : OGRILI1DataSource(); 108 : virtual ~OGRILI1DataSource(); 109 : 110 : int Open(const char *, char **papszOpenOptions, int bTestOpen); 111 : int Create(const char *pszFile, char **papszOptions); 112 : 113 64 : int GetLayerCount() override 114 : { 115 64 : return poReader ? poReader->GetLayerCount() : 0; 116 : } 117 : 118 : OGRLayer *GetLayer(int) override; 119 : OGRILI1Layer *GetLayerByName(const char *) override; 120 : 121 745 : VSILFILE *GetTransferFile() 122 : { 123 745 : return fpTransfer; 124 : } 125 : 126 : OGRLayer *ICreateLayer(const char *pszName, 127 : const OGRGeomFieldDefn *poGeomFieldDefn, 128 : CSLConstList papszOptions) override; 129 : 130 : int TestCapability(const char *) override; 131 : }; 132 : 133 : #endif /* OGR_ILI1_H_INCLUDED */