QGIS API Documentation 3.28.0-Firenze (ed3ad0430f)
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:1927
@ Terrain
Elevation is clamped to terrain (final elevation = terrain elevation)
AltitudeBinding
Altitude binding.
Definition: qgis.h:1940
@ Centroid
Clamp just centroid of feature.
VectorProfileType
Types of elevation profiles to generate for vector sources.
Definition: qgis.h:2031
@ IndividualFeatures
Treat each feature as an individual object (eg buildings)
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.
Type
The WKB type describes the number of dimensions a geometry has.
Definition: qgswkbtypes.h:70
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.