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 GetExtent(OGREnvelope *psExtent, int bForce = TRUE) override; 52 : 53 50 : virtual OGRErr GetExtent(int iGeomField, OGREnvelope *psExtent, 54 : int bForce) override 55 : { 56 50 : return OGRLayer::GetExtent(iGeomField, psExtent, bForce); 57 : } 58 : 59 14185 : OGRFeatureDefn *GetLayerDefn() override 60 : { 61 14185 : return poFeatureDefn; 62 : } 63 : 64 : virtual OGRErr ICreateFeature(OGRFeature *poFeature) override; 65 : int TestCapability(const char *) override; 66 : }; 67 : 68 : /************************************************************************/ 69 : /* OGRS57DataSource */ 70 : /************************************************************************/ 71 : 72 : class OGRS57DataSource final : public GDALDataset 73 : { 74 : int nLayers; 75 : OGRS57Layer **papoLayers; 76 : 77 : OGRSpatialReference *poSpatialRef; 78 : 79 : char **papszOptions; 80 : 81 : int nModules; 82 : S57Reader **papoModules; 83 : 84 : S57Writer *poWriter; 85 : 86 : S57ClassContentExplorer *poClassContentExplorer; 87 : 88 : bool bExtentsSet; 89 : OGREnvelope oExtents; 90 : 91 : CPL_DISALLOW_COPY_ASSIGN(OGRS57DataSource) 92 : 93 : public: 94 : explicit OGRS57DataSource(char **papszOpenOptions = nullptr); 95 : ~OGRS57DataSource(); 96 : 97 : void SetOptionList(char **); 98 : const char *GetOption(const char *); 99 : 100 : int Open(const char *pszName); 101 : int Create(const char *pszName, char **papszOptions); 102 : 103 3653 : int GetLayerCount() override 104 : { 105 3653 : return nLayers; 106 : } 107 : 108 : OGRLayer *GetLayer(int) override; 109 : void AddLayer(OGRS57Layer *); 110 : int TestCapability(const char *) override; 111 : 112 5221 : OGRSpatialReference *DSGetSpatialRef() 113 : { 114 5221 : return poSpatialRef; 115 : } 116 : 117 2010 : int GetModuleCount() 118 : { 119 2010 : return nModules; 120 : } 121 : 122 : S57Reader *GetModule(int); 123 : 124 118 : S57Writer *GetWriter() 125 : { 126 118 : return poWriter; 127 : } 128 : 129 : OGRErr GetDSExtent(OGREnvelope *psExtent, int bForce = TRUE); 130 : }; 131 : 132 : /************************************************************************/ 133 : /* OGRS57Driver */ 134 : /************************************************************************/ 135 : 136 : class OGRS57Driver final : public GDALDriver 137 : { 138 : static S57ClassRegistrar *poRegistrar; 139 : 140 : public: 141 : OGRS57Driver(); 142 : ~OGRS57Driver(); 143 : 144 : static GDALDataset *Open(GDALOpenInfo *poOpenInfo); 145 : static GDALDataset *Create(const char *pszName, int nBands, int nXSize, 146 : int nYSize, GDALDataType eDT, 147 : char **papszOptions); 148 : 149 : static S57ClassRegistrar *GetS57Registrar(); 150 : }; 151 : 152 : #endif /* ndef OGR_S57_H_INCLUDED */