Line data Source code
1 : /****************************************************************************** 2 : * 3 : * Project: OpenGIS Simple Features Reference Implementation 4 : * Purpose: Private definitions within the OGR GMT driver. 5 : * Author: Frank Warmerdam, warmerdam@pobox.com 6 : * 7 : ****************************************************************************** 8 : * Copyright (c) 2007, Frank Warmerdam <warmerdam@pobox.com> 9 : * 10 : * SPDX-License-Identifier: MIT 11 : ****************************************************************************/ 12 : 13 : #ifndef OGRGMT_H_INCLUDED 14 : #define OGRGMT_H_INCLUDED 15 : 16 : #include "ogrsf_frmts.h" 17 : #include "ogr_api.h" 18 : #include "cpl_string.h" 19 : 20 : /************************************************************************/ 21 : /* OGRGmtLayer */ 22 : /************************************************************************/ 23 : 24 : class OGRGmtLayer final : public OGRLayer, 25 : public OGRGetNextFeatureThroughRaw<OGRGmtLayer> 26 : { 27 : GDALDataset *m_poDS = nullptr; 28 : OGRSpatialReference *m_poSRS = nullptr; 29 : OGRFeatureDefn *poFeatureDefn{}; 30 : 31 : int iNextFID{}; 32 : 33 : bool bUpdate{}; 34 : bool bHeaderComplete{}; 35 : 36 : bool bRegionComplete{}; 37 : OGREnvelope sRegion{}; 38 : vsi_l_offset nRegionOffset{}; 39 : 40 : VSILFILE *m_fp = nullptr; 41 : 42 : bool ReadLine(); 43 : CPLString osLine{}; 44 : char **papszKeyedValues{}; 45 : 46 : bool ScanAheadForHole(); 47 : bool NextIsFeature(); 48 : 49 : OGRFeature *GetNextRawFeature(); 50 : 51 : OGRErr WriteGeometry(OGRGeometryH hGeom, bool bHaveAngle); 52 : OGRErr CompleteHeader(OGRGeometry *); 53 : 54 : CPL_DISALLOW_COPY_ASSIGN(OGRGmtLayer) 55 : 56 : public: 57 : bool bValidFile; 58 : 59 : OGRGmtLayer(GDALDataset *poDS, const char *pszFilename, VSILFILE *fp, 60 : const OGRSpatialReference *poSRS, int bUpdate); 61 : virtual ~OGRGmtLayer(); 62 : 63 : void ResetReading() override; 64 50 : DEFINE_GET_NEXT_FEATURE_THROUGH_RAW(OGRGmtLayer) 65 : 66 352 : OGRFeatureDefn *GetLayerDefn() override 67 : { 68 352 : return poFeatureDefn; 69 : } 70 : 71 : OGRErr IGetExtent(int iGeomField, OGREnvelope *psExtent, 72 : bool bForce) override; 73 : 74 : OGRErr ICreateFeature(OGRFeature *poFeature) override; 75 : 76 : virtual OGRErr CreateField(const OGRFieldDefn *poField, 77 : int bApproxOK = TRUE) override; 78 : 79 : int TestCapability(const char *) override; 80 : 81 17 : GDALDataset *GetDataset() override 82 : { 83 17 : return m_poDS; 84 : } 85 : }; 86 : 87 : /************************************************************************/ 88 : /* OGRGmtDataSource */ 89 : /************************************************************************/ 90 : 91 : class OGRGmtDataSource final : public GDALDataset 92 : { 93 : OGRGmtLayer **papoLayers; 94 : int nLayers; 95 : 96 : bool bUpdate; 97 : 98 : CPL_DISALLOW_COPY_ASSIGN(OGRGmtDataSource) 99 : 100 : public: 101 : OGRGmtDataSource(); 102 : virtual ~OGRGmtDataSource(); 103 : 104 : int Open(const char *pszFilename, VSILFILE *fp, 105 : const OGRSpatialReference *poSRS, int bUpdate); 106 : 107 3 : int GetLayerCount() override 108 : { 109 3 : return nLayers; 110 : } 111 : 112 : OGRLayer *GetLayer(int) override; 113 : 114 : OGRLayer *ICreateLayer(const char *pszName, 115 : const OGRGeomFieldDefn *poGeomFieldDefn, 116 : CSLConstList papszOptions) override; 117 : int TestCapability(const char *) override; 118 : }; 119 : 120 : #endif /* ndef OGRGMT_H_INCLUDED */