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