LCOV - code coverage report
Current view: top level - apps - gdalalg_vector_geom_segmentize.cpp (source / functions) Hit Total Coverage
Test: gdal_filtered.info Lines: 22 22 100.0 %
Date: 2025-04-16 00:42:22 Functions: 4 4 100.0 %

          Line data    Source code
       1             : /******************************************************************************
       2             :  *
       3             :  * Project:  GDAL
       4             :  * Purpose:  "gdal vector geom segmentize"
       5             :  * Author:   Even Rouault <even dot rouault at spatialys.com>
       6             :  *
       7             :  ******************************************************************************
       8             :  * Copyright (c) 2025, Even Rouault <even dot rouault at spatialys.com>
       9             :  *
      10             :  * SPDX-License-Identifier: MIT
      11             :  ****************************************************************************/
      12             : 
      13             : #include "gdalalg_vector_geom_segmentize.h"
      14             : 
      15             : #include "gdal_priv.h"
      16             : #include "ogrsf_frmts.h"
      17             : 
      18             : //! @cond Doxygen_Suppress
      19             : 
      20             : #ifndef _
      21             : #define _(x) (x)
      22             : #endif
      23             : 
      24             : /************************************************************************/
      25             : /*                 GDALVectorGeomSegmentizeAlgorithm()                  */
      26             : /************************************************************************/
      27             : 
      28           7 : GDALVectorGeomSegmentizeAlgorithm::GDALVectorGeomSegmentizeAlgorithm(
      29           7 :     bool standaloneStep)
      30             :     : GDALVectorGeomAbstractAlgorithm(NAME, DESCRIPTION, HELP_URL,
      31           7 :                                       standaloneStep, m_opts)
      32             : {
      33             :     AddArg("max-length", 0, _("Maximum length of a segment"),
      34          14 :            &m_opts.m_maxLength)
      35           7 :         .SetPositional()
      36           7 :         .SetRequired()
      37           7 :         .SetMinValueExcluded(0);
      38           7 : }
      39             : 
      40             : namespace
      41             : {
      42             : 
      43             : /************************************************************************/
      44             : /*                  GDALVectorGeomSegmentizeAlgorithmLayer              */
      45             : /************************************************************************/
      46             : 
      47             : class GDALVectorGeomSegmentizeAlgorithmLayer final
      48             :     : public GDALVectorGeomOneToOneAlgorithmLayer<
      49             :           GDALVectorGeomSegmentizeAlgorithm>
      50             : {
      51             :   protected:
      52             :     using GDALVectorGeomOneToOneAlgorithmLayer::TranslateFeature;
      53             : 
      54             :     std::unique_ptr<OGRFeature>
      55             :     TranslateFeature(std::unique_ptr<OGRFeature> poSrcFeature) const override;
      56             : 
      57             :   public:
      58           1 :     GDALVectorGeomSegmentizeAlgorithmLayer(
      59             :         OGRLayer &oSrcLayer,
      60             :         const GDALVectorGeomSegmentizeAlgorithm::Options &opts)
      61           1 :         : GDALVectorGeomOneToOneAlgorithmLayer<
      62           1 :               GDALVectorGeomSegmentizeAlgorithm>(oSrcLayer, opts)
      63             :     {
      64           1 :     }
      65             : };
      66             : 
      67             : /************************************************************************/
      68             : /*                          TranslateFeature()                          */
      69             : /************************************************************************/
      70             : 
      71             : std::unique_ptr<OGRFeature>
      72           5 : GDALVectorGeomSegmentizeAlgorithmLayer::TranslateFeature(
      73             :     std::unique_ptr<OGRFeature> poSrcFeature) const
      74             : {
      75           5 :     const int nGeomFieldCount = poSrcFeature->GetGeomFieldCount();
      76          10 :     for (int i = 0; i < nGeomFieldCount; ++i)
      77             :     {
      78           5 :         if (IsSelectedGeomField(i))
      79             :         {
      80           5 :             if (auto poGeom = poSrcFeature->GetGeomFieldRef(i))
      81             :             {
      82           3 :                 poGeom->segmentize(m_opts.m_maxLength);
      83             :             }
      84             :         }
      85             :     }
      86             : 
      87           5 :     return poSrcFeature;
      88             : }
      89             : 
      90             : }  // namespace
      91             : 
      92             : /************************************************************************/
      93             : /*           GDALVectorGeomSegmentizeAlgorithm::CreateAlgLayer()        */
      94             : /************************************************************************/
      95             : 
      96             : std::unique_ptr<OGRLayerWithTranslateFeature>
      97           1 : GDALVectorGeomSegmentizeAlgorithm::CreateAlgLayer(OGRLayer &srcLayer)
      98             : {
      99           1 :     return std::make_unique<GDALVectorGeomSegmentizeAlgorithmLayer>(srcLayer,
     100           1 :                                                                     m_opts);
     101             : }
     102             : 
     103             : //! @endcond

Generated by: LCOV version 1.14