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 : virtual ~OGRS57Layer(); 44 : 45 : void ResetReading() override; 46 : OGRFeature *GetNextFeature() override; 47 : OGRFeature *GetNextUnfilteredFeature(); 48 : virtual OGRFeature *GetFeature(GIntBig nFeatureId) override; 49 : 50 : virtual GIntBig GetFeatureCount(int bForce = TRUE) override; 51 : virtual OGRErr IGetExtent(int iGeomField, OGREnvelope *psExtent, 52 : bool bForce) override; 53 : 54 14257 : OGRFeatureDefn *GetLayerDefn() override 55 : { 56 14257 : return poFeatureDefn; 57 : } 58 : 59 : virtual OGRErr ICreateFeature(OGRFeature *poFeature) override; 60 : int TestCapability(const char *) 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(); 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() override 99 : { 100 3653 : return nLayers; 101 : } 102 : 103 : OGRLayer *GetLayer(int) override; 104 : void AddLayer(OGRS57Layer *); 105 : int TestCapability(const char *) override; 106 : 107 5221 : OGRSpatialReference *DSGetSpatialRef() 108 : { 109 5221 : return poSpatialRef; 110 : } 111 : 112 2010 : int GetModuleCount() 113 : { 114 2010 : return nModules; 115 : } 116 : 117 : S57Reader *GetModule(int); 118 : 119 118 : S57Writer *GetWriter() 120 : { 121 118 : return poWriter; 122 : } 123 : 124 : OGRErr GetDSExtent(OGREnvelope *psExtent, int bForce = TRUE); 125 : }; 126 : 127 : /************************************************************************/ 128 : /* OGRS57Driver */ 129 : /************************************************************************/ 130 : 131 : class OGRS57Driver final : public GDALDriver 132 : { 133 : static S57ClassRegistrar *poRegistrar; 134 : 135 : public: 136 : OGRS57Driver(); 137 : ~OGRS57Driver(); 138 : 139 : static GDALDataset *Open(GDALOpenInfo *poOpenInfo); 140 : static GDALDataset *Create(const char *pszName, int nBands, int nXSize, 141 : int nYSize, GDALDataType eDT, 142 : char **papszOptions); 143 : 144 : static S57ClassRegistrar *GetS57Registrar(); 145 : }; 146 : 147 : #endif /* ndef OGR_S57_H_INCLUDED */