QGIS API Documentation  3.4.15-Madeira (e83d02e274)
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  return mMapSettings.outputSize();
136 }
137 
139 {
140  if ( mMapSettings.outputSize() == outputSize )
141  return;
142 
143  mMapSettings.setOutputSize( outputSize );
144  emit outputSizeChanged();
145 }
146 
147 double QgsQuickMapSettings::outputDpi() const
148 {
149  return mMapSettings.outputDpi();
150 }
151 
153 {
154  if ( qgsDoubleNear( mMapSettings.outputDpi(), outputDpi ) )
155  return;
156 
157  mMapSettings.setOutputDpi( outputDpi );
158  emit outputDpiChanged();
159 }
160 
162 {
163  return mMapSettings.destinationCrs();
164 }
165 
167 {
168  if ( mMapSettings.destinationCrs() == destinationCrs )
169  return;
170 
171  mMapSettings.setDestinationCrs( destinationCrs );
172  emit destinationCrsChanged();
173 }
174 
175 QList<QgsMapLayer *> QgsQuickMapSettings::layers() const
176 {
177  return mMapSettings.layers();
178 }
179 
180 void QgsQuickMapSettings::setLayers( const QList<QgsMapLayer *> &layers )
181 {
182  mMapSettings.setLayers( layers );
183  emit layersChanged();
184 }
185 
186 void QgsQuickMapSettings::onReadProject( const QDomDocument &doc )
187 {
188  QDomNodeList nodes = doc.elementsByTagName( "mapcanvas" );
189  if ( nodes.count() )
190  {
191  QDomNode node = nodes.item( 0 );
192 
193  mMapSettings.readXml( node );
194 
195  if ( !qgsDoubleNear( mMapSettings.rotation(), 0 ) )
196  QgsMessageLog::logMessage( tr( "Map Canvas rotation is not supported. Resetting from %1 to 0." ).arg( mMapSettings.rotation() ) );
197 
198  mMapSettings.setRotation( 0 );
199 
200  emit extentChanged();
201  emit destinationCrsChanged();
202  emit outputSizeChanged();
203  emit outputDpiChanged();
204  emit layersChanged();
205  }
206 }
207 
208 double QgsQuickMapSettings::rotation() const
209 {
210  return mMapSettings.rotation();
211 }
212 
214 {
215  if ( !qgsDoubleNear( rotation, 0 ) )
216  QgsMessageLog::logMessage( tr( "Map Canvas rotation is not supported. Resetting from %1 to 0." ).arg( rotation ) );
217 }
QPointF toQPointF() const
Converts a point to a QPointF.
Definition: qgspointxy.h:148
void visibleExtentChanged()
Returns the actual extent derived from requested extent that takes takes output image size into accou...
void setDestinationCrs(const QgsCoordinateReferenceSystem &crs)
sets destination coordinate reference system
A rectangle specified with double values.
Definition: qgsrectangle.h:40
void setExtent(const QgsRectangle &rect, bool magnified=true)
Set coordinates of the rectangle which should be rendered.
double y
Definition: qgspoint.h:42
QgsMapSettings mapSettings() const
Clone map settings.
void setTransformContext(const QgsCoordinateTransformContext &context)
Sets the coordinate transform context, which stores various information regarding which datum transfo...
void setXMaximum(double x)
Set the maximum x value.
Definition: qgsrectangle.h:134
double mapUnitsPerPixel() const
Returns the distance in geographical coordinates that equals to one pixel in the map.
void rotationChanged()
The rotation of the resulting map image, in degrees clockwise.
double yMaximum() const
Returns the y maximum value (top side of rectangle).
Definition: qgsrectangle.h:171
void extentChanged()
Geographical coordinates of the rectangle that should be rendered.
A class to represent a 2D point.
Definition: qgspointxy.h:43
bool qgsDoubleNear(double a, double b, double epsilon=4 *std::numeric_limits< double >::epsilon())
Compare two doubles (but allow some difference)
Definition: qgis.h:278
void setOutputDpi(double dpi)
Sets DPI used for conversion between real world units (e.g. mm) and pixels.
QgsRectangle visibleExtent() const
Returns the actual extent derived from requested extent that takes takes output image size into accou...
double y() const
Returns the vector&#39;s y-component.
Definition: qgsvector.cpp:81
const QgsMapToPixel & mapToPixel() const
QgsCoordinateReferenceSystem destinationCrs() const
returns CRS of destination coordinate reference system
QgsProject * project() const
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...
double rotation() const
Returns the rotation of the resulting map image, in degrees clockwise.
void setOutputSize(const QSize &outputSize)
Sets the size of the resulting map image.
Q_INVOKABLE QgsPoint screenToCoordinate(const QPointF &point) const
Convert a screen coordinate to a map coordinate.
QgsRectangle visibleExtent() const
Returns the actual extent derived from requested extent that takes takes output image size into accou...
QgsCoordinateTransformContext transformContext() const
Returns the coordinate transform context, which stores various information regarding which datum tran...
QgsCoordinateReferenceSystem destinationCrs() const
returns CRS of destination coordinate reference system
The QgsMapSettings class contains configuration for rendering of the map.
void outputDpiChanged()
Output DPI used for conversion between real world units (e.g.
void mapUnitsPerPixelChanged()
Returns the distance in geographical coordinates that equals to one pixel in the map.
QList< QgsMapLayer * > layers() const
Gets list of layers for map rendering The layers are stored in the reverse order of how they are rend...
void setOutputSize(QSize size)
Sets the size of the resulting map image.
QgsRectangle extent() const
Returns geographical coordinates of the rectangle that should be rendered.
void setLayers(const QList< QgsMapLayer * > &layers)
Set list of layers for map rendering.
double yMinimum() const
Returns the y minimum value (bottom side of rectangle).
Definition: qgsrectangle.h:176
QSize outputSize() const
Returns the size of the resulting map image.
double xMaximum() const
Returns the x maximum value (right side of rectangle).
Definition: qgsrectangle.h:161
QList< QgsMapLayer * > layers() const
Gets list of layers for map rendering The layers are stored in the reverse order of how they are rend...
void projectChanged()
A project property should be used as a primary source of project all other components in the applicat...
void setYMinimum(double y)
Set the minimum y value.
Definition: qgsrectangle.h:139
void setOutputDpi(double outputDpi)
Sets DPI used for conversion between real world units (e.g. mm) and pixels.
QgsCoordinateReferenceSystem crs
Definition: qgsproject.h:95
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).
void readProject(const QDomDocument &)
Emitted when a project is being read.
QgsPointXY center() const
Returns the center point of the rectangle.
Definition: qgsrectangle.h:229
double mapUnitsPerPixel() const
Returns the distance in geographical coordinates that equals to one pixel in the map.
void setRotation(double rotation)
The rotation of the resulting map image, in degrees clockwise.
Reads and writes project states.
Definition: qgsproject.h:89
void setDestinationCrs(const QgsCoordinateReferenceSystem &destinationCrs)
sets destination coordinate reference system
QgsPointXY toMapCoordinates(int x, int y) const
Transform device coordinates to map (world) coordinates.
Contains information about the context in which a coordinate transform is executed.
void destinationCrsChanged()
CRS of destination coordinate reference system.
Point geometry type, with support for z-dimension and m-values.
Definition: qgspoint.h:37
A class to represent a vector.
Definition: qgsvector.h:28
void setRotation(double rotation)
Sets the rotation of the resulting map image, in degrees clockwise.
Q_INVOKABLE void setCenter(const QgsPoint &center)
Move current map extent to have center point defined by center.
QgsCoordinateTransformContext transformContext
Definition: qgsproject.h:96
void setProject(QgsProject *project)
A project property should be used as a primary source of project all other components in the applicat...
double outputDpi() const
Returns DPI used for conversion between real world units (e.g.
void setYMaximum(double y)
Set the maximum y value.
Definition: qgsrectangle.h:144
void setExtent(const QgsRectangle &extent)
Set coordinates of the rectangle which should be rendered.
void outputSizeChanged()
The size of the resulting map image.
This class represents a coordinate reference system (CRS).
Q_INVOKABLE QPointF coordinateToScreen(const QgsPoint &point) const
Convert a map coordinate to screen pixel coordinates.
double rotation() const
The rotation of the resulting map image, in degrees clockwise.
QgsRectangle extent() const
Returns geographical coordinates of the rectangle that should be rendered.
void readXml(QDomNode &node)
double outputDpi() const
Returns DPI used for conversion between real world units (e.g.
double x() const
Returns the vector&#39;s x-component.
Definition: qgsvector.cpp:76
QgsPointXY transform(const QgsPointXY &p) const
Transform the point from map (world) coordinates to device coordinates.
double xMinimum() const
Returns the x minimum value (left side of rectangle).
Definition: qgsrectangle.h:166
QgsQuickMapSettings(QObject *parent=nullptr)
Create new map settings.
void setXMinimum(double x)
Set the minimum x value.
Definition: qgsrectangle.h:129
void layersChanged()
Set list of layers for map rendering.
QSize outputSize() const
Returns the size of the resulting map image.
void setLayers(const QList< QgsMapLayer * > &layers)
Set list of layers for map rendering.
double x
Definition: qgspoint.h:41