Line data Source code
1 : /****************************************************************************** 2 : * 3 : * Project: S-57 Translator 4 : * Purpose: Declarations for classes binding S57 support onto OGRLayer, 5 : * OGRDataSource and OGRDriver. See also s57.h. 6 : * Author: Frank Warmerdam, warmerdam@pobox.com 7 : * 8 : ****************************************************************************** 9 : * Copyright (c) 1999, Frank Warmerdam 10 : * 11 : * SPDX-License-Identifier: MIT 12 : ****************************************************************************/ 13 : 14 : #ifndef OGR_S57_H_INCLUDED 15 : #define OGR_S57_H_INCLUDED 16 : 17 : #include "ogrsf_frmts.h" 18 : #include "s57.h" 19 : 20 : class OGRS57DataSource; 21 : 22 : /************************************************************************/ 23 : /* OGRS57Layer */ 24 : /* */ 25 : /* Represents all features of a particular S57 object class. */ 26 : /************************************************************************/ 27 : 28 : class OGRS57Layer final : public OGRLayer 29 : { 30 : OGRS57DataSource *poDS; 31 : 32 : OGRFeatureDefn *poFeatureDefn; 33 : 34 : int nCurrentModule; 35 : int nRCNM; 36 : int nOBJL; 37 : int nNextFEIndex; 38 : int nFeatureCount; 39 : 40 : public: 41 : OGRS57Layer(OGRS57DataSource *poDS, OGRFeatureDefn *, 42 : int nFeatureCount = -1, int nOBJL = -1); 43 : ~OGRS57Layer() override; 44 : 45 : void ResetReading() override; 46 : OGRFeature *GetNextFeature() override; 47 : OGRFeature *GetNextUnfilteredFeature(); 48 : OGRFeature *GetFeature(GIntBig nFeatureId) override; 49 : 50 : GIntBig GetFeatureCount(int bForce = TRUE) override; 51 : OGRErr IGetExtent(int iGeomField, OGREnvelope *psExtent, 52 : bool bForce) override; 53 : 54 13441 : const OGRFeatureDefn *GetLayerDefn() const override 55 : { 56 13441 : return poFeatureDefn; 57 : } 58 : 59 : OGRErr ICreateFeature(OGRFeature *poFeature) override; 60 : int TestCapability(const char *) const override; 61 : }; 62 : 63 : /************************************************************************/ 64 : /* OGRS57DataSource */ 65 : /************************************************************************/ 66 : 67 : class OGRS57DataSource final : public GDALDataset 68 : { 69 : int nLayers; 70 : OGRS57Layer **papoLayers; 71 : 72 : OGRSpatialReference *poSpatialRef; 73 : 74 : char **papszOptions; 75 : 76 : int nModules; 77 : S57Reader **papoModules; 78 : 79 : S57Writer *poWriter; 80 : 81 : S57ClassContentExplorer *poClassContentExplorer; 82 : 83 : bool bExtentsSet; 84 : OGREnvelope oExtents; 85 : 86 : CPL_DISALLOW_COPY_ASSIGN(OGRS57DataSource) 87 : 88 : public: 89 : explicit OGRS57DataSource(char **papszOpenOptions = nullptr); 90 : ~OGRS57DataSource() override; 91 : 92 : void SetOptionList(char **); 93 : const char *GetOption(const char *); 94 : 95 : int Open(const char *pszName); 96 : int Create(const char *pszName, char **papszOptions); 97 : 98 3653 : int GetLayerCount() const override 99 : { 100 3653 : return nLayers; 101 : } 102 : 103 : using GDALDataset::GetLayer; 104 : const OGRLayer *GetLayer(int) const override; 105 : void AddLayer(OGRS57Layer *); 106 : int TestCapability(const char *) const override; 107 : 108 5221 : const OGRSpatialReference *DSGetSpatialRef() const 109 : { 110 5221 : return poSpatialRef; 111 : } 112 : 113 2123 : int GetModuleCount() 114 : { 115 2123 : return nModules; 116 : } 117 : 118 : S57Reader *GetModule(int); 119 : 120 118 : S57Writer *GetWriter() 121 : { 122 118 : return poWriter; 123 : } 124 : 125 : OGRErr GetDSExtent(OGREnvelope *psExtent, int bForce = TRUE); 126 : }; 127 : 128 : /************************************************************************/ 129 : /* OGRS57Driver */ 130 : /************************************************************************/ 131 : 132 : class OGRS57Driver final : public GDALDriver 133 : { 134 : static S57ClassRegistrar *poRegistrar; 135 : 136 : public: 137 : OGRS57Driver(); 138 : ~OGRS57Driver() override; 139 : 140 : static GDALDataset *Open(GDALOpenInfo *poOpenInfo); 141 : static GDALDataset *Create(const char *pszName, int nBands, int nXSize, 142 : int nYSize, GDALDataType eDT, 143 : char **papszOptions); 144 : 145 : static S57ClassRegistrar *GetS57Registrar(); 146 : }; 147 : 148 : #endif /* ndef OGR_S57_H_INCLUDED */