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() override; 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 : using OGRLayer::GetLayerDefn; 62 : 63 584 : const OGRFeatureDefn *GetLayerDefn() const override 64 : { 65 584 : return poFeatureDefn; 66 : } 67 : 68 : GeomFieldInfos GetGeomFieldInfos() 69 : { 70 : return oGeomFieldInfos; 71 : } 72 : 73 : int TestCapability(const char *) const override; 74 : 75 : GDALDataset *GetDataset() override; 76 : 77 : private: 78 : void JoinGeomLayers(); 79 : void JoinSurfaceLayer(OGRILI1Layer *poSurfaceLineLayer, 80 : int nSurfaceFieldIndex); 81 : OGRMultiPolygon *Polygonize(OGRGeometryCollection *poLines, 82 : bool fix_crossing_lines = false); 83 : void PolygonizeAreaLayer(OGRILI1Layer *poAreaLineLayer, int nAreaFieldIndex, 84 : int nPointFieldIndex); 85 : }; 86 : 87 : /************************************************************************/ 88 : /* OGRILI1DataSource */ 89 : /************************************************************************/ 90 : 91 : class OGRILI1DataSource final : public GDALDataset 92 : { 93 : private: 94 : ImdReader *poImdReader; 95 : IILI1Reader *poReader; 96 : int nLayers; 97 : OGRILI1Layer **papoLayers; 98 : 99 : CPL_DISALLOW_COPY_ASSIGN(OGRILI1DataSource) 100 : 101 : public: 102 : OGRILI1DataSource(); 103 : ~OGRILI1DataSource() override; 104 : 105 : int Open(const char *, char **papszOpenOptions, int bTestOpen); 106 : 107 29 : int GetLayerCount() const override 108 : { 109 29 : return poReader ? poReader->GetLayerCount() : 0; 110 : } 111 : 112 : using GDALDataset::GetLayer; 113 : const OGRLayer *GetLayer(int) const override; 114 : OGRILI1Layer *GetLayerByName(const char *) override; 115 : 116 : int TestCapability(const char *) const override; 117 : }; 118 : 119 : #endif /* OGR_ILI1_H_INCLUDED */