QGIS API Documentation  3.18.1-Zürich (202f1bf7e5)
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 "qgsmaplayer.h"
19 #include "qgsmessagelog.h"
20 #include "qgsproject.h"
21 #include "qgis.h"
22 
23 #include "qgsquickmapsettings.h"
24 
26  : QObject( parent )
27 {
28  // Connect signals for derived values
35 }
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  setDestinationCrs( mProject->crs() );
55  mMapSettings.setTransformContext( mProject->transformContext() );
56  }
57  else
58  {
60  }
61 
62  emit projectChanged();
63 }
64 
66 {
67  return mProject;
68 }
69 
71 {
72  return mMapSettings.transformContext();
73 }
74 
76 {
77  return mMapSettings.extent();
78 }
79 
81 {
82  if ( mMapSettings.extent() == extent )
83  return;
84 
85  mMapSettings.setExtent( extent );
86  emit extentChanged();
87 }
88 
90 {
91  QgsVector delta = QgsPointXY( center ) - mMapSettings.extent().center();
92 
93  QgsRectangle e = mMapSettings.extent();
94  e.setXMinimum( e.xMinimum() + delta.x() );
95  e.setXMaximum( e.xMaximum() + delta.x() );
96  e.setYMinimum( e.yMinimum() + delta.y() );
97  e.setYMaximum( e.yMaximum() + delta.y() );
98 
99  setExtent( e );
100 }
101 
103 {
104  return mMapSettings.mapUnitsPerPixel();
105 }
106 
108 {
109  return mMapSettings.visibleExtent();
110 }
111 
113 {
114  QgsPointXY pt( point.x(), point.y() );
115  QgsPointXY pp = mMapSettings.mapToPixel().transform( pt );
116  return pp.toQPointF();
117 }
118 
120 {
121  // use floating point precision with mapToCoordinates (i.e. do not use QPointF::toPoint)
122  // this is to avoid rounding errors with an odd screen width or height
123  // and the point being set to the exact center of it
124  const QgsPointXY pp = mMapSettings.mapToPixel().toMapCoordinates( point.x(), point.y() );
125  return QgsPoint( pp );
126 }
127 
129 {
130  return mMapSettings;
131 }
132 
134 {
135  mMapSettings.setTransformContext( ctx );
136 }
137 
139 {
140  return mMapSettings.outputSize();
141 }
142 
143 void QgsQuickMapSettings::setOutputSize( const QSize &outputSize )
144 {
145  if ( mMapSettings.outputSize() == outputSize )
146  return;
147 
148  mMapSettings.setOutputSize( outputSize );
149  emit outputSizeChanged();
150 }
151 
153 {
154  return mMapSettings.outputDpi();
155 }
156 
157 void QgsQuickMapSettings::setOutputDpi( double outputDpi )
158 {
159  if ( qgsDoubleNear( mMapSettings.outputDpi(), outputDpi ) )
160  return;
161 
162  mMapSettings.setOutputDpi( outputDpi );
163  emit outputDpiChanged();
164 }
165 
167 {
168  return mMapSettings.destinationCrs();
169 }
170 
172 {
173  if ( mMapSettings.destinationCrs() == destinationCrs )
174  return;
175 
176  mMapSettings.setDestinationCrs( destinationCrs );
177  emit destinationCrsChanged();
178 }
179 
180 QList<QgsMapLayer *> QgsQuickMapSettings::layers() const
181 {
182  return mMapSettings.layers();
183 }
184 
185 void QgsQuickMapSettings::setLayers( const QList<QgsMapLayer *> &layers )
186 {
187  mMapSettings.setLayers( layers );
188  emit layersChanged();
189 }
190 
191 void QgsQuickMapSettings::onReadProject( const QDomDocument &doc )
192 {
193  if ( mProject )
194  {
195  mMapSettings.setBackgroundColor( mProject->backgroundColor() );
196  }
197 
198  QDomNodeList nodes = doc.elementsByTagName( "mapcanvas" );
199  if ( nodes.count() )
200  {
201  QDomNode node = nodes.item( 0 );
202 
203  mMapSettings.readXml( node );
204 
205  if ( !qgsDoubleNear( mMapSettings.rotation(), 0 ) )
206  QgsMessageLog::logMessage( tr( "Map Canvas rotation is not supported. Resetting from %1 to 0." ).arg( mMapSettings.rotation() ) );
207 
208  mMapSettings.setRotation( 0 );
209 
210  emit extentChanged();
211  emit destinationCrsChanged();
212  emit outputSizeChanged();
213  emit outputDpiChanged();
214  emit layersChanged();
215  }
216 }
217 
219 {
220  return mMapSettings.rotation();
221 }
222 
223 void QgsQuickMapSettings::setRotation( double rotation )
224 {
225  if ( !qgsDoubleNear( rotation, 0 ) )
226  QgsMessageLog::logMessage( tr( "Map Canvas rotation is not supported. Resetting from %1 to 0." ).arg( rotation ) );
227 }
228 
230 {
231  return mMapSettings.backgroundColor();
232 }
233 
234 void QgsQuickMapSettings::setBackgroundColor( const QColor &color )
235 {
236  if ( mMapSettings.backgroundColor() == color )
237  return;
238 
239  mMapSettings.setBackgroundColor( color );
240  emit backgroundColorChanged();
241 }
This class represents a coordinate reference system (CRS).
Contains information about the context in which a coordinate transform is executed.
The QgsMapSettings class contains configuration for rendering of the map.
void setLayers(const QList< QgsMapLayer * > &layers)
Sets the list of layers to render 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.
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.
const QgsMapToPixel & mapToPixel() const
QgsRectangle visibleExtent() const
Returns the actual extent derived from requested extent that takes takes output image size into accou...
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.
QList< QgsMapLayer * > layers() const
Returns the list of layers which will be rendered in the map.
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)
QgsCoordinateTransformContext transformContext() const
Returns the coordinate transform context, which stores various information regarding which datum tran...
QgsPointXY toMapCoordinates(int x, int y) const
Transform device coordinates to map (world) coordinates.
QgsPointXY transform(const QgsPointXY &p) const
Transform the point p from map (world) coordinates to device coordinates.
Definition: qgsmaptopixel.h:82
static void logMessage(const QString &message, const QString &tag=QString(), Qgis::MessageLevel level=Qgis::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:44
QPointF toQPointF() const
Converts a point to a QPointF.
Definition: qgspointxy.h:154
Point geometry type, with support for z-dimension and m-values.
Definition: qgspoint.h:38
Q_GADGET double x
Definition: qgspoint.h:41
double y
Definition: qgspoint.h:42
Encapsulates a QGIS project, including sets of map layers and their styles, layouts,...
Definition: qgsproject.h:99
QgsCoordinateTransformContext transformContext
Definition: qgsproject.h:105
void readProject(const QDomDocument &)
Emitted when a project is being read.
QgsCoordinateReferenceSystem crs
Definition: qgsproject.h:104
QColor backgroundColor
Definition: qgsproject.h:113
double outputDpi
Output DPI used for conversion between real world units (e.g.
QgsQuickMapSettings(QObject *parent=nullptr)
Create new map settings.
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.
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...
QgsRectangle visibleExtent
Returns the actual extent derived from requested extent that takes takes output image size into accou...
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 takes output image size into accou...
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.
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.
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 setOutputDpi(double outputDpi)
Sets the dpi (dots per inch) used for conversion between real world units (e.g.
void setLayers(const QList< QgsMapLayer * > &layers)
Sets the list of layers to render in the map.
QgsCoordinateReferenceSystem destinationCrs
CRS of destination coordinate reference system.
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.
void setOutputSize(const QSize &outputSize)
Sets the size of the resulting map image, in pixels.
QSize outputSize
The size of the resulting map image.
void backgroundColorChanged()
The background color used to render the map.
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.
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.
A rectangle specified with double values.
Definition: qgsrectangle.h:42
double yMaximum() const SIP_HOLDGIL
Returns the y maximum value (top side of rectangle).
Definition: qgsrectangle.h:172
double xMaximum() const SIP_HOLDGIL
Returns the x maximum value (right side of rectangle).
Definition: qgsrectangle.h:162
double xMinimum() const SIP_HOLDGIL
Returns the x minimum value (left side of rectangle).
Definition: qgsrectangle.h:167
double yMinimum() const SIP_HOLDGIL
Returns the y minimum value (bottom side of rectangle).
Definition: qgsrectangle.h:177
void setYMinimum(double y) SIP_HOLDGIL
Set the minimum y value.
Definition: qgsrectangle.h:140
void setXMaximum(double x) SIP_HOLDGIL
Set the maximum x value.
Definition: qgsrectangle.h:135
void setXMinimum(double x) SIP_HOLDGIL
Set the minimum x value.
Definition: qgsrectangle.h:130
void setYMaximum(double y) SIP_HOLDGIL
Set the maximum y value.
Definition: qgsrectangle.h:145
QgsPointXY center() const SIP_HOLDGIL
Returns the center point of the rectangle.
Definition: qgsrectangle.h:230
A class to represent a vector.
Definition: qgsvector.h:30
double y() const SIP_HOLDGIL
Returns the vector's y-component.
Definition: qgsvector.h:156
double x() const SIP_HOLDGIL
Returns the vector's x-component.
Definition: qgsvector.h:147
bool qgsDoubleNear(double a, double b, double epsilon=4 *std::numeric_limits< double >::epsilon())
Compare two doubles (but allow some difference)
Definition: qgis.h:316