LCOV - code coverage report
Current view: top level - ogr/ogrsf_frmts/georss - ogr_georss.h (source / functions) Hit Total Coverage
Test: gdal_filtered.info Lines: 10 10 100.0 %
Date: 2024-11-21 22:18:42 Functions: 5 5 100.0 %

          Line data    Source code
       1             : /******************************************************************************
       2             :  * $Id $
       3             :  *
       4             :  * Project:  GeoRSS Translator
       5             :  * Purpose:  Definition of classes for OGR GeoRSS driver.
       6             :  * Author:   Even Rouault, even dot rouault at spatialys.com
       7             :  *
       8             :  ******************************************************************************
       9             :  * Copyright (c) 2008-2010, Even Rouault <even dot rouault at spatialys.com>
      10             :  *
      11             :  * SPDX-License-Identifier: MIT
      12             :  ****************************************************************************/
      13             : 
      14             : #ifndef OGR_GEORSS_H_INCLUDED
      15             : #define OGR_GEORSS_H_INCLUDED
      16             : 
      17             : #include "ogrsf_frmts.h"
      18             : #include "ogr_p.h"
      19             : #include "cpl_hash_set.h"
      20             : 
      21             : #ifdef HAVE_EXPAT
      22             : #include "ogr_expat.h"
      23             : #endif
      24             : 
      25             : constexpr int PARSER_BUF_SIZE = 8192;
      26             : 
      27             : class OGRGeoRSSDataSource;
      28             : 
      29             : typedef enum
      30             : {
      31             :     GEORSS_ATOM,
      32             :     GEORSS_RSS,
      33             :     GEORSS_RSS_RDF,
      34             : } OGRGeoRSSFormat;
      35             : 
      36             : typedef enum
      37             : {
      38             :     GEORSS_GML,
      39             :     GEORSS_SIMPLE,
      40             :     GEORSS_W3C_GEO
      41             : } OGRGeoRSSGeomDialect;
      42             : 
      43             : /************************************************************************/
      44             : /*                             OGRGeoRSSLayer                              */
      45             : /************************************************************************/
      46             : 
      47             : class OGRGeoRSSLayer final : public OGRLayer
      48             : {
      49             :     OGRFeatureDefn *poFeatureDefn;
      50             :     OGRSpatialReference *poSRS;
      51             :     OGRGeoRSSDataSource *poDS;
      52             :     OGRGeoRSSFormat eFormat;
      53             : 
      54             :     bool bWriteMode;
      55             :     int nTotalFeatureCount;
      56             : 
      57             :     // TODO(schwehr): Remove eof?
      58             :     bool eof;
      59             :     int nNextFID;
      60             :     VSILFILE *fpGeoRSS; /* Large file API */
      61             :     bool bHasReadSchema;
      62             : #ifdef HAVE_EXPAT
      63             :     XML_Parser oParser;
      64             :     XML_Parser oSchemaParser;
      65             : #endif
      66             :     OGRGeometry *poGlobalGeom;
      67             :     bool bStopParsing;
      68             :     bool bInFeature;
      69             :     bool hasFoundLat;
      70             :     bool hasFoundLon;
      71             : #ifdef HAVE_EXPAT
      72             :     double latVal;
      73             :     double lonVal;
      74             : #endif
      75             :     char *pszSubElementName;
      76             :     char *pszSubElementValue;
      77             :     int nSubElementValueLen;
      78             : #ifdef HAVE_EXPAT
      79             :     int iCurrentField;
      80             : #endif
      81             :     bool bInSimpleGeometry;
      82             :     bool bInGMLGeometry;
      83             :     bool bInGeoLat;
      84             :     bool bInGeoLong;
      85             : #ifdef HAVE_EXPAT
      86             :     bool bFoundGeom;
      87             :     bool bSameSRS;
      88             : #endif
      89             :     OGRwkbGeometryType eGeomType;
      90             :     char *pszGMLSRSName;
      91             :     bool bInTagWithSubTag;
      92             :     char *pszTagWithSubTag;
      93             :     int currentDepth;
      94             :     int featureDepth;
      95             :     int geometryDepth;
      96             : #ifdef HAVE_EXPAT
      97             :     OGRFieldDefn *currentFieldDefn;
      98             :     int nWithoutEventCounter;
      99             :     int nDataHandlerCounter;
     100             : #endif
     101             :     CPLHashSet *setOfFoundFields;
     102             : 
     103             :     OGRFeature *poFeature;
     104             :     OGRFeature **ppoFeatureTab;
     105             :     int nFeatureTabLength;
     106             :     int nFeatureTabIndex;
     107             : 
     108             :   private:
     109             : #ifdef HAVE_EXPAT
     110             :     void AddStrToSubElementValue(const char *pszStr);
     111             : #endif
     112             :     bool IsStandardField(const char *pszName);
     113             : 
     114             :   public:
     115             :     OGRGeoRSSLayer(const char *pszFilename, const char *layerName,
     116             :                    OGRGeoRSSDataSource *poDS, OGRSpatialReference *poSRSIn,
     117             :                    bool bWriteMode = false);
     118             :     ~OGRGeoRSSLayer() override;
     119             : 
     120             :     void ResetReading() override;
     121             :     OGRFeature *GetNextFeature() override;
     122             : 
     123             :     OGRErr ICreateFeature(OGRFeature *poFeature) override;
     124             :     OGRErr CreateField(const OGRFieldDefn *poField, int bApproxOK) override;
     125             : 
     126             :     OGRFeatureDefn *GetLayerDefn() override;
     127             : 
     128             :     int TestCapability(const char *) override;
     129             : 
     130             :     GIntBig GetFeatureCount(int bForce) override;
     131             : 
     132             :     GDALDataset *GetDataset() override;
     133             : 
     134             :     void LoadSchema();
     135             : 
     136             : #ifdef HAVE_EXPAT
     137             :     void startElementCbk(const char *pszName, const char **ppszAttr);
     138             :     void endElementCbk(const char *pszName);
     139             :     void dataHandlerCbk(const char *data, int nLen);
     140             : 
     141             :     void startElementLoadSchemaCbk(const char *pszName, const char **ppszAttr);
     142             :     void endElementLoadSchemaCbk(const char *pszName);
     143             :     void dataHandlerLoadSchemaCbk(const char *data, int nLen);
     144             : #endif
     145             : };
     146             : 
     147             : /************************************************************************/
     148             : /*                           OGRGeoRSSDataSource                        */
     149             : /************************************************************************/
     150             : 
     151             : typedef enum
     152             : {
     153             :     GEORSS_VALIDITY_UNKNOWN,
     154             :     GEORSS_VALIDITY_INVALID,
     155             :     GEORSS_VALIDITY_VALID
     156             : } OGRGeoRSSValidity;
     157             : 
     158             : class OGRGeoRSSDataSource final : public GDALDataset
     159             : {
     160             :     OGRGeoRSSLayer **papoLayers;
     161             :     int nLayers;
     162             : 
     163             :     /*  Export related */
     164             :     VSILFILE *fpOutput; /* Virtual file API */
     165             : 
     166             : #ifdef HAVE_EXPAT
     167             :     OGRGeoRSSValidity validity;
     168             : #endif
     169             :     OGRGeoRSSFormat eFormat;
     170             :     OGRGeoRSSGeomDialect eGeomDialect;
     171             :     bool bUseExtensions;
     172             :     bool bWriteHeaderAndFooter;
     173             : #ifdef HAVE_EXPAT
     174             :     XML_Parser oCurrentParser;
     175             :     int nDataHandlerCounter;
     176             : #endif
     177             : 
     178             :   public:
     179             :     OGRGeoRSSDataSource();
     180             :     ~OGRGeoRSSDataSource() override;
     181             : 
     182             :     int Open(const char *pszFilename, int bUpdate);
     183             : 
     184             :     int Create(const char *pszFilename, char **papszOptions);
     185             : 
     186           3 :     int GetLayerCount() override
     187             :     {
     188           3 :         return nLayers;
     189             :     }
     190             : 
     191             :     OGRLayer *GetLayer(int) override;
     192             : 
     193             :     OGRLayer *ICreateLayer(const char *pszName,
     194             :                            const OGRGeomFieldDefn *poGeomFieldDefn,
     195             :                            CSLConstList papszOptions) override;
     196             :     int TestCapability(const char *) override;
     197             : 
     198          95 :     VSILFILE *GetOutputFP()
     199             :     {
     200          95 :         return fpOutput;
     201             :     }
     202             : 
     203          68 :     OGRGeoRSSFormat GetFormat()
     204             :     {
     205          68 :         return eFormat;
     206             :     }
     207             : 
     208          95 :     OGRGeoRSSGeomDialect GetGeomDialect()
     209             :     {
     210          95 :         return eGeomDialect;
     211             :     }
     212             : 
     213          99 :     bool GetUseExtensions()
     214             :     {
     215          99 :         return bUseExtensions;
     216             :     }
     217             : 
     218             : #ifdef HAVE_EXPAT
     219             :     void startElementValidateCbk(const char *pszName, const char **ppszAttr);
     220             :     void dataHandlerValidateCbk(const char *data, int nLen);
     221             : #endif
     222             : };
     223             : 
     224             : #endif /* ndef _OGR_GeoRSS_H_INCLUDED */

Generated by: LCOV version 1.14