QGIS API Documentation 3.41.0-Master (fda2aa46e9a)
Loading...
Searching...
No Matches
qgsquickmapsettings.cpp
Go to the documentation of this file.
1/***************************************************************************
2 qgsquickmapsettings.cpp
3 --------------------------------------
4 Date : 27.12.2014
5 Copyright : (C) 2014 by Matthias Kuhn
6 Email : matthias (at) opengis.ch
7 ***************************************************************************
8 * *
9 * This program is free software; you can redistribute it and/or modify *
10 * it under the terms of the GNU General Public License as published by *
11 * the Free Software Foundation; either version 2 of the License, or *
12 * (at your option) any later version. *
13 * *
14 ***************************************************************************/
15
16
17#include "qgis.h"
18#include "qgsquickmapsettings.h"
19#include "moc_qgsquickmapsettings.cpp"
20
21#include "qgsmaplayer.h"
22#include "qgsmessagelog.h"
24
36
38{
39 if ( project == mProject )
40 return;
41
42 // If we have already something connected, disconnect it!
43 if ( mProject )
44 {
45 mProject->disconnect( this );
46 }
47
48 mProject = project;
49
50 // Connect all signals
51 if ( mProject )
52 {
53 connect( mProject, &QgsProject::readProject, this, &QgsQuickMapSettings::onReadProject );
54 connect( mProject, &QgsProject::crsChanged, this, &QgsQuickMapSettings::onCrsChanged );
55 setDestinationCrs( mProject->crs() );
56 mMapSettings.setTransformContext( mProject->transformContext() );
57 mMapSettings.setPathResolver( mProject->pathResolver() );
58 }
59 else
60 {
62 }
63
64 emit projectChanged();
65}
66
68{
69 return mProject;
70}
71
76
78{
79 return mMapSettings.extent();
80}
81
83{
84 if ( mMapSettings.extent() == extent )
85 return;
86
87 mMapSettings.setExtent( extent );
88 emit extentChanged();
89}
90
92{
93 return QgsPoint( extent().center() );
94}
95
97{
98 QgsVector delta = QgsPointXY( center ) - mMapSettings.extent().center();
99
100 QgsRectangle e = mMapSettings.extent();
101 e.setXMinimum( e.xMinimum() + delta.x() );
102 e.setXMaximum( e.xMaximum() + delta.x() );
103 e.setYMinimum( e.yMinimum() + delta.y() );
104 e.setYMaximum( e.yMaximum() + delta.y() );
105
106 setExtent( e );
107}
108
110{
111 return mMapSettings.mapUnitsPerPixel();
112}
113
115{
116 Q_ASSERT( layer );
117
118 const QgsRectangle extent = mapSettings().layerToMapCoordinates( layer, layer->extent() );
119
120 if ( !extent.isEmpty() )
121 {
122 if ( shouldZoom )
123 setExtent( extent );
124 else
126 }
127}
128
130{
131 return mMapSettings.mapUnitsPerPixel() * devicePixelRatio();
132}
133
135{
136 return mMapSettings.visibleExtent();
137}
138
140{
141 QgsPointXY pt( point.x(), point.y() );
142 QgsPointXY pp = mMapSettings.mapToPixel().transform( pt );
143 pp.setX( pp.x() / devicePixelRatio() );
144 pp.setY( pp.y() / devicePixelRatio() );
145 return pp.toQPointF();
146}
147
149{
150 const QgsPointXY pp = mMapSettings.mapToPixel().toMapCoordinates( point.x() * devicePixelRatio(), point.y() * devicePixelRatio() );
151 return QgsPoint( pp );
152}
153
158
160{
161 return mMapSettings;
162}
163
165{
166 return mMapSettings.outputSize();
167}
168
170{
171 outputSize.setWidth( outputSize.width() * devicePixelRatio() );
172 outputSize.setHeight( outputSize.height() * devicePixelRatio() );
173 if ( mMapSettings.outputSize() == outputSize )
174 return;
175
176 mMapSettings.setOutputSize( outputSize );
177 emit outputSizeChanged();
178}
179
181{
182 return mMapSettings.outputDpi();
183}
184
185void QgsQuickMapSettings::setOutputDpi( double outputDpi )
186{
188 if ( qgsDoubleNear( mMapSettings.outputDpi(), outputDpi ) )
189 return;
190
191 mMapSettings.setOutputDpi( outputDpi );
192 emit outputDpiChanged();
193}
194
199
201{
202 if ( mMapSettings.destinationCrs() == destinationCrs )
203 return;
204
205 mMapSettings.setDestinationCrs( destinationCrs );
207}
208
209QList<QgsMapLayer *> QgsQuickMapSettings::layers() const
210{
211 return mMapSettings.layers();
212}
213
214void QgsQuickMapSettings::setLayers( const QList<QgsMapLayer *> &layers )
215{
216 mMapSettings.setLayers( layers );
217 emit layersChanged();
218}
219
220void QgsQuickMapSettings::onCrsChanged()
221{
222 setDestinationCrs( mProject->crs() );
223}
224
225void QgsQuickMapSettings::onReadProject( const QDomDocument &doc )
226{
227 if ( mProject )
228 {
229 int red = mProject->readNumEntry( QStringLiteral( "Gui" ), QStringLiteral( "/CanvasColorRedPart" ), 255 );
230 int green = mProject->readNumEntry( QStringLiteral( "Gui" ), QStringLiteral( "/CanvasColorGreenPart" ), 255 );
231 int blue = mProject->readNumEntry( QStringLiteral( "Gui" ), QStringLiteral( "/CanvasColorBluePart" ), 255 );
232 mMapSettings.setBackgroundColor( QColor( red, green, blue ) );
233
234 const bool isTemporal = mProject->readNumEntry( QStringLiteral( "TemporalControllerWidget" ), QStringLiteral( "/NavigationMode" ), 0 ) != 0;
235 const QString startString = QgsProject::instance()->readEntry( QStringLiteral( "TemporalControllerWidget" ), QStringLiteral( "/StartDateTime" ) );
236 const QString endString = QgsProject::instance()->readEntry( QStringLiteral( "TemporalControllerWidget" ), QStringLiteral( "/EndDateTime" ) );
237 mMapSettings.setIsTemporal( isTemporal );
238 mMapSettings.setTemporalRange( QgsDateTimeRange( QDateTime::fromString( startString, Qt::ISODateWithMs ),
239 QDateTime::fromString( endString, Qt::ISODateWithMs ) ) );
240 }
241
242 QDomNodeList nodes = doc.elementsByTagName( "mapcanvas" );
243 bool foundTheMapCanvas = false;
244 for ( int i = 0; i < nodes.size(); i++ )
245 {
246 QDomNode node = nodes.item( 0 );
247 QDomElement element = node.toElement();
248
249 if ( element.hasAttribute( QStringLiteral( "name" ) ) && element.attribute( QStringLiteral( "name" ) ) == QLatin1String( "theMapCanvas" ) )
250 {
251 foundTheMapCanvas = true;
252 mMapSettings.readXml( node );
253
254 if ( !qgsDoubleNear( mMapSettings.rotation(), 0 ) )
255 QgsMessageLog::logMessage( tr( "Map Canvas rotation is not supported. Resetting from %1 to 0." ).arg( mMapSettings.rotation() ) );
256 }
257 }
258 if ( !foundTheMapCanvas )
259 {
260 mMapSettings.setDestinationCrs( mProject->crs() );
261 mMapSettings.setExtent( mProject->viewSettings()->fullExtent() );
262 }
263
264 mMapSettings.setRotation( 0 );
265
266 mMapSettings.setTransformContext( mProject->transformContext() );
267 mMapSettings.setPathResolver( mProject->pathResolver() );
268 mMapSettings.setElevationShadingRenderer( mProject->elevationShadingRenderer() );
269
270 emit extentChanged();
272 emit outputSizeChanged();
273 emit outputDpiChanged();
274 emit layersChanged();
276 emit zRangeChanged();
277}
278
280{
281 return mMapSettings.rotation();
282}
283
284void QgsQuickMapSettings::setRotation( double rotation )
285{
286 if ( !qgsDoubleNear( rotation, 0 ) )
287 QgsMessageLog::logMessage( tr( "Map Canvas rotation is not supported. Resetting from %1 to 0." ).arg( rotation ) );
288}
289
291{
292 return mMapSettings.backgroundColor();
293}
294
296{
297 if ( mMapSettings.backgroundColor() == color )
298 return;
299
300 mMapSettings.setBackgroundColor( color );
302}
303
305{
306 return mDevicePixelRatio;
307}
308
309void QgsQuickMapSettings::setDevicePixelRatio( const qreal &devicePixelRatio )
310{
311 mDevicePixelRatio = devicePixelRatio;
313}
314
316{
317 return mMapSettings.isTemporal();
318}
319
321{
322 mMapSettings.setIsTemporal( temporal );
324}
325
327{
328 return mMapSettings.temporalRange().begin();
329}
330
331void QgsQuickMapSettings::setTemporalBegin( const QDateTime &begin )
332{
333 const QgsDateTimeRange range = mMapSettings.temporalRange();
334 mMapSettings.setTemporalRange( QgsDateTimeRange( begin, range.end() ) );
336}
337
339{
340 return mMapSettings.temporalRange().end();
341}
342
343void QgsQuickMapSettings::setTemporalEnd( const QDateTime &end )
344{
345 const QgsDateTimeRange range = mMapSettings.temporalRange();
346 mMapSettings.setTemporalRange( QgsDateTimeRange( range.begin(), end ) );
348}
349
351{
352 const QgsDoubleRange zRange = mMapSettings.zRange();
353 return zRange.lower();
354}
355
356void QgsQuickMapSettings::setZRangeLower( const double &lower )
357{
358 const QgsDoubleRange zRange = mMapSettings.zRange();
359 if ( zRange.lower() == lower )
360 {
361 return;
362 }
363
364 mMapSettings.setZRange( QgsDoubleRange( lower, zRange.upper(), zRange.includeLower(), zRange.includeUpper() ) );
365 emit zRangeChanged();
366}
367
369{
370 const QgsDoubleRange zRange = mMapSettings.zRange();
371 return zRange.upper();
372}
373
374void QgsQuickMapSettings::setZRangeUpper( const double &upper )
375{
376 const QgsDoubleRange zRange = mMapSettings.zRange();
377 if ( zRange.upper() == upper )
378 {
379 return;
380 }
381
382 mMapSettings.setZRange( QgsDoubleRange( zRange.lower(), upper, zRange.includeLower(), zRange.includeUpper() ) );
383 emit zRangeChanged();
384}
This class represents a coordinate reference system (CRS).
Contains information about the context in which a coordinate transform is executed.
QgsRange which stores a range of double values.
Definition qgsrange.h:231
Base class for all map layer types.
Definition qgsmaplayer.h:76
virtual QgsRectangle extent() const
Returns the extent of the layer.
The QgsMapSettings class contains configuration for rendering of the map.
void setElevationShadingRenderer(const QgsElevationShadingRenderer &renderer)
Sets the shading renderer used to render shading on the entire map.
QgsPointXY layerToMapCoordinates(const QgsMapLayer *layer, QgsPointXY point) const
transform point coordinates from layer's CRS to output CRS
QList< QgsMapLayer * > layers(bool expandGroupLayers=false) const
Returns the list of layers which will be rendered in the map.
void setLayers(const QList< QgsMapLayer * > &layers)
Sets the list of layers to render in the map.
QgsDoubleRange zRange() const
Returns the range of z-values which will be visible in the map.
void setZRange(const QgsDoubleRange &range)
Sets the range of z-values which will be visible in the map.
QColor backgroundColor() const
Returns the background color of the map.
void setOutputDpi(double dpi)
Sets the dpi (dots per inch) used for conversion between real world units (e.g.
const QgsMapToPixel & mapToPixel() const
double mapUnitsPerPixel() const
Returns the distance in geographical coordinates that equals to one pixel in the map.
QSize outputSize() const
Returns the size of the resulting map image, in pixels.
QgsRectangle extent() const
Returns geographical coordinates of the rectangle that should be rendered.
void setExtent(const QgsRectangle &rect, bool magnified=true)
Sets the coordinates of the rectangle which should be rendered.
QgsRectangle visibleExtent() const
Returns the actual extent derived from requested extent that takes output image size into account.
void setTransformContext(const QgsCoordinateTransformContext &context)
Sets the coordinate transform context, which stores various information regarding which datum transfo...
void setRotation(double rotation)
Sets the rotation of the resulting map image, in degrees clockwise.
void setPathResolver(const QgsPathResolver &resolver)
Sets the path resolver for conversion between relative and absolute paths during rendering operations...
double outputDpi() const
Returns the DPI (dots per inch) used for conversion between real world units (e.g.
double rotation() const
Returns the rotation of the resulting map image, in degrees clockwise.
void setOutputSize(QSize size)
Sets the size of the resulting map image, in pixels.
void setBackgroundColor(const QColor &color)
Sets the background color of the map.
QgsCoordinateReferenceSystem destinationCrs() const
Returns the destination coordinate reference system for the map render.
void setDestinationCrs(const QgsCoordinateReferenceSystem &crs)
Sets the destination crs (coordinate reference system) for the map render.
void readXml(QDomNode &node)
Restore the map settings from a XML node.
QgsCoordinateTransformContext transformContext() const
Returns the coordinate transform context, which stores various information regarding which datum tran...
QgsPointXY toMapCoordinates(int x, int y) const
Transforms device coordinates to map (world) coordinates.
QgsPointXY transform(const QgsPointXY &p) const
Transforms a point p from map (world) coordinates to device coordinates.
static void logMessage(const QString &message, const QString &tag=QString(), Qgis::MessageLevel level=Qgis::MessageLevel::Warning, bool notifyUser=true)
Adds a message to the log instance (and creates it if necessary).
A class to represent a 2D point.
Definition qgspointxy.h:60
void setY(double y)
Sets the y value of the point.
Definition qgspointxy.h:129
double y
Definition qgspointxy.h:64
double x
Definition qgspointxy.h:63
void setX(double x)
Sets the x value of the point.
Definition qgspointxy.h:119
QPointF toQPointF() const
Converts a point to a QPointF.
Definition qgspointxy.h:165
Point geometry type, with support for z-dimension and m-values.
Definition qgspoint.h:49
double x
Definition qgspoint.h:52
double y
Definition qgspoint.h:53
QgsReferencedRectangle fullExtent() const
Returns the full extent of the project, which represents the maximal limits of the project.
Encapsulates a QGIS project, including sets of map layers and their styles, layouts,...
Definition qgsproject.h:107
int readNumEntry(const QString &scope, const QString &key, int def=0, bool *ok=nullptr) const
Reads an integer from the specified scope and key.
static QgsProject * instance()
Returns the QgsProject singleton instance.
QgsPathResolver pathResolver() const
Returns path resolver object with considering whether the project uses absolute or relative paths and...
void crsChanged()
Emitted when the crs() of the project has changed.
QString readEntry(const QString &scope, const QString &key, const QString &def=QString(), bool *ok=nullptr) const
Reads a string from the specified scope and key.
QgsCoordinateTransformContext transformContext
Definition qgsproject.h:113
QgsElevationShadingRenderer elevationShadingRenderer() const
Returns the elevation shading renderer used for map shading.
QgsCoordinateReferenceSystem crs
Definition qgsproject.h:112
void readProject(const QDomDocument &document)
Emitted when a project is being read.
const QgsProjectViewSettings * viewSettings() const
Returns the project's view settings, which contains settings and properties relating to how a QgsProj...
double outputDpi
Output DPI used for conversion between real world units (e.g.
void setIsTemporal(bool temporal)
Returns true if a temporal filtering is enabled.
QgsQuickMapSettings(QObject *parent=nullptr)
Create new map settings.
void setOutputSize(QSize outputSize)
Sets the size of the resulting map image, in pixels.
void setRotation(double rotation)
The rotation of the resulting map image, in degrees clockwise.
void setTransformContext(const QgsCoordinateTransformContext &context)
Sets the coordinate transform context, which stores various information regarding which datum transfo...
void extentChanged()
Geographical coordinates of the rectangle that should be rendered.
double rotation
The rotation of the resulting map image, in degrees clockwise.
QgsRectangle extent
Geographical coordinates of the rectangle that should be rendered.
void outputSizeChanged()
The size of the resulting map image.
double zRangeLower
The Z range's lower value (since QGIS 3.38)
QDateTime temporalBegin
The temporal range's begin (i.e.
void projectChanged()
A project property should be used as a primary source of project all other components in the applicat...
Q_INVOKABLE QgsCoordinateTransformContext transformContext() const
Returns the coordinate transform context, which stores various information regarding which datum tran...
bool isTemporal
Returns true if a temporal filtering is enabled.
QgsRectangle visibleExtent
Returns the actual extent derived from requested extent that takes output image size into account.
void outputDpiChanged()
Output DPI used for conversion between real world units (e.g.
void layersChanged()
Set list of layers for map rendering.
void destinationCrsChanged()
CRS of destination coordinate reference system.
void visibleExtentChanged()
Returns the actual extent derived from requested extent that takes output image size into account.
void temporalStateChanged()
Emitted when the temporal state has changed.
void setExtent(const QgsRectangle &extent)
Sets the coordinates of the rectangle which should be rendered.
Q_INVOKABLE QgsPoint screenToCoordinate(const QPointF &point) const
Convert a screen coordinate to a map coordinate.
Q_INVOKABLE void setCenter(const QgsPoint &center)
Move current map extent to have center point defined by center.
void devicePixelRatioChanged()
Returns the ratio between physical pixels and device-independent pixels.
double zRangeUpper
The Z range's upper value (since QGIS 3.38)
void setZRangeUpper(const double &upper)
The Z range's lower value (since QGIS 3.38)
QColor backgroundColor
The background color used to render the map.
double mapUnitsPerPixel
Returns the distance in geographical coordinates that equals to one pixel in the map.
void setDevicePixelRatio(const qreal &devicePixelRatio)
Sets the ratio between physical pixels and device-independent pixels.
double mapUnitsPerPoint
Returns the distance in geographical coordinates that equals to one point unit in the map.
QgsMapSettings mapSettings() const
Clone map settings.
void setProject(QgsProject *project)
A project property should be used as a primary source of project all other components in the applicat...
void mapUnitsPerPixelChanged()
Returns the distance in geographical coordinates that equals to one pixel in the map.
void setZRangeLower(const double &lower)
The Z range's lower value (since QGIS 3.38)
void setOutputDpi(double outputDpi)
Sets the dpi (dots per inch) used for conversion between real world units (e.g.
qreal devicePixelRatio() const
Returns the ratio between physical pixels and device-independent pixels.
void setLayers(const QList< QgsMapLayer * > &layers)
Sets the list of layers to render in the map.
Q_INVOKABLE void setCenterToLayer(QgsMapLayer *layer, bool shouldZoom=true)
Move current map extent to have center point defined by layer. Optionally only pan to the layer if sh...
QgsCoordinateReferenceSystem destinationCrs
CRS of destination coordinate reference system.
QDateTime temporalEnd
The temporal range's end (i.e.
QList< QgsMapLayer * > layers
Set list of layers for map rendering.
void setDestinationCrs(const QgsCoordinateReferenceSystem &destinationCrs)
Sets the destination crs (coordinate reference system) for the map render.
QSize outputSize
The size of the resulting map image.
void backgroundColorChanged()
The background color used to render the map.
void setTemporalEnd(const QDateTime &end)
The temporal range's end (i.e.
void zRangeChanged()
Emitted when the Z range has changed.
void rotationChanged()
The rotation of the resulting map image, in degrees clockwise.
Q_INVOKABLE QPointF coordinateToScreen(const QgsPoint &point) const
Convert a map coordinate to screen pixel coordinates.
QgsPoint center
Geographical coordinate representing the center point of the current extent.
void setTemporalBegin(const QDateTime &begin)
The temporal range's begin (i.e.
QgsProject * project
A project property should be used as a primary source of project all other components in the applicat...
void setBackgroundColor(const QColor &color)
The background color used to render the map.
bool includeUpper() const
Returns true if the upper bound is inclusive, or false if the upper bound is exclusive.
Definition qgsrange.h:101
T lower() const
Returns the lower bound of the range.
Definition qgsrange.h:78
bool includeLower() const
Returns true if the lower bound is inclusive, or false if the lower bound is exclusive.
Definition qgsrange.h:93
T upper() const
Returns the upper bound of the range.
Definition qgsrange.h:85
A rectangle specified with double values.
double xMinimum() const
Returns the x minimum value (left side of rectangle).
void setYMinimum(double y)
Set the minimum y value.
double yMinimum() const
Returns the y minimum value (bottom side of rectangle).
void setXMinimum(double x)
Set the minimum x value.
double xMaximum() const
Returns the x maximum value (right side of rectangle).
double yMaximum() const
Returns the y maximum value (top side of rectangle).
void setYMaximum(double y)
Set the maximum y value.
QgsPointXY center() const
Returns the center point of the rectangle.
void setXMaximum(double x)
Set the maximum x value.
bool isEmpty() const
Returns true if the rectangle has no area.
const QgsDateTimeRange & temporalRange() const
Returns the datetime range for the object.
bool isTemporal() const
Returns true if the object's temporal range is enabled, and the object will be filtered when renderin...
void setIsTemporal(bool enabled)
Sets whether the temporal range is enabled (i.e.
void setTemporalRange(const QgsDateTimeRange &range)
Sets the temporal range for the object.
T begin() const
Returns the beginning of the range.
Definition qgsrange.h:444
T end() const
Returns the upper bound of the range.
Definition qgsrange.h:451
A class to represent a vector.
Definition qgsvector.h:30
double y() const
Returns the vector's y-component.
Definition qgsvector.h:152
double x() const
Returns the vector's x-component.
Definition qgsvector.h:143
bool qgsDoubleNear(double a, double b, double epsilon=4 *std::numeric_limits< double >::epsilon())
Compare two doubles (but allow some difference)
Definition qgis.h:5917
QgsTemporalRange< QDateTime > QgsDateTimeRange
QgsRange which stores a range of date times.
Definition qgsrange.h:742