1
/***************************************************************************
3
------------------------
5
copyright : (C) 2008 by Marco Hugentobler
6
email : marco dot hugentobler at karto dot baug dot ethz dot ch
7
***************************************************************************/
9
/***************************************************************************
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. *
16
***************************************************************************/
18
#ifndef QGSINTERPOLATOR_H
19
#define QGSINTERPOLATOR_H
26
struct ANALYSIS_EXPORT vertexData
33
/**Interface class for interpolations. Interpolators take
34
the vertices of a vector layer as base data. The z-Value
35
can be an attribute or the z-coordinates in case of 25D types*/
36
class ANALYSIS_EXPORT QgsInterpolator
39
/**Describes the type of input data*/
47
/**A layer together with the information about interpolation attribute / z-coordinate interpolation and the type (point, structure line, breakline)*/
50
QgsVectorLayer* vectorLayer;
51
bool zCoordInterpolation;
52
int interpolationAttribute;
56
QgsInterpolator( const QList<LayerData>& layerData );
58
virtual ~QgsInterpolator();
60
/**Calculates interpolation value for map coordinates x, y
61
@param x x-coordinate (in map units)
62
@param y y-coordinate (in map units)
63
@param result out: interpolation result
64
@return 0 in case of success*/
65
virtual int interpolatePoint( double x, double y, double& result ) = 0;
67
/**Use a vector attribute as interpolation value*/
68
void enableAttributeValueInterpolation( int attribute );
71
/**Caches the vertex and value data from the provider. All the vertex data
72
will be held in virtual memory
73
@return 0 in case of success*/
76
QVector<vertexData> mCachedBaseData;
78
/**Flag that tells if the cache already has been filled*/
81
//Information about the input vector layers and the attributes (or z-values) that are used for interpolation
82
QList<LayerData> mLayerData;
85
QgsInterpolator(); //forbidden
86
/**Helper method that adds the vertices of a geometry to the mCachedBaseData
87
@param geom the geometry
88
@param zCoord true if the z-coordinate of the geometry is to be interpolated
89
@param attributeValue the attribute value for interpolation (if not interpolated from z-coordinate)
90
@return 0 in case of success*/
91
int addVerticesToCache( QgsGeometry* geom, bool zCoord, double attributeValue );