QGIS API Documentation 3.37.0-Master (fdefdf9c27f)
qgsterrainprovider.h
Go to the documentation of this file.
1/***************************************************************************
2 qgsterrainprovider.h
3 ---------------
4 begin : February 2022
5 copyright : (C) 2022 by Nyall Dawson
6 email : nyall dot dawson at gmail dot com
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#ifndef QGSTERRAINPROVIDER_H
18#define QGSTERRAINPROVIDER_H
19
20#include "qgis_core.h"
21#include "qgsrange.h"
22#include "qgsunittypes.h"
23#include "qgsmaplayerref.h"
24#include "qgsrasterlayer.h"
25#include "qgsmeshlayer.h"
26#include "qgstriangularmesh.h"
27
28#include <QObject>
29
30class QDomElement;
32class QDomDocument;
33
41{
42
43#ifdef SIP_RUN
45 if ( sipCpp->type().compare( QLatin1String( "flat" ) ) == 0 )
46 {
47 sipType = sipType_QgsFlatTerrainProvider;
48 }
49 else if ( sipCpp->type().compare( QLatin1String( "raster" ) ) == 0 )
50 {
51 sipType = sipType_QgsRasterDemTerrainProvider;
52 }
53 else if ( sipCpp->type().compare( QLatin1String( "mesh" ) ) == 0 )
54 {
55 sipType = sipType_QgsMeshTerrainProvider;
56 }
57 else
58 {
59 sipType = 0;
60 }
62#endif
63
64 public:
65
67
72
76 virtual bool equals( const QgsAbstractTerrainProvider *other ) const = 0;
77
81 virtual void resolveReferences( const QgsProject *project );
82
87 virtual bool readXml( const QDomElement &element, const QgsReadWriteContext &context ) = 0;
88
93 virtual QDomElement writeXml( QDomDocument &document, const QgsReadWriteContext &context ) const = 0;
94
98 virtual QString type() const = 0;
99
106
113 virtual void prepare() = 0 SIP_FACTORY;
114
119
125 virtual double heightAt( double x, double y ) const = 0;
126
133 double scale() const { return mScale; }
134
141 void setScale( double scale ) { mScale = scale; }
142
149 double offset() const { return mOffset; }
150
157 void setOffset( double offset ) { mOffset = offset; }
158
159 protected:
160
165
166#ifndef SIP_RUN
167
172#endif
173
177 void writeCommonProperties( QDomElement &element, const QgsReadWriteContext &context ) const;
178
182 void readCommonProperties( const QDomElement &element, const QgsReadWriteContext &context );
183
185 double mScale = 1.0;
186
188 double mOffset = 0.0;
189
190 private:
191
192#ifdef SIP_RUN
194#endif
195
196};
197
198
206{
207 public:
208
213
214 QString type() const override;
215 bool readXml( const QDomElement &element, const QgsReadWriteContext &context ) override;
216 QDomElement writeXml( QDomDocument &document, const QgsReadWriteContext &context ) const override;
217 QgsCoordinateReferenceSystem crs() const override;
218 double heightAt( double x, double y ) const override;
219 QgsFlatTerrainProvider *clone() const override SIP_FACTORY;
220 void prepare() override;
221 bool equals( const QgsAbstractTerrainProvider *other ) const override;
222};
223
231{
232 public:
233
238
239#ifndef SIP_RUN
242#endif
243
244 QString type() const override;
245 void resolveReferences( const QgsProject *project ) override;
246 bool readXml( const QDomElement &element, const QgsReadWriteContext &context ) override;
247 QDomElement writeXml( QDomDocument &document, const QgsReadWriteContext &context ) const override;
248 QgsCoordinateReferenceSystem crs() const override;
249 double heightAt( double x, double y ) const override;
250 QgsRasterDemTerrainProvider *clone() const override SIP_FACTORY;
251 bool equals( const QgsAbstractTerrainProvider *other ) const override;
252 void prepare() override;
253
259 void setLayer( QgsRasterLayer *layer );
260
266 QgsRasterLayer *layer() const;
267
268
269 private:
271
272 _LayerRef<QgsRasterLayer> mRasterLayer;
273 std::unique_ptr< QgsRasterDataProvider > mRasterProvider;
274
275};
276
277
285{
286 public:
287
292
293#ifndef SIP_RUN
296#endif
297
298 QString type() const override;
299 void resolveReferences( const QgsProject *project ) override;
300 bool readXml( const QDomElement &element, const QgsReadWriteContext &context ) override;
301 QDomElement writeXml( QDomDocument &document, const QgsReadWriteContext &context ) const override;
302 QgsCoordinateReferenceSystem crs() const override;
303 double heightAt( double x, double y ) const override;
304 QgsMeshTerrainProvider *clone() const override SIP_FACTORY;
305 bool equals( const QgsAbstractTerrainProvider *other ) const override;
306 void prepare() override;
307
313 void setLayer( QgsMeshLayer *layer );
314
320 QgsMeshLayer *layer() const;
321
322 private:
324
325 _LayerRef<QgsMeshLayer> mMeshLayer;
326 QgsTriangularMesh mTriangularMesh;
327};
328
329#endif // QGSTERRAINPROVIDER_H
Abstract base class for terrain providers.
QgsAbstractTerrainProvider & operator=(const QgsAbstractTerrainProvider &other)=delete
QgsAbstractTerrainProvider cannot be assigned.
virtual bool equals(const QgsAbstractTerrainProvider *other) const =0
Returns true if the provider is equal to other.
virtual QString type() const =0
Returns the unique type ID string for the provider.
virtual double heightAt(double x, double y) const =0
Returns the height at the point (x,y) in the terrain provider's native crs().
virtual bool readXml(const QDomElement &element, const QgsReadWriteContext &context)=0
Reads the terrain provider state from a DOM element.
virtual ~QgsAbstractTerrainProvider()
virtual QgsCoordinateReferenceSystem crs() const =0
Returns the native coordinate reference system of the terrain provider.
virtual void prepare()=0
Called on the main thread prior to accessing the provider from a background thread.
double offset() const
Returns the vertical offset value, used for adjusting the heights from the terrain provider.
double scale() const
Returns the vertical scale factor, which can be used to exaggerate vertical heights.
virtual QDomElement writeXml(QDomDocument &document, const QgsReadWriteContext &context) const =0
Returns a DOM element representing the state of the terrain provider.
QgsAbstractTerrainProvider()=default
Constructor for QgsAbstractTerrainProvider.
void setOffset(double offset)
Returns the vertical offset value, used for adjusting the heights from the terrain provider.
void setScale(double scale)
Sets the vertical scale factor, which can be used to exaggerate vertical heights.
virtual QgsAbstractTerrainProvider * clone() const =0
Creates a clone of the provider and returns the new object.
This class represents a coordinate reference system (CRS).
A terrain provider where the terrain is a simple flat surface.
QgsFlatTerrainProvider()=default
Constructor for QgsFlatTerrainProvider.
Represents a mesh layer supporting display of data on structured or unstructured meshes.
Definition: qgsmeshlayer.h:101
A terrain provider that uses the Z values of a mesh layer to build a terrain surface.
QgsMeshTerrainProvider()=default
Constructor for QgsMeshTerrainProvider.
const QgsMeshTerrainProvider * operator=(const QgsMeshTerrainProvider &other)=delete
QgsMeshTerrainProvider cannot be assigned.
Encapsulates a QGIS project, including sets of map layers and their styles, layouts,...
Definition: qgsproject.h:107
Base class for raster data providers.
A terrain provider where the terrain source is a raster DEM layer.
const QgsRasterDemTerrainProvider * operator=(const QgsRasterDemTerrainProvider &other)=delete
QgsRasterDemTerrainProvider cannot be assigned.
QgsRasterDemTerrainProvider()=default
Constructor for QgsRasterDemTerrainProvider.
Represents a raster layer.
The class is used as a container of context for various read/write operations on other objects.
Triangular/Derived Mesh is mesh with vertices in map coordinates.
std::unique_ptr< GEOSGeometry, GeosDeleter > unique_ptr
Scoped GEOS pointer.
Definition: qgsgeos.h:73
#define SIP_CONVERT_TO_SUBCLASS_CODE(code)
Definition: qgis_sip.h:191
#define SIP_FACTORY
Definition: qgis_sip.h:76
#define SIP_END
Definition: qgis_sip.h:208
const QgsCoordinateReferenceSystem & crs
Internal structure to keep weak pointer to QgsMapLayer or layerId if the layer is not available yet.