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