Line data Source code
1 : /****************************************************************************** 2 : * 3 : * Project: KML Driver 4 : * Purpose: Declarations for OGR wrapper classes for KML, and OGR->KML 5 : * translation of geometry. 6 : * Author: Christopher Condit, condit@sdsc.edu; 7 : * Jens Oberender, j.obi@troja.net 8 : * 9 : ****************************************************************************** 10 : * Copyright (c) 2006, Christopher Condit 11 : * 2007, Jens Oberender 12 : * Copyright (c) 2007-2014, Even Rouault <even dot rouault at spatialys.com> 13 : * 14 : * SPDX-License-Identifier: MIT 15 : ****************************************************************************/ 16 : #ifndef OGR_KML_H_INCLUDED 17 : #define OGR_KML_H_INCLUDED 18 : 19 : #include "ogrsf_frmts.h" 20 : 21 : #ifdef HAVE_EXPAT 22 : #include "kmlvector.h" 23 : #endif 24 : 25 : class OGRKMLDataSource; 26 : 27 : /************************************************************************/ 28 : /* OGRKMLLayer */ 29 : /************************************************************************/ 30 : 31 : class OGRKMLLayer final : public OGRLayer 32 : { 33 : public: 34 : OGRKMLLayer(const char *pszName_, const OGRSpatialReference *poSRS, 35 : bool bWriter, OGRwkbGeometryType eType, OGRKMLDataSource *poDS); 36 : ~OGRKMLLayer(); 37 : 38 : // 39 : // OGRLayer Interface 40 : // 41 : OGRFeatureDefn *GetLayerDefn() override; 42 : OGRErr ICreateFeature(OGRFeature *poFeature) override; 43 : OGRErr CreateField(const OGRFieldDefn *poField, 44 : int bApproxOK = TRUE) override; 45 : void ResetReading() override; 46 : OGRFeature *GetNextFeature() override; 47 : GIntBig GetFeatureCount(int bForce = TRUE) override; 48 : int TestCapability(const char *pszCap) override; 49 : 50 : GDALDataset *GetDataset() override; 51 : 52 : // 53 : // OGRKMLLayer Interface 54 : // 55 : void SetLayerNumber(int nLayer); 56 : 57 19 : void SetClosedForWriting() 58 : { 59 19 : bClosedForWriting = true; 60 19 : } 61 : 62 : CPLString WriteSchema(); 63 : 64 : private: 65 : friend class OGRKMLDataSource; 66 : 67 : OGRKMLDataSource *poDS_; 68 : OGRSpatialReference *poSRS_; 69 : OGRCoordinateTransformation *poCT_; 70 : 71 : OGRFeatureDefn *poFeatureDefn_; 72 : 73 : int iNextKMLId_; 74 : bool bWriter_; 75 : int nLayerNumber_; 76 : GIntBig nWroteFeatureCount_; 77 : bool bSchemaWritten_; 78 : bool bClosedForWriting; 79 : char *pszName_; 80 : 81 : int nLastAsked; 82 : int nLastCount; 83 : }; 84 : 85 : /************************************************************************/ 86 : /* OGRKMLDataSource */ 87 : /************************************************************************/ 88 : 89 : class OGRKMLDataSource final : public GDALDataset 90 : { 91 : public: 92 : OGRKMLDataSource(); 93 : ~OGRKMLDataSource(); 94 : 95 : int Open(const char *pszName, int bTestOpen); 96 : 97 1243 : int GetLayerCount() override 98 : { 99 1243 : return nLayers_; 100 : } 101 : 102 : OGRLayer *GetLayer(int nLayer) override; 103 : OGRLayer *ICreateLayer(const char *pszName, 104 : const OGRGeomFieldDefn *poGeomFieldDefn, 105 : CSLConstList papszOptions) override; 106 : int TestCapability(const char *pszCap) override; 107 : 108 : // 109 : // OGRKMLDataSource Interface 110 : // 111 : int Create(const char *pszName, char **papszOptions); 112 : 113 1581 : const char *GetNameField() const 114 : { 115 1581 : return pszNameField_; 116 : } 117 : 118 1497 : const char *GetDescriptionField() const 119 : { 120 1497 : return pszDescriptionField_; 121 : } 122 : 123 90 : const char *GetAltitudeMode() 124 : { 125 90 : return pszAltitudeMode_; 126 : } 127 : 128 128 : VSILFILE *GetOutputFP() 129 : { 130 128 : return fpOutput_; 131 : } 132 : 133 : void GrowExtents(OGREnvelope *psGeomBounds); 134 : #ifdef HAVE_EXPAT 135 810 : KML *GetKMLFile() 136 : { 137 810 : return poKMLFile_; 138 : } 139 : #endif 140 : 141 0 : bool IsFirstCTError() const 142 : { 143 0 : return !bIssuedCTError_; 144 : } 145 : 146 0 : void IssuedFirstCTError() 147 : { 148 0 : bIssuedCTError_ = true; 149 0 : } 150 : 151 : private: 152 : #ifdef HAVE_EXPAT 153 : KML *poKMLFile_; 154 : #endif 155 : 156 : OGRKMLLayer **papoLayers_; 157 : int nLayers_; 158 : 159 : // The name of the field to use for the KML name element. 160 : char *pszNameField_; 161 : char *pszDescriptionField_; 162 : 163 : // The KML altitude mode to use. 164 : char *pszAltitudeMode_; 165 : 166 : char **papszCreateOptions_; 167 : 168 : // Output related parameters. 169 : VSILFILE *fpOutput_; 170 : 171 : OGREnvelope oEnvelope_; 172 : 173 : // Have we issued a coordinate transformation already for this datasource. 174 : bool bIssuedCTError_; 175 : }; 176 : 177 : #endif /* OGR_KML_H_INCLUDED */