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 Class Reference

A map layer that fetches and displays images from an OGC WMS service. More...

#include <wmslayer.h>

Inheritance diagram for WMSLayer:
Collaboration diagram for WMSLayer:

Signals

void capabilitiesFetched (const WMSServiceInfo &info)
 Emitted when the GetCapabilities document has been parsed successfully.
 
void capabilitiesError (const QString &errorMessage)
 Emitted when fetching capabilities fails.
 
void tileReady ()
 Emitted when a GetMap tile has been downloaded and is ready to paint.
 
void wmsVersionChanged (const QString &version)
 
void activeLayerNameChanged (const QString &name)
 
void activeStyleChanged (const QString &style)
 
void imageFormatChanged (const QString &fmt)
 
void transparentChanged (bool transparent)
 
void basemapRenderParamsChanged ()
 
- Signals inherited from OpenSWMMVisLayer
void nameChanged (const QString &newName)
 
void layerTypeChanged (OpenSWMMVisLayerType newType)
 
void visibilityChanged (bool visible)
 
void opacityChanged (double opacity)
 
void srsChanged (SpatialReferenceSystem *newSRS)
 
void extentChanged (const MapExtent &newExtent)
 
void childrenChanged ()
 
void repaintRequested ()
 
void temporalSpecChanged (const OpenSWMM::Render::TemporalSpec &spec)
 
void maskSpecChanged (const OpenSWMM::Render::MaskSpec &spec)
 
void auxStorageSpecChanged (const OpenSWMM::Render::AuxiliaryStorageSpec &spec)
 
void joinsChanged (const QVector< OpenSWMM::Render::JoinSpec > &joins)
 
void diagramSpecChanged (const OpenSWMM::Render::DiagramSpec &spec)
 
void labelConfigChanged ()
 

Public Member Functions

 WMSLayer (const QUrl &serviceUrl, OpenSWMMVisWorkspace *parent=nullptr)
 Constructs a WMS layer with the given service endpoint URL.
 
 ~WMSLayer () override
 
QUrl serviceUrl () const
 
QString wmsVersion () const
 
WMSServiceInfo serviceInfo () const
 
bool capabilitiesReady () const
 
QString sourceDescription () const override
 Human-readable source of this layer: a file path, a service URL, or a description for in-memory / derived layers.
 
void fetchCapabilities ()
 Asynchronously fetches the GetCapabilities document.
 
void setServiceInfo (const WMSServiceInfo &info)
 Injects an already-fetched service info (e.g. from a connection dialog) so the layer can render immediately without a second GetCapabilities round-trip.
 
QString activeLayerName () const
 
void setActiveLayerName (const QString &layerName)
 
QString activeStyle () const
 
void setActiveStyle (const QString &style)
 
QString imageFormat () const
 
void setImageFormat (const QString &fmt)
 
QString crs () const
 
void setCrs (const QString &crs)
 
int dpiMode () const
 
void setDpiMode (int mode)
 
QString capabilitiesUrl () const
 
bool isTransparent () const
 
void setTransparent (bool transparent)
 
QMap< QString, QString > extraParams () const
 Returns optional extra key=value pairs appended to every GetMap URL.
 
void setExtraParams (const QMap< QString, QString > &params)
 
bool isRasterLayer () const override
 Returns true for layers that render into a raster buffer (WMS, WMTS, GISRaster) rather than populating QGraphicsItems.
 
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 cache for the given view state.
 
void render (QPainter *painter, const MapExtent &extent, const QSize &imageSize, const SpatialReferenceSystem *srs) override
 Renders this layer's content directly into painter.
 
void populateScene (QGraphicsScene *scene, const MapExtent &canvasExtent, const SpatialReferenceSystem *canvasSRS) override
 Creates / updates QGraphicsItems representing this layer in the scene.
 
void depopulateScene (QGraphicsScene *scene) override
 Removes all QGraphicsItems belonging to this layer from the scene.
 
void refreshScene (QGraphicsScene *scene, const MapExtent &canvasExtent, const SpatialReferenceSystem *canvasSRS) override
 Smart scene refresh — updates existing items instead of destroying and recreating.
 
void onCanvasCRSChanged (const SpatialReferenceSystem *newCanvasSRS) override
 Called when the user changes the canvas CRS so layers can pre-compute any CRS-dependent transform caches.
 
const OpenSWMM::Render::BasemapRenderParamsbasemapRenderParams () const
 
void setBasemapRenderParams (const OpenSWMM::Render::BasemapRenderParams &p)
 
- Public Member Functions inherited from OpenSWMMVisLayer
 OpenSWMMVisLayer (OpenSWMMVisWorkspace *parent)
 
 OpenSWMMVisLayer (const QString &name="Unlabeled Layer", OpenSWMMVisWorkspace *parent=nullptr)
 
virtual ~OpenSWMMVisLayer ()
 
QString layerId () const
 Returns the layer's immutable unique identifier (UUID).
 
QString name () const
 Returns the user-visible name of this layer.
 
void setName (const QString &name)
 Sets the user-visible name.
 
OpenSWMMVisLayerType layerType () const
 Returns the layer type discriminator.
 
bool isVisible () const
 Returns true when this layer should be drawn.
 
void setVisible (bool visible)
 Shows or hides this layer.
 
double opacity () const
 Returns the layer opacity in the range [0.0, 1.0]. 0.0 = fully transparent; 1.0 = fully opaque.
 
void setOpacity (double opacity)
 Sets the layer opacity. Values are clamped to [0.0, 1.0].
 
SpatialReferenceSystemsrs () const
 Returns the spatial reference system for this layer, or nullptr if the layer has no known CRS.
 
void setSRS (SpatialReferenceSystem *srs, bool ownsSRS=false)
 Sets (or replaces) the CRS for this layer.
 
QString crsDescription () const
 Returns a human-readable summary of this layer's CRS for display in the Properties window.
 
MapExtent extent () const
 Returns the layer extent in the layer's own CRS.
 
void setExtent (const MapExtent &extent)
 Sets the layer spatial extent (in the layer's CRS).
 
virtual QVector< QPair< QString, QString > > extendedMetadata () const
 Ordered key→value pairs of TYPE-SPECIFIC metadata, rendered by the Metadata tab below the common block the dialog builds itself.
 
virtual bool isBasemapLayer () const
 Returns true for world-spanning basemap layers (XYZ tile providers, WMS/WMTS services covering the whole world) that should NOT be included when computing the data-driven full extent.
 
void setViewportSize (int w, int h)
 Called by MapCanvas before refreshScene so layers can request the correct pixel dimensions for tile/image requests.
 
int viewportWidth () const
 
int viewportHeight () const
 
QVector< OpenSWMMVisLayer * > children () const
 Returns the ordered list of child layers.
 
double layerZValue () const
 Returns the z-value base assigned to this layer by the canvas. Items within the layer should use z-values relative to this.
 
virtual std::vector< std::unique_ptr< openswmmvis::ui::ILayerStyleSubject > > styleSubjects ()
 Slice U-2 — return the styleable subjects for the unified LayerStyleDialog.
 
void setLayerZValue (double z)
 Called by the canvas to set this layer's z-value band.
 
virtual OpenSWMM::Render::IFeatureRendererrenderer () const
 
virtual void setRenderer (std::unique_ptr< OpenSWMM::Render::IFeatureRenderer >)
 
virtual OpenSWMM::Render::RuleListruleList ()
 
virtual const OpenSWMM::Render::RuleListruleList () const
 
const OpenSWMM::Render::TemporalSpectemporalSpec () const
 
void setTemporalSpec (const OpenSWMM::Render::TemporalSpec &spec)
 
const OpenSWMM::Render::LabelConfiglabelConfig () const
 
virtual void setLabelConfig (const OpenSWMM::Render::LabelConfig &cfg)
 
const OpenSWMM::Render::MaskSpecmaskSpec () const
 
void setMaskSpec (const OpenSWMM::Render::MaskSpec &spec)
 
const OpenSWMM::Render::AuxiliaryStorageSpecauxStorageSpec () const
 
void setAuxStorageSpec (const OpenSWMM::Render::AuxiliaryStorageSpec &spec)
 
const QVector< OpenSWMM::Render::JoinSpec > & joins () const
 
void setJoins (const QVector< OpenSWMM::Render::JoinSpec > &joins)
 
const OpenSWMM::Render::DiagramSpecdiagramSpec () const
 
void setDiagramSpec (const OpenSWMM::Render::DiagramSpec &spec)
 
OpenSWMMVisWorkspaceworkspace () const
 
void setBasicAuth (const QString &username, const QString &password)
 Sets HTTP Basic authentication for all subsequent network requests.
 
void setHttpHeaders (const BasemapHttpHeaders &headers)
 Sets arbitrary extra HTTP headers applied to every request.
 
BasemapHttpHeaders httpHeaders () const
 

Properties

QUrl serviceUrl
 
QString wmsVersion
 
QString activeLayerName
 
QString activeStyle
 
QString imageFormat
 
bool transparent
 
- Properties inherited from OpenSWMMVisLayer
QString Name
 
bool Visible
 
double Opacity
 
QString LayerId
 
OpenSWMMVisLayerType LayerType
 
QVector< OpenSWMMVisLayer * > Children
 
QString CRS
 

Additional Inherited Members

- Public Types inherited from OpenSWMMVisLayer
enum  OpenSWMMVisLayerType {
  SWMMDefaultLayer = 0 ,
  SWMMModelLayer = 1 ,
  SWMMResultsLayer = 2 ,
  SWMMGISLayer = 3 ,
  SWMMVectorLayer = 4 ,
  SWMMRasterLayer = 5 ,
  SWMMImageryLayer = 6 ,
  SWMMTabularDataLayer = 7 ,
  SWMMTabularyTimeSeriesLayer = 8 ,
  SWMMSubProjectLayer = 9 ,
  SWMMWMSLayer = 10 ,
  SWMMWMTSLayer = 11 ,
  SWMM2DMeshLayer = 12 ,
  SWMM2DResultsLayer = 13 ,
  SWMMAnnotationLayer = 14 ,
  SWMMFeatureLayer = 15
}
 Discriminator for the concrete layer class. More...
 
- Protected Member Functions inherited from OpenSWMMVisLayer
bool addChild (OpenSWMMVisLayer *child)
 
bool removeChild (OpenSWMMVisLayer *child)
 
void setLayerType (OpenSWMMVisLayerType type)
 
- Protected Attributes inherited from OpenSWMMVisLayer
QByteArray m_authHeader
 "Basic <base64>" or empty
 
BasemapHttpHeaders m_httpHeaders
 arbitrary headers (incl. "referer")
 

Detailed Description

A map layer that fetches and displays images from an OGC WMS service.

Implements the OGC Web Map Service protocol (versions 1.1.1 and 1.3.0) using Qt's QNetworkAccessManager. No QGIS dependency is required.

On each render pass the layer issues a GetMap request matching the current canvas extent, CRS, and pixel dimensions. The response image is cached and painted until a new extent is set.

Before adding a WMSLayer to a canvas, call fetchCapabilities() and wait for capabilitiesFetched() to retrieve the list of available layers.

Constructor & Destructor Documentation

◆ WMSLayer()

WMSLayer::WMSLayer ( const QUrl &  serviceUrl,
OpenSWMMVisWorkspace parent = nullptr 
)
explicit

Constructs a WMS layer with the given service endpoint URL.

Parameters
serviceUrlBase URL of the WMS service, e.g. "https://example.org/wms?SERVICE=WMS".
parentQt parent object.
Here is the call graph for this function:

◆ ~WMSLayer()

WMSLayer::~WMSLayer ( )
override

Member Function Documentation

◆ activeLayerName()

QString WMSLayer::activeLayerName ( ) const

◆ activeLayerNameChanged

void WMSLayer::activeLayerNameChanged ( const QString &  name)
signal
Here is the caller graph for this function:

◆ activeStyle()

QString WMSLayer::activeStyle ( ) const

◆ activeStyleChanged

void WMSLayer::activeStyleChanged ( const QString &  style)
signal
Here is the caller graph for this function:

◆ basemapRenderParams()

const OpenSWMM::Render::BasemapRenderParams & WMSLayer::basemapRenderParams ( ) const
inline

Slice X.22 — shared basemap render adjustments.

◆ basemapRenderParamsChanged

void WMSLayer::basemapRenderParamsChanged ( )
signal

Slice X.22 — basemap render adjustments updated.

Here is the caller graph for this function:

◆ capabilitiesError

void WMSLayer::capabilitiesError ( const QString &  errorMessage)
signal

Emitted when fetching capabilities fails.

◆ capabilitiesFetched

void WMSLayer::capabilitiesFetched ( const WMSServiceInfo info)
signal

Emitted when the GetCapabilities document has been parsed successfully.

Here is the caller graph for this function:

◆ capabilitiesReady()

bool WMSLayer::capabilitiesReady ( ) const

◆ capabilitiesUrl()

QString WMSLayer::capabilitiesUrl ( ) const
inline

◆ crs()

QString WMSLayer::crs ( ) const
Here is the caller graph for this function:

◆ depopulateScene()

void WMSLayer::depopulateScene ( QGraphicsScene *  scene)
overridevirtual

Removes all QGraphicsItems belonging to this layer from the scene.

Reimplemented from OpenSWMMVisLayer.

◆ dpiMode()

int WMSLayer::dpiMode ( ) const

◆ extraParams()

QMap< QString, QString > WMSLayer::extraParams ( ) const

Returns optional extra key=value pairs appended to every GetMap URL.

◆ fetchCache()

void WMSLayer::fetchCache ( const MapExtent extent,
const QSize &  viewportSize,
const SpatialReferenceSystem srs 
)
overridevirtual

Triggers any asynchronous (or synchronous) tile/data fetch needed to populate this layer's internal cache for the given view state.

Called by MapCanvas::refreshLayerItems() for every visible raster layer BEFORE the MapRenderJob is started. This decouples tile-requesting (potentially async HTTP) from tile-drawing (synchronous, in the background render thread).

  • WMSLayer: issues a GetMap HTTP request if the cached tile is stale, then returns immediately. When the reply arrives the layer emits repaintRequested() to trigger another render pass.
  • WMTSLayer: fires fetchTileIfNeeded() for every tile that covers the current viewport; already-cached tiles are skipped.
  • GISRasterLayer: runs GDALWarp synchronously (fast for local files) if the cache is stale.

The default implementation is a no-op.

Parameters
extentVisible geographic extent in canvas-CRS coordinates.
viewportSizePixel dimensions of the viewport.
srsCanvas CRS.

Reimplemented from OpenSWMMVisLayer.

Here is the call graph for this function:

◆ fetchCapabilities()

void WMSLayer::fetchCapabilities ( )

Asynchronously fetches the GetCapabilities document.

Emits capabilitiesFetched() on success or capabilitiesError() on failure.

◆ imageFormat()

QString WMSLayer::imageFormat ( ) const

◆ imageFormatChanged

void WMSLayer::imageFormatChanged ( const QString &  fmt)
signal
Here is the caller graph for this function:

◆ isRasterLayer()

bool WMSLayer::isRasterLayer ( ) const
inlineoverridevirtual

Returns true for layers that render into a raster buffer (WMS, WMTS, GISRaster) rather than populating QGraphicsItems.

The MapCanvas uses this to decide whether a layer participates in the background render job or in the QGraphicsScene overlay.

Reimplemented from OpenSWMMVisLayer.

◆ isTransparent()

bool WMSLayer::isTransparent ( ) const

◆ onCanvasCRSChanged()

void WMSLayer::onCanvasCRSChanged ( const SpatialReferenceSystem newCanvasSRS)
overridevirtual

Called when the user changes the canvas CRS so layers can pre-compute any CRS-dependent transform caches.

Parameters
newCanvasSRSThe new canvas CRS.

Reimplemented from OpenSWMMVisLayer.

◆ populateScene()

void WMSLayer::populateScene ( QGraphicsScene *  scene,
const MapExtent canvasExtent,
const SpatialReferenceSystem canvasSRS 
)
overridevirtual

Creates / updates QGraphicsItems representing this layer in the scene.

Derived classes override this to add their items to the scene. Items should be created in scene coordinates (= map CRS coordinates) after reprojecting from the layer's native CRS.

Called by the MapCanvas when:

  • The layer is first added.
  • The canvas CRS changes (after onCanvasCRSChanged).
  • The layer data changes (model loaded, tile fetched, etc.).
Parameters
sceneThe shared OpenSWMMVisScene to add items to.
canvasExtentVisible extent in canvas-CRS coordinates.
canvasSRSThe CRS currently used by the MapCanvas.

Implements OpenSWMMVisLayer.

Here is the call graph for this function:

◆ refreshScene()

void WMSLayer::refreshScene ( QGraphicsScene *  scene,
const MapExtent canvasExtent,
const SpatialReferenceSystem canvasSRS 
)
overridevirtual

Smart scene refresh — updates existing items instead of destroying and recreating.

Override in subclasses to provide efficient incremental updates. The default implementation calls depopulateScene() then populateScene(), which is backward-compatible but causes flicker for raster/tile layers.

Raster/WMS layers should override to keep persistent scene items and update them in-place. Vector layers should override to skip rebuilding when only the view extent has changed (items are already in scene coords).

Reimplemented from OpenSWMMVisLayer.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ render()

void WMSLayer::render ( QPainter *  painter,
const MapExtent extent,
const QSize &  imageSize,
const SpatialReferenceSystem srs 
)
overridevirtual

Renders this layer's content directly into painter.

Called by the background MapRenderJob for raster layers. The painter is backed by a QImage of imageSize pixels spanning the geographic area described by extent in CRS srs. Pixel (0,0) maps to (extent.xMin, extent.yMax).

The default implementation is a no-op. Raster layer subclasses (WMS, WMTS, GISRaster) override this to paint their cached tile/image data without touching QGraphicsScene.

Parameters
painterTarget painter (backed by viewport-sized QImage).
extentVisible geographic extent in canvas-CRS coordinates.
imageSizePixel dimensions of the target image.
srsCanvas CRS.

Reimplemented from OpenSWMMVisLayer.

Here is the call graph for this function:

◆ serviceInfo()

WMSServiceInfo WMSLayer::serviceInfo ( ) const

◆ serviceUrl()

QUrl WMSLayer::serviceUrl ( ) const

◆ setActiveLayerName()

void WMSLayer::setActiveLayerName ( const QString &  layerName)
Here is the call graph for this function:

◆ setActiveStyle()

void WMSLayer::setActiveStyle ( const QString &  style)
Here is the call graph for this function:

◆ setBasemapRenderParams()

void WMSLayer::setBasemapRenderParams ( const OpenSWMM::Render::BasemapRenderParams p)
Here is the call graph for this function:

◆ setCrs()

void WMSLayer::setCrs ( const QString &  crs)

e.g. "EPSG:3857".

Here is the call graph for this function:

◆ setDpiMode()

void WMSLayer::setDpiMode ( int  mode)

DPI mode bitmask (0-7).

◆ setExtraParams()

void WMSLayer::setExtraParams ( const QMap< QString, QString > &  params)

◆ setImageFormat()

void WMSLayer::setImageFormat ( const QString &  fmt)

e.g. "image/png".

Here is the call graph for this function:

◆ setServiceInfo()

void WMSLayer::setServiceInfo ( const WMSServiceInfo info)

Injects an already-fetched service info (e.g. from a connection dialog) so the layer can render immediately without a second GetCapabilities round-trip.

Also sets m_wmsVersion from info.version when non-empty.

Here is the call graph for this function:

◆ setTransparent()

void WMSLayer::setTransparent ( bool  transparent)
Here is the call graph for this function:

◆ sourceDescription()

QString WMSLayer::sourceDescription ( ) const
inlineoverridevirtual

Human-readable source of this layer: a file path, a service URL, or a description for in-memory / derived layers.

Default empty — the dialog shows "(none)". Concrete layers override to return their real origin (e.g. modelFilePath(), resultsFilePath(), serviceUrl(), or "(generated mesh)").

Reimplemented from OpenSWMMVisLayer.

◆ tileReady

void WMSLayer::tileReady ( )
signal

Emitted when a GetMap tile has been downloaded and is ready to paint.

◆ transparentChanged

void WMSLayer::transparentChanged ( bool  transparent)
signal
Here is the caller graph for this function:

◆ wmsVersion()

QString WMSLayer::wmsVersion ( ) const

◆ wmsVersionChanged

void WMSLayer::wmsVersionChanged ( const QString &  version)
signal

Property Documentation

◆ activeLayerName

QString WMSLayer::activeLayerName
readwrite

◆ activeStyle

QString WMSLayer::activeStyle
readwrite

◆ imageFormat

QString WMSLayer::imageFormat
readwrite

◆ serviceUrl

QUrl WMSLayer::serviceUrl
read

◆ transparent

bool WMSLayer::transparent
readwrite

◆ wmsVersion

QString WMSLayer::wmsVersion
read

The documentation for this class was generated from the following files: