LCOV - code coverage report
Current view: top level - ogr/ogrsf_frmts/kml - ogr_kml.h (source / functions) Hit Total Coverage
Test: gdal_filtered.info Lines: 15 20 75.0 %
Date: 2025-01-18 12:42:00 Functions: 7 9 77.8 %

          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 */

Generated by: LCOV version 1.14