LCOV - code coverage report
Current view: top level - analysis/interpolation - qgsinterpolator.h (source / functions) Hit Total Coverage
Test: coverage.info.cleaned Lines: 0 12 0.0 %
Date: 2021-04-10 08:29:14 Functions: 0 0 -
Branches: 0 0 -

           Branch data     Line data    Source code
       1                 :            : /***************************************************************************
       2                 :            :                               qgsinterpolator.h
       3                 :            :                               ------------------------
       4                 :            :   begin                : March 10, 2008
       5                 :            :   copyright            : (C) 2008 by Marco Hugentobler
       6                 :            :   email                : marco dot hugentobler at karto dot baug dot ethz dot ch
       7                 :            :  ***************************************************************************/
       8                 :            : 
       9                 :            : /***************************************************************************
      10                 :            :  *                                                                         *
      11                 :            :  *   This program is free software; you can redistribute it and/or modify  *
      12                 :            :  *   it under the terms of the GNU General Public License as published by  *
      13                 :            :  *   the Free Software Foundation; either version 2 of the License, or     *
      14                 :            :  *   (at your option) any later version.                                   *
      15                 :            :  *                                                                         *
      16                 :            :  ***************************************************************************/
      17                 :            : 
      18                 :            : #ifndef QGSINTERPOLATOR_H
      19                 :            : #define QGSINTERPOLATOR_H
      20                 :            : 
      21                 :            : #include <QVector>
      22                 :            : #include <QList>
      23                 :            : 
      24                 :            : #include "qgis_sip.h"
      25                 :            : #include "qgis_analysis.h"
      26                 :            : #include "qgscoordinatetransformcontext.h"
      27                 :            : 
      28                 :            : class QgsFeatureSource;
      29                 :            : class QgsGeometry;
      30                 :            : class QgsFeedback;
      31                 :            : 
      32                 :            : /**
      33                 :            :  * Interpolation data for an individual source vertex.
      34                 :            :  * \since QGIS 3.0
      35                 :            :  */
      36                 :            : struct ANALYSIS_EXPORT QgsInterpolatorVertexData
      37                 :            : {
      38                 :            : 
      39                 :            :   /**
      40                 :            :    * Constructor for QgsInterpolatorVertexData with the specified
      41                 :            :    * \a x, \a y, and \a z coordinate.
      42                 :            :    */
      43                 :          0 :   QgsInterpolatorVertexData( double x, double y, double z )
      44                 :          0 :     : x( x )
      45                 :          0 :     , y( y )
      46                 :          0 :     , z( z )
      47                 :          0 :   {}
      48                 :            : 
      49                 :            :   //! Constructor for QgsInterpolatorVertexData
      50                 :            :   QgsInterpolatorVertexData() = default;
      51                 :            : 
      52                 :            :   //! X-coordinate
      53                 :            :   double x = 0.0;
      54                 :            :   //! Y-coordinate
      55                 :            :   double y = 0.0;
      56                 :            :   //! Z-coordinate
      57                 :            :   double z = 0.0;
      58                 :            : };
      59                 :            : 
      60                 :            : /**
      61                 :            :  * \ingroup analysis
      62                 :            :  * \brief Interface class for interpolations.
      63                 :            :  *
      64                 :            :  * Interpolators take
      65                 :            :  * the vertices of a vector layer as base data. The z-Value
      66                 :            :  * can be an attribute or the z-coordinates in case of 3D types.
      67                 :            : */
      68                 :            : class ANALYSIS_EXPORT QgsInterpolator
      69                 :            : {
      70                 :            :   public:
      71                 :            : 
      72                 :            :     //! Describes the type of input data
      73                 :            :     enum SourceType
      74                 :            :     {
      75                 :            :       SourcePoints, //!< Point source
      76                 :            :       SourceStructureLines, //!< Structure lines
      77                 :            :       SourceBreakLines, //!< Break lines
      78                 :            :     };
      79                 :            : 
      80                 :            :     //! Source for interpolated values from features
      81                 :            :     enum ValueSource
      82                 :            :     {
      83                 :            :       ValueAttribute, //!< Take value from feature's attribute
      84                 :            :       ValueZ, //!< Use feature's geometry Z values for interpolation
      85                 :            :       ValueM, //!< Use feature's geometry M values for interpolation
      86                 :            :     };
      87                 :            : 
      88                 :            :     //! Result of an interpolation operation
      89                 :            :     enum Result
      90                 :            :     {
      91                 :            :       Success = 0, //!< Operation was successful
      92                 :            :       Canceled, //!< Operation was manually canceled
      93                 :            :       InvalidSource, //!< Operation failed due to invalid source
      94                 :            :       FeatureGeometryError, //!< Operation failed due to invalid feature geometry
      95                 :            :     };
      96                 :            : 
      97                 :            :     //! A source together with the information about interpolation attribute / z-coordinate interpolation and the type (point, structure line, breakline)
      98                 :          0 :     struct LayerData
      99                 :            :     {
     100                 :            :       //! Feature source
     101                 :          0 :       QgsFeatureSource *source = nullptr;
     102                 :            :       //! Source for feature values to interpolate
     103                 :          0 :       QgsInterpolator::ValueSource valueSource = QgsInterpolator::ValueAttribute;
     104                 :            :       //! Index of feature attribute to use for interpolation
     105                 :          0 :       int interpolationAttribute = -1;
     106                 :            :       //! Source type
     107                 :          0 :       QgsInterpolator::SourceType sourceType = SourcePoints;
     108                 :            : 
     109                 :            :       /**
     110                 :            :        * Coordinate transform context.
     111                 :            :        *
     112                 :            :        * \since QGIS 3.10.1
     113                 :            :        */
     114                 :            :       QgsCoordinateTransformContext transformContext;
     115                 :            :     };
     116                 :            : 
     117                 :            :     QgsInterpolator( const QList<QgsInterpolator::LayerData> &layerData );
     118                 :            : 
     119                 :          0 :     virtual ~QgsInterpolator() = default;
     120                 :            : 
     121                 :            :     /**
     122                 :            :      * Calculates interpolation value for map coordinates x, y
     123                 :            :      * \param x x-coordinate (in map units)
     124                 :            :      * \param y y-coordinate (in map units)
     125                 :            :      * \param result interpolation result
     126                 :            :      * \param feedback optional feedback object for progress and cancellation support
     127                 :            :      * \returns 0 in case of success
     128                 :            :      */
     129                 :            :     virtual int interpolatePoint( double x, double y, double &result SIP_OUT, QgsFeedback *feedback = nullptr ) = 0;
     130                 :            : 
     131                 :            :     //! \note not available in Python bindings
     132                 :          0 :     QList<LayerData> layerData() const { return mLayerData; } SIP_SKIP
     133                 :            : 
     134                 :            :   protected:
     135                 :            : 
     136                 :            :     /**
     137                 :            :      * Caches the vertex and value data from the provider. All the vertex data
     138                 :            :      * will be held in virtual memory.
     139                 :            :      *
     140                 :            :      * An optional \a feedback argument may be specified to allow cancellation and
     141                 :            :      * progress reports from the cache operation.
     142                 :            :      *
     143                 :            :      * \returns Success in case of success
     144                 :            :     */
     145                 :            :     Result cacheBaseData( QgsFeedback *feedback = nullptr );
     146                 :            : 
     147                 :            :     //! Cached vertex data for input sources
     148                 :            :     QVector<QgsInterpolatorVertexData> mCachedBaseData;
     149                 :            : 
     150                 :            :     //! Flag that tells if the cache already has been filled
     151                 :            :     bool mDataIsCached = false;
     152                 :            : 
     153                 :            :     //! Information about the input vector layers and the attributes (or z-values) that are used for interpolation
     154                 :            :     QList<LayerData> mLayerData;
     155                 :            : 
     156                 :            :   private:
     157                 :            :     QgsInterpolator() = delete;
     158                 :            : 
     159                 :            :     /**
     160                 :            :      * Helper method that adds the vertices of a geometry to the mCachedBaseData
     161                 :            :      * \param geom the geometry
     162                 :            :      * \param source source for values to interpolate from the feature
     163                 :            :      * \param attributeValue the attribute value for interpolation (if interpolating from attribute value)
     164                 :            :      *\returns 0 in case of success
     165                 :            :     */
     166                 :            :     bool addVerticesToCache( const QgsGeometry &geom, ValueSource source, double attributeValue );
     167                 :            : };
     168                 :            : 
     169                 :            : #endif

Generated by: LCOV version 1.14