SWMMVis  6.0.0-alpha.4
Qt6/C++ GIS-based graphical user interface for the SWMMVis engine (6.0.0-alpha.4)
Loading...
Searching...
No Matches
wmslayer.h
Go to the documentation of this file.
1
10#ifndef WMSLAYER_H
11#define WMSLAYER_H
12
15
16#include <QImage>
17#include <QList>
18#include <QMap>
19#include <QNetworkAccessManager>
20#include <QNetworkReply>
21#include <QString>
22#include <QUrl>
23
26class RasterTileItem;
27
33{
34 QString name;
35 QString title;
36 QString abstractText;
37 QStringList crsIdentifiers;
38 QStringList styles;
40 bool queryable = false;
41};
42
48{
49 QString title;
50 QString abstractText;
51 QString version;
52 QStringList imageFormats;
53 QList<WMSLayerInfo> layers;
54};
55
70{
71 Q_OBJECT
72
73 Q_PROPERTY(QUrl serviceUrl READ serviceUrl CONSTANT)
74 Q_PROPERTY(QString wmsVersion READ wmsVersion NOTIFY wmsVersionChanged)
77 Q_PROPERTY(QString activeStyle READ activeStyle WRITE setActiveStyle
78 NOTIFY activeStyleChanged)
79 Q_PROPERTY(QString imageFormat READ imageFormat WRITE setImageFormat
80 NOTIFY imageFormatChanged)
81 Q_PROPERTY(bool transparent READ isTransparent WRITE setTransparent
82 NOTIFY transparentChanged)
83
84public:
85
92 explicit WMSLayer(const QUrl &serviceUrl,
93 OpenSWMMVisWorkspace *parent = nullptr);
94
95 ~WMSLayer() override;
96
97 // ----- Service metadata -----------------------------------------------
98
99 [[nodiscard]] QUrl serviceUrl() const;
100 [[nodiscard]] QString wmsVersion() const;
101 [[nodiscard]] WMSServiceInfo serviceInfo() const;
102 [[nodiscard]] bool capabilitiesReady() const;
103
104 [[nodiscard]] QString sourceDescription() const override
105 { return serviceUrl().toString(); }
106
111 void fetchCapabilities();
112
119 void setServiceInfo(const WMSServiceInfo &info);
120
121 // ----- Active layer / style -------------------------------------------
122
123 [[nodiscard]] QString activeLayerName() const;
124 void setActiveLayerName(const QString &layerName);
125
126 [[nodiscard]] QString activeStyle() const;
127 void setActiveStyle(const QString &style);
128
129 // ----- Request parameters ---------------------------------------------
130
131 [[nodiscard]] QString imageFormat() const;
132 void setImageFormat(const QString &fmt);
134 [[nodiscard]] QString crs() const;
135 void setCrs(const QString &crs);
137 [[nodiscard]] int dpiMode() const;
138 void setDpiMode(int mode);
140 [[nodiscard]] QString capabilitiesUrl() const { return m_serviceUrl.toString(); }
141
142 [[nodiscard]] bool isTransparent() const;
143 void setTransparent(bool transparent);
144
148 [[nodiscard]] QMap<QString, QString> extraParams() const;
149 void setExtraParams(const QMap<QString, QString> &params);
150
151 // ----- OpenSWMMVisLayer interface -----------------------------------------
152
153 [[nodiscard]] bool isRasterLayer() const override { return true; }
154
155 void fetchCache(const MapExtent &extent,
156 const QSize &viewportSize,
157 const SpatialReferenceSystem *srs) override;
158
159 void render(QPainter *painter,
160 const MapExtent &extent,
161 const QSize &imageSize,
162 const SpatialReferenceSystem *srs) override;
163
164 void populateScene(QGraphicsScene *scene,
165 const MapExtent &canvasExtent,
166 const SpatialReferenceSystem *canvasSRS) override;
167
168 void depopulateScene(QGraphicsScene *scene) override;
169
170 void refreshScene(QGraphicsScene *scene,
171 const MapExtent &canvasExtent,
172 const SpatialReferenceSystem *canvasSRS) override;
173
174 void onCanvasCRSChanged(const SpatialReferenceSystem *newCanvasSRS) override;
175
177 [[nodiscard]] const OpenSWMM::Render::BasemapRenderParams &basemapRenderParams() const { return m_renderParams; }
179
180signals:
185
189 void capabilitiesError(const QString &errorMessage);
190
194 void tileReady();
195
196 void wmsVersionChanged(const QString &version);
197 void activeLayerNameChanged(const QString &name);
198 void activeStyleChanged(const QString &style);
199 void imageFormatChanged(const QString &fmt);
201
204
205private slots:
206 void onCapabilitiesReply(QNetworkReply *reply);
207 void onGetMapReply(QNetworkReply *reply);
208
209private:
210 [[nodiscard]] QUrl buildGetMapUrl(const MapExtent &ext,
212 int w, int h) const;
213
214 void parseCapabilities(const QByteArray &xml);
215 void requestTile(const MapExtent &trackingExt,
216 const MapExtent &requestExt,
217 const SpatialReferenceSystem *requestSrs,
218 int w, int h);
219 void invalidateCache();
224 void applyExtentFromActiveLayer();
225
226 QUrl m_serviceUrl;
227 QString m_wmsVersion = "1.3.0";
228 QString m_activeLayer;
229 QString m_activeStyle;
230 QString m_imageFormat = "image/png";
231 QString m_crs = "EPSG:3857";
232 int m_dpiMode = 7;
233 bool m_transparent = true;
234 QMap<QString, QString> m_extraParams;
235 WMSServiceInfo m_serviceInfo;
236 bool m_capsReady = false;
237
238 QNetworkAccessManager *m_nam = nullptr;
239 QNetworkReply *m_pendingReply = nullptr;
241 // Tile cache — extent/size describe the image already in m_cachedTile
242 QImage m_cachedTile;
244 MapExtent m_cacheExtent;
245 int m_cacheWidth = 0;
246 int m_cacheHeight = 0;
247
248 // In-flight request metadata — NOT committed to m_cache* until the reply arrives
249 MapExtent m_requestedExtent;
250 int m_requestedWidth = 0;
251 int m_requestedHeight = 0;
252
253 // Persistent scene item (kept visible as placeholder until new tile arrives)
254 RasterTileItem *m_sceneItem = nullptr;
255};
256
257Q_DECLARE_METATYPE(WMSLayer *)
258Q_DECLARE_METATYPE(WMSServiceInfo)
259Q_DECLARE_METATYPE(WMSLayerInfo)
260
261#endif // WMSLAYER_H
Shared visual-adjustment parameters for raster basemaps.
An axis-aligned bounding box in the coordinate space of a given CRS.
Definition mapextent.h:26
Abstract base class for all layers displayed in the MapCanvas.
Definition openswmmvislayer.h:116
QString name() const
Returns the user-visible name of this layer.
Definition openswmmvislayer.cpp:62
SpatialReferenceSystem * srs() const
Returns the spatial reference system for this layer, or nullptr if the layer has no known CRS.
Definition openswmmvislayer.cpp:201
MapExtent extent() const
Returns the layer extent in the layer's own CRS.
Definition openswmmvislayer.cpp:252
Top-level project container managing sessions, the SWMM model layer, and persistence paths for one SW...
Definition openswmmvisworkspace.h:42
Definition graphicsitems.h:300
Represents a coordinate reference system backed by a GDAL OGRSpatialReference.
Definition spatialreferencesystem.h:28
A map layer that fetches and displays images from an OGC WMS service.
Definition wmslayer.h:70
QMap< QString, QString > extraParams() const
Returns optional extra key=value pairs appended to every GetMap URL.
Definition wmslayer.cpp:245
void wmsVersionChanged(const QString &version)
int dpiMode() const
Definition wmslayer.cpp:241
void capabilitiesError(const QString &errorMessage)
Emitted when fetching capabilities fails.
void setImageFormat(const QString &fmt)
Definition wmslayer.cpp:197
void refreshScene(QGraphicsScene *scene, const MapExtent &canvasExtent, const SpatialReferenceSystem *canvasSRS) override
Smart scene refresh — updates existing items instead of destroying and recreating.
Definition wmslayer.cpp:416
void setActiveLayerName(const QString &layerName)
Definition wmslayer.cpp:162
void render(QPainter *painter, const MapExtent &extent, const QSize &imageSize, const SpatialReferenceSystem *srs) override
Renders this layer's content directly into painter.
Definition wmslayer.cpp:269
QString imageFormat
Definition wmslayer.h:80
void tileReady()
Emitted when a GetMap tile has been downloaded and is ready to paint.
bool capabilitiesReady() const
Definition wmslayer.cpp:71
void capabilitiesFetched(const WMSServiceInfo &info)
Emitted when the GetCapabilities document has been parsed successfully.
bool isTransparent() const
Definition wmslayer.cpp:207
bool isRasterLayer() const override
Returns true for layers that render into a raster buffer (WMS, WMTS, GISRaster) rather than populatin...
Definition wmslayer.h:153
void activeLayerNameChanged(const QString &name)
void setTransparent(bool transparent)
Definition wmslayer.cpp:209
void setActiveStyle(const QString &style)
Definition wmslayer.cpp:180
QString wmsVersion
Definition wmslayer.h:74
QString activeStyle
Definition wmslayer.h:78
void setDpiMode(int mode)
Definition wmslayer.cpp:243
void setServiceInfo(const WMSServiceInfo &info)
Injects an already-fetched service info (e.g. from a connection dialog) so the layer can render immed...
Definition wmslayer.cpp:73
QString activeLayerName
Definition wmslayer.h:76
QUrl serviceUrl
Definition wmslayer.h:73
QString crs() const
Definition wmslayer.cpp:219
void imageFormatChanged(const QString &fmt)
void depopulateScene(QGraphicsScene *scene) override
Removes all QGraphicsItems belonging to this layer from the scene.
Definition wmslayer.cpp:532
void fetchCapabilities()
Asynchronously fetches the GetCapabilities document.
Definition wmslayer.cpp:130
void populateScene(QGraphicsScene *scene, const MapExtent &canvasExtent, const SpatialReferenceSystem *canvasSRS) override
Creates / updates QGraphicsItems representing this layer in the scene.
Definition wmslayer.cpp:257
void setExtraParams(const QMap< QString, QString > &params)
Definition wmslayer.cpp:247
QString sourceDescription() const override
Human-readable source of this layer: a file path, a service URL, or a description for in-memory / der...
Definition wmslayer.h:104
void setCrs(const QString &crs)
Definition wmslayer.cpp:221
WMSServiceInfo serviceInfo() const
Definition wmslayer.cpp:70
void setBasemapRenderParams(const OpenSWMM::Render::BasemapRenderParams &p)
Definition wmslayer.cpp:312
const OpenSWMM::Render::BasemapRenderParams & basemapRenderParams() const
Definition wmslayer.h:177
void activeStyleChanged(const QString &style)
void basemapRenderParamsChanged()
void transparentChanged(bool transparent)
QString capabilitiesUrl() const
Definition wmslayer.h:140
void onCanvasCRSChanged(const SpatialReferenceSystem *newCanvasSRS) override
Called when the user changes the canvas CRS so layers can pre-compute any CRS-dependent transform cac...
Definition wmslayer.cpp:545
bool transparent
Definition wmslayer.h:82
void fetchCache(const MapExtent &extent, const QSize &viewportSize, const SpatialReferenceSystem *srs) override
Triggers any asynchronous (or synchronous) tile/data fetch needed to populate this layer's internal c...
Definition wmslayer.cpp:321
QGraphicsScene * scene
Definition inletdrawingview.cpp:78
QString params
Definition lidlayerdiagram.cpp:96
ArrowPlacement p
Definition linesymbollayer.cpp:27
int h
Definition mesh2dresultsexport.cpp:387
int w
Definition mesh2dresultsexport.cpp:387
QuadRegionMode mode
Resolved mode.
Definition meshgenerator.cpp:154
Abstract base class for all map layers displayed in the MapCanvas.
QVector< int > parent
union-find
Definition pslgminsize.cpp:176
Brightness / contrast / saturation / resampling for a basemap.
Definition basemaprenderparams.h:32
Describes one named layer returned by a WMS GetCapabilities response.
Definition wmslayer.h:33
QString name
Definition wmslayer.h:34
MapExtent geographicBoundingBox
Definition wmslayer.h:39
QString abstractText
Definition wmslayer.h:36
QStringList crsIdentifiers
Definition wmslayer.h:37
QString title
Definition wmslayer.h:35
bool queryable
Definition wmslayer.h:40
QStringList styles
Definition wmslayer.h:38
Metadata returned by a WMS GetCapabilities request.
Definition wmslayer.h:48
QStringList imageFormats
Definition wmslayer.h:52
QString abstractText
Definition wmslayer.h:50
QString version
Definition wmslayer.h:51
QString title
Definition wmslayer.h:49
QList< WMSLayerInfo > layers
Definition wmslayer.h:53