QGIS API Documentation 3.30.0-'s-Hertogenbosch (f186b8efe0)
qgsvectorlayerprofilegenerator.h
Go to the documentation of this file.
1/***************************************************************************
2 qgsvectorlayerprofilegenerator.h
3 ---------------
4 begin : March 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 QGSVECTORLAYERPROFILEGENERATOR_H
18#define QGSVECTORLAYERPROFILEGENERATOR_H
19
20#include "qgis_core.h"
21#include "qgis_sip.h"
26#include "qgsmarkersymbol.h"
27#include "qgsfillsymbol.h"
28#include "qgslinesymbol.h"
29#include "qgsfeatureid.h"
30
31#include <memory>
32
34class QgsCurve;
35class QgsVectorLayer;
38class QgsGeos;
39class QgsLineString;
40class QgsPolygon;
42
43#define SIP_NO_FILE
44
45
54{
55 public:
56
57 struct Feature
58 {
65 };
66
67 QHash< QgsFeatureId, QVector< Feature > > features;
68 QPointer< QgsVectorLayer > mLayer;
69
71 bool respectLayerSymbology = true;
72 std::unique_ptr< QgsMarkerSymbol > mMarkerSymbol;
73 bool mShowMarkerSymbolInSurfacePlots = false;
74
75 QString type() const override;
76 QVector< QgsGeometry > asGeometries() const override;
77 QgsProfileSnapResult snapPoint( const QgsProfilePoint &point, const QgsProfileSnapContext &context ) override;
78 QVector<QgsProfileIdentifyResults> identify( const QgsProfilePoint &point, const QgsProfileIdentifyContext &context ) override;
79 QVector<QgsProfileIdentifyResults> identify( const QgsDoubleRange &distanceRange, const QgsDoubleRange &elevationRange, const QgsProfileIdentifyContext &context ) override;
80 void renderResults( QgsProfileRenderContext &context ) override;
81 void copyPropertiesFromGenerator( const QgsAbstractProfileGenerator *generator ) override;
82
83 private:
84 void renderResultsAsIndividualFeatures( QgsProfileRenderContext &context );
85 void renderMarkersOverContinuousSurfacePlot( QgsProfileRenderContext &context );
86 QgsProfileSnapResult snapPointToIndividualFeatures( const QgsProfilePoint &point, const QgsProfileSnapContext &context );
87
88 void visitFeaturesAtPoint( const QgsProfilePoint &point, double maximumPointDistanceDelta, double maximumPointElevationDelta, double maximumSurfaceElevationDelta,
89 const std::function< void( QgsFeatureId, double delta, double distance, double elevation ) > &visitor, bool visitWithin );
90 void visitFeaturesInRange( const QgsDoubleRange &distanceRange, const QgsDoubleRange &elevationRange,
91 const std::function<void ( QgsFeatureId )> &visitor );
92};
93
94
103{
104
105 public:
106
111
113
114 QString sourceId() const override;
115 bool generateProfile( const QgsProfileGenerationContext &context = QgsProfileGenerationContext() ) override;
116 QgsAbstractProfileResults *takeResults() override;
117 QgsFeedback *feedback() const override;
118
119 private:
120
121 bool generateProfileForPoints();
122 bool generateProfileForLines();
123 bool generateProfileForPolygons();
124
125 double terrainHeight( double x, double y );
126 double featureZToHeight( double x, double y, double z, double offset );
127
128 void clampAltitudes( QgsLineString *lineString, const QgsPoint &centroid, double offset );
129 bool clampAltitudes( QgsPolygon *polygon, double offset );
130
131 QString mId;
132 std::unique_ptr<QgsFeedback> mFeedback = nullptr;
133
134 std::unique_ptr< QgsCurve > mProfileCurve;
135 std::unique_ptr< QgsGeos > mProfileCurveEngine;
136
137 std::unique_ptr< QgsAbstractTerrainProvider > mTerrainProvider;
138
139 std::unique_ptr< QgsCurve > mTransformedCurve;
140 double mTolerance = 0;
141
142
145 QgsCoordinateTransformContext mTransformContext;
146 QgsRectangle mExtent;
147
148 std::unique_ptr< QgsVectorLayerFeatureSource > mSource;
149
150 double mOffset = 0;
151 double mScale = 1;
155 bool mExtrusionEnabled = false;
156 double mExtrusionHeight = 0;
157
158 QgsExpressionContext mExpressionContext;
159 QgsFields mFields;
160 QgsPropertyCollection mDataDefinedProperties;
161
163 QgsCoordinateTransform mLayerToTargetTransform;
164 QgsCoordinateTransform mTargetToTerrainProviderTransform;
165
166 std::unique_ptr< QgsVectorLayerProfileResults > mResults;
167
168 bool mRespectLayerSymbology = true;
169 std::unique_ptr< QgsMarkerSymbol > mProfileMarkerSymbol;
170 bool mShowMarkerSymbolInSurfacePlots = false;
171
172 // NOT for use in the background thread!
173 QPointer< QgsVectorLayer > mLayer;
174
176
177};
178
179#endif // QGSVECTORLAYERPROFILEGENERATOR_H
AltitudeClamping
Altitude clamping.
Definition: qgis.h:2329
@ Terrain
Elevation is clamped to terrain (final elevation = terrain elevation)
AltitudeBinding
Altitude binding.
Definition: qgis.h:2342
@ Centroid
Clamp just centroid of feature.
VectorProfileType
Types of elevation profiles to generate for vector sources.
Definition: qgis.h:2458
@ IndividualFeatures
Treat each feature as an individual object (eg buildings)
WkbType
The WKB type describes the number of dimensions a geometry has.
Definition: qgis.h:155
@ Unknown
Unknown.
Abstract base class for objects which generate elevation profiles.
Abstract base class for storage of elevation profiles.
virtual QString type() const =0
Returns the unique string identifier for the results type.
Abstract base class for objects which generate elevation profiles which represent a continuous surfac...
Abstract base class for storage of elevation profiles which represent a continuous surface (e....
void renderResults(QgsProfileRenderContext &context) override
Renders the results to the specified context.
void copyPropertiesFromGenerator(const QgsAbstractProfileGenerator *generator) override
Copies properties from specified generator to the results object.
QVector< QgsGeometry > asGeometries() const override
Returns a list of geometries representing the calculated elevation results.
QVector< QgsProfileIdentifyResults > identify(const QgsProfilePoint &point, const QgsProfileIdentifyContext &context) override
Identify results visible at the specified profile point.
QgsProfileSnapResult snapPoint(const QgsProfilePoint &point, const QgsProfileSnapContext &context) override
Snaps a point to the generated elevation profile.
Abstract base class for terrain providers.
This class represents a coordinate reference system (CRS).
Contains information about the context in which a coordinate transform is executed.
Class for doing transforms between two map coordinate systems.
Abstract base class for curved geometry type.
Definition: qgscurve.h:36
QgsRange which stores a range of double values.
Definition: qgsrange.h:203
Expression contexts are used to encapsulate the parameters around which a QgsExpression should be eva...
Base class for feedback objects to be used for cancellation of something running in a worker thread.
Definition: qgsfeedback.h:45
Container of fields for a vector layer.
Definition: qgsfields.h:45
A geometry is the spatial representation of a feature.
Definition: qgsgeometry.h:164
Does vector analysis using the geos library and handles import, export, exception handling*.
Definition: qgsgeos.h:99
Line string geometry type, with support for z-dimension and m-values.
Definition: qgslinestring.h:45
Point geometry type, with support for z-dimension and m-values.
Definition: qgspoint.h:49
Polygon geometry type.
Definition: qgspolygon.h:34
Encapsulates the context in which an elevation profile is to be generated.
Encapsulates the context of identifying profile results.
Encapsulates a point on a distance-elevation profile.
Abstract base class for storage of elevation profiles.
Encapsulates properties and constraints relating to fetching elevation profiles from different source...
Encapsulates the context of snapping a profile point.
Encapsulates results of snapping a profile point.
A grouped map of multiple QgsProperty objects, each referenced by a integer key value.
A rectangle specified with double values.
Definition: qgsrectangle.h:42
Partial snapshot of vector layer's state (only the members necessary for access to features)
Implementation of QgsAbstractProfileGenerator for vector layers.
~QgsVectorLayerProfileGenerator() override
Implementation of QgsAbstractProfileResults for vector layers.
std::unique_ptr< QgsMarkerSymbol > mMarkerSymbol
QHash< QgsFeatureId, QVector< Feature > > features
Represents a vector layer which manages a vector based data sets.
CORE_EXPORT QgsMeshVertex centroid(const QgsMeshFace &face, const QVector< QgsMeshVertex > &vertices)
Returns the centroid of the face.
qint64 QgsFeatureId
64 bit feature ids negative numbers are used for uncommitted/newly added features
Definition: qgsfeatureid.h:28
QgsGeometry crossSectionGeometry
Cross section distance vs height geometry for feature.
QgsGeometry geometry
Feature's geometry with any terrain height adjustment and extrusion applied.