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