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
07 — Layers and Data Sources

What you'll do

Bring every kind of data a SWMM study needs onto the map — GIS files, web services, basemaps, tables, results and 2D meshes — and then organise, reorder, hide, inspect and remove it from the Layers panel.

Where to find it

  • The Layers dock. Toggle it with View → Panels → Layers (Ctrl+Alt+1); it is on the ribbon's View tab.
  • Everything that adds a layer lives under File → Import; the same commands are on the ribbon's Home tab.
  • Right-click any row in the tree for a context menu; the menu differs for a category row, a layer row, a kind row and a sublayer row.
Command Menu Ribbon tab
Open SWMM Output File → Import Home
Add 2D Results… File → Import Home
Add Vector Data File → Import Home
Add Raster Data File → Import Home
Add WMS Data File → Import Home
Add WFS Data File → Import —
Add Basemap File → Import —
Add Delimited Data File → Import Home
Add 2D Mesh… File → Import Home

The Layers panel with a basemap; a DEM; a SWMM model layer and a results layer

Step-by-step

The Layers panel

At the top is a Filter layers… box: type to filter the tree by name, case-insensitively and recursively, so a category disappears when none of its layers match. The clear button restores the full tree.

Below it is a two-column tree:

Column Contents
Layer Visibility checkbox, type icon and name. Category rows show the same for the whole group.
Opacity Per-layer opacity. Select the row, then click the cell to edit.

The panel has no add-layer toolbar of its own — adding is done from File → Import and the ribbon. Everything else is on the context menu.

Layers are grouped into fixed categories, derived from layer type. Only non-empty categories appear, and within a category layers are listed top-of-stack first — the top row is drawn over everything below it.

Category Holds
SWMM The project's SWMM model layer.
Meshes 2D mesh layers.
SWMM 1D Outputs .out results layers.
SWMM 2D Outputs 2D (.h5) results layers.
Feature Layers GIS vector layers, sub-project layers, annotation layers.
Raster Layers GIS raster layers.
Basemaps XYZ tiles, WMS, WMTS, ArcGIS REST and local-raster basemaps.
Tables Delimited-text tables.
Time Series Persistent observation collections, with optional monitoring locations and feature links.

The dock follows the frontmost project tab, not keyboard focus: each open project has its own canvas and its own layer stack, and clicking around in other panels never clears the tree. It empties only when the last project closes.

Native time-series collections

Successful USGS observation downloads add a persistent collection under Time Series. Expand the collection to select individual series, or right-click View observations… to inspect its series metadata and paged observations. The series browser supports filtering and selection without editing downloaded samples. A series can have no location, its own monitoring point, or an explicit link to an existing permanent GIS feature or model object. Several series can share one station; the map draws one selectable station marker with its label.

Right-click a series or station and choose Plot time series…. It opens the existing Comparison plot tab without requiring simulation results. When a station has several series, choose the desired measurement/statistic. The plot panel's Add from Map… also recognizes stations and associated features.

Use Zoom to location in the series browser or a series context menu to frame its monitoring point. A series without its own location can use a resolved feature link; an unresolved or nonspatial series has no location zoom. Zoom to selected also frames selected GIS and time-series features, including a single station in a different coordinate system from the map.

To associate data with another feature, select exactly one persistent feature, then use Attach to selected feature… for the selected series. Detach from feature removes the relationship only. Temporary preview features are not permanent association targets. A missing/deleted feature leaves its series and source location intact, with an unresolved link rather than a different target.

The layer's visibility checkbox controls its map locations. Existing chart series and model inputs are independent of that checkbox. Catalogue preview points remain independently visible after download. Downloaded DEMs appear as normal raster layers; adding one does not automatically choose it as the model's terrain source.

Native observations live in a versioned GeoPackage beside the downloaded archive. The project sidecar stores a reference and presentation/link state; saving does not embed all samples into the project JSON. Layers remain usable when the Data plugin is disabled. Removing a layer leaves its data files on disk. Locate source… reconnects a missing package after checking dataset identity. Keep the package and its source archive with the project when moving or sharing it.

Visibility, order and opacity

  • Tick or clear the checkbox in the Layer column to show or hide a layer. Hidden layers are skipped by both the raster render job and the scene pass, so they cost nothing.
  • Double-click a layer row's name to zoom to that layer.
  • The tree is the drawing order: whatever is higher in the tree is drawn on top of what is below it, and the canvas keeps its layer stack grouped by category so the two never disagree. A newly added layer lands at the top of its own category (not on top of everything). The one exception is raster content — rasters and basemaps are composited in their own pass beneath all vector layers, so moving the Raster Layers or Basemaps group above a vector group changes the tree and the order among rasters, but they still draw underneath.
  • Drag a layer row to reorder it inside its category, or drop it on the category header to send it to the bottom of the group. The cursor shows "not allowed" over another category — categories are derived from layer type, so a layer can't change category by dragging — and dragging between two open projects is not supported.
  • Categories themselves can be dragged above or below each other, or reordered from the header's right-click menu with Move Category to Top / Up / Down / to Bottom. The whole group moves in the paint stack.
  • Sublayer rows (the display components of 2D mesh and 2D results layers, and the per-kind rows of a 1D results layer) drag between the other rows of the same layer, or use Move to Top / Up / Down / to Bottom on their menu.
  • Every move is undoable (Edit ▸ Undo), and the moved row stays selected so repeated Move Up / Move Down keep acting on it.
  • Dragging is switched off while the filter box has text (hidden rows make the drop position ambiguous); the menu entries keep working.
  • The category order and the layer stack are saved per project in the .oswp sidecar and restored on reopen. A layer is matched on reopen by its type, source (file path or service URL) and name, so a project whose source files were moved falls back to the default grouped order for those layers.

Layer context menu

Right-clicking a layer row gives the same set of entries for every layer type; entries that don't apply are shown greyed rather than hidden, so the menu keeps its shape.

Item What it does
Zoom to Layer Frames the layer's extent, reprojected into the canvas CRS.
Show in Overview Not implemented — permanently disabled.
Open Attribute Table Opens the attribute table for the layer. Enabled for GIS vector, SWMM model, tabular and results layers (see 11 — Attribute Tables and the Attribute Calculator).
Show Feature Count Not implemented — permanently disabled.
Plot Time Series… 1D results layers open model-result plots; native Time Series collections offer their own Plot time series… action (see 22 — Time-Series and Comparison Plots).
Set as Active Results Layer Results layers only. Checkable; makes this the layer every analysis and animation tool targets.
Move to Top / Move to Bottom To the first / last row of the layer's category; disabled when already there.
Move Up / Move Down One row within the layer's category; disabled at the ends.
Rename Layer / Duplicate Layer Not implemented — permanently disabled. Rename the layer in Properties… → Information instead.
Remove Layer Drops the layer from the canvas.
Filter… / Set Layer Scale Visibility… Not implemented — permanently disabled.
Hide Layer / Show Layer Same as the checkbox.
Properties… Opens the Layer Properties dialog (see 08 — Styling, Labels and Legends).
Styles ▸ Edit Symbology… Opens the same dialog on its Symbology tab.
Styles ▸ Copy Style / Paste Style Not implemented — permanently disabled.

Right-clicking a kind row under the SWMM model or results layer (Junctions, Conduits, …) gives Show / Hide <kind>, Properties… (the style dialog focused on that kind) and Plot timeseries ▸ with a list of that kind's objects. Right-clicking a sublayer row — the display components of a 2D mesh or 2D results layer — gives Properties…, Show / Hide <name> and Move to Top / Move Up / Move Down / Move to Bottom within that layer's paint order.

FIGURE PLACEHOLDERdocs/manual/images/07_layer_context_menu.png
The layer-row context menu with the Styles submenu open

Layer Properties

Properties… opens the unified Layer Properties dialog with a vertical sidebar. Only the tabs the layer type supports are shown.

Tab Contents
Information Editable layer Name; read-only Type; a properties summary.
Source Read-only Source path or service URL; Authority (the layer CRS) with a Change… button that opens the CRS picker.
Symbology The renderer editor — see 08 — Styling, Labels and Legends.
Labels Label configuration — see 08 — Styling, Labels and Legends.
Rendering Visible checkbox; Opacity slider paired with a percentage spin box. For basemap layers a Basemap adjustments group adds Brightness, Contrast, Saturation and a Resampling choice of Bilinear (smooth) or Nearest (crisp), with a Reset button.
Metadata Read-only Property/Value table: ID, type, visibility, opacity, CRS, extent, child count, plus type-specific rows. A Refresh button re-reads it (useful while a live results file is growing); raster layers also get Rebuild pyramid.

Apply commits without closing, OK commits and closes, Cancel rolls back every edit made since the dialog opened. The button bar also carries Import style… and Export style….

The Layer Properties dialog on the Source tab showing the CRS row

Open SWMM Output

File → Import → Open SWMM Output attaches a SWMM binary output file to the active project's model. A project must be open — results layers hang off a model layer.

The file is opened on a background thread; the layer appears immediately and fills in when the open completes. Re-adding a file that is already loaded focuses and reloads the existing layer instead of duplicating it. On success the colour ramp is auto-stretched to the data and the layer becomes the active 1D results layer and the animation controller's primary layer. See 21 — Results Layers, Result Styling and Animation.

Vector, raster, delimited-text, and 1D/2D results file dialogs accept multiple files at once. Use Command-click on macOS (Ctrl-click on Windows/Linux) or Shift-click to select a range, then choose Open. Files load in selection order into the project that opened the dialog. A failed file is reported in the Message Log while the remaining selections continue. Each vector datasource still offers its own sublayer picker when needed; cancelling that picker skips that datasource and continues the batch.

Add 2D Results…

File → Import → Add 2D Results… loads an OpenSWMM 2D results file (*.h5). The dialog opens in the model's folder, which is where a relative [2D_OPTIONS] OUTPUT_FILE lands. Loading resolves the simulation-start time anchor, inherits the CRS, scans for the peak frame and the ramp percentiles, and reads the model's DRY_DEPTH. Re-adding an already-open file focuses the existing layer. Coordinate placement and units are covered in 06 — Coordinate Reference Systems.

Add Vector Data

File → Import → Add Vector Data opens any OGR-readable vector datasource. The file-type filter is built from the GDAL/OGR drivers your build actually registered, so it never offers a format the program cannot open. The curated groups are:

Format Extensions
ESRI Shapefile .shp
GeoPackage .gpkg
GeoJSON .geojson .json
Esri File Geodatabase .gdb
SQLite / SpatiaLite .sqlite .db
GML .gml
KML .kml .kmz
MapInfo .tab .mif
CSV (point data) .csv

Shapefile, GeoPackage, GeoJSON, File Geodatabase and SQLite are present in the minimal build; GML, KML and MapInfo appear only when their optional GDAL module is compiled in.

Loading runs in three stages. First the sublayers are enumerated on a worker thread. If the datasource holds more than one, the Sublayer Selection dialog appears — one checkable row per OGR layer showing its name, geometry type, feature count and CRS, with a name filter and check-all / invert helpers. One GISVectorLayer is created per checked entry. Single-layer sources skip the dialog. Then each selected layer opens on a worker and joins the canvas as it finishes; the view refits once the last one lands.

A file that declares no CRS is assumed to be in the project CRS already, and a warning naming the file is written to the Message Logs — see 06 — Coordinate Reference Systems.

FIGURE PLACEHOLDERdocs/manual/images/07_sublayer_selection_dialog.png
The sublayer selection dialog listing the layers inside a GeoPackage

Add Raster Data

File → Import → Add Raster Data opens any GDAL-readable raster. As with vectors, the filter reflects the registered drivers:

Format Extensions
GeoTIFF / COG .tif .tiff
Arc/Info ASCII Grid .asc
Erdas Imagine .img
SRTM height .hgt
USGS DEM .dem
Military elevation (DTED) .dt0 .dt1 .dt2
ESRI / ENVI binary .bil .bsq .flt
ENVI raster .dat .raw
Surfer grids .grd
Terragen terrain .ter
PNG / JPEG images .png .jpg .jpeg
GDAL virtual raster .vrt
NetCDF / HDF5 / HDF4 .nc .h5 .hdf5 .hdf

NetCDF and HDF appear only when the optional GDAL modules are compiled in.

The file is opened and its statistics computed in the background. The renderer a raster opens with follows its content: a band carrying an embedded colour table (land use, classified outputs) opens as Paletted / unique values with the file's colours; three- and four-band 8-bit datasets open as Multiband colour (an RGB/RGBA composite); everything else opens as Singleband pseudocolor, a continuous grayscale stretch over the band's minimum and maximum. The renderer, the band to render, the classification (continuous or classified, with equal interval / quantile / natural breaks / standard deviation / logarithmic / exponential / manual methods, editable class colours and labels, custom range and clip out-of-range) and the hillshade relief are set in Properties… → Symbology (see 08 — Styling, Labels and Legends). The choice is saved with the project.

Rasters are drawn through a 256-pixel tile pyramid in canvas CRS, with a pooled set of GDAL handles and a coarser-tile fallback so a tile that is not ready yet paints as a blurry stand-in instead of a hole. On first load SWMMVis builds external .ovr overview pyramids in the background; while that runs the raster draws on the slow full-resolution path and the status bar and Message Logs say so. Properties… → Metadata → Rebuild pyramid forces a rebuild.

Add WMS Data, Add WFS Data and Add Basemap

These three commands all open the same Add Basemap dialog on different tabs. Every service tab has the same saved-connection bar — a Saved connections combo with New, Edit and Delete — plus a Authentication (Basic) group (username, password, show/hide) and an HTTP-headers widget that carries a Referer field and a table of arbitrary extra headers. Connections are persisted per user; the built-in XYZ entries cannot be deleted.

XYZ Tiles

Control What it does
Name Connection name.
URL template Slippy-map template, e.g. https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png. @2x in the template is literal text you type, not a modifier.
Zoom range Min / Max zoom levels the service serves.
Tile pixel ratio Undefined, Standard 96 DPI (256 px tiles) or HiDPI 192 DPI (512 px tiles).
Axis order ZXY (standard OSM) or ZYX (ArcGIS REST).
Test Connection Fetches one tile and reports the byte count or the network error.

Five built-in, non-deletable providers ship with the application:

Provider Zoom range
OpenStreetMap 0–19
CartoDB Positron 0–20 (HiDPI)
CartoDB Dark Matter 0–20 (HiDPI)
Stadia Alidade Smooth 0–20 (HiDPI)
ESRI World Imagery 0–23

Tiles are fetched asynchronously and held in an in-memory LRU cache; already cached tiles paint instantly while missing ones arrive.

WMS / WMTS

Enter the service URL and press Connect. The protocol is auto-detected — a URL containing SERVICE=WMTS or /WMTSCapabilities.xml is treated as WMTS, anything else as WMS — and the detected protocol is shown next to the field. GetCapabilities is fetched asynchronously and the result fills the Available Layers tree.

Control What it does
Style Named style advertised for the selected layer.
Format Image MIME type (default image/png).
CRS Request CRS (default EPSG:3857).
Tile matrix set WMTS only; hidden for WMS.
DPI mode (Advanced) All (default), None, QGIS, UMN MapServer, GeoServer.
Tile pixel ratio (Advanced) Undefined / Standard 96 DPI / HiDPI 192 DPI.
Ignore GetMap URI (Advanced) Use the entered URL rather than the one the capabilities document advertises.
Ignore axis orientation / Invert axis orientation (Advanced) Work around services that disagree about EPSG axis order.
Smooth pixmap transform (Advanced) Smooth scaling of the returned image; on by default.

The Add Basemap dialog on the WMS / WMTS tab with the URL row; layer list and Advanced options

WCS

URL plus Connect fetches GetCapabilities and lists Available Coverages; selecting one fetches DescribeCoverage. The options are Format, Output CRS, Range subset (e.g. band[1]; blank for all) and Interpolation (nearest, bilinear, bicubic). Rendering follows the WMS single-image pattern — one GetCoverage request per viewport, decoded through GDAL.

ArcGIS REST

URL plus optional Portal endpoints (URL Prefix, Content endpoint, Community endpoint). Connect reads the service metadata and reports the service name and tile-level range; the tab then behaves as a derived XYZ connection.

WFS

Unlike the other service tabs, the WFS page fetches data once rather than describing a request that repeats. Enter the URL, press Connect, and the service is asked what it holds; the collection list shows which collections can be read and, for the others, why not (typically "offered only in formats this program cannot read"). OK stays disabled until a readable collection is selected, because a feature request can fail after you have chosen — the fetch happens before the dialog accepts, so a failure is reported where you are looking.

The request is bounded by the map's current extent, converted to longitude/latitude, so a service holding a whole country returns the catchment you are looking at rather than an arbitrary few thousand features. A canvas whose CRS cannot be expressed in degrees simply does not limit the request. There are no format or resolution options — what a collection can be read in is the service's answer, not yours. The result joins the tree as a queryable, styleable feature layer, not as a picture behind the model.

Local File

The Local File tab — which is where the plain Add Basemap command opens — adds a basemap from a local image.

Control What it does
Name Connection name.
Raster file + Browse… GeoTIFF, PNG, JPEG, BMP or any other GDAL raster.
Status line Reports what georeferencing was found: an embedded CRS, a georeference with no CRS, or neither.
World file + Browse… Optional .tfw / .pgw / .jgw / .bpw / .wld. Needed when the image is not georeferenced.
CRS + Select CRS… Read-only field set from the CRS picker. Needed when the image carries no CRS, and overrides an embedded one when set.

At add time the world file and CRS are written into the standard GDAL .aux.xml sidecar next to the image, so every later open — including project restore and the pooled tile handles — sees the georeferencing. Rendering reuses the raster tile pyramid, so large scanned maps behave like any other raster. The layer lands in the Basemaps category.

Add Delimited Data

File → Import → Add Delimited Data loads a delimited text file (*.csv, *.tsv, *.txt) as a non-spatial table layer. The delimiter is chosen from the extension — comma for .csv, tab for .tsv and .tab, comma for anything else — and the first row is treated as the column headers. Quoted fields with embedded delimiters are handled.

There is no import wizard in this release: no delimiter chooser, no X/Y column mapping and no time-column parsing. The layer participates in the layer tree (visibility, order, properties) and its rows are readable from the attribute table, but it draws nothing on the map. .xlsx is recognised and refused — Excel import is only available in builds compiled with Excel support.

Add 2D Mesh…

File → Import → Add 2D Mesh… loads an OpenSWMM 2D mesh (*.2dm) into the active project's model. The dialog opens in the project folder.

Meshes can also arrive inside the .inp: the reader parses [2D_VERTICES], [2D_TRIANGLES], [2D_VERTEX_NODE_MAP], [2D_TRIANGLE_NODE_MAP], [2D_BOUNDARY_CONDITIONS], [2D_EDGE_CONVEYANCE] and the per-cell [2D_INFILTRATION*] family directly, and follows a [2D_MESH_FILE] FILE <path> indirection to an external .2dm when one is present.

An imported .2dm is staged into the project folder so the model references it relatively and stays portable. If a file of the same name is already there you are asked whether to overwrite it or keep both — the existing file may be the one the model currently runs on, so nothing is clobbered silently. An unsaved project has no folder yet, so the mesh is read where it lies and the first save writes the reference. Everything else about meshes is in 19 — 2D Overland Flow: Meshes, Cell Parameters, Boundary Conditions and 1D–2D Coupling.

The SWMM model layer and its kinds

The model layer is a single layer with eleven object kinds beneath it, each with its own visibility and its own symbology: Junctions, Outfalls, Storage, Dividers, Conduits, Pumps, Orifices, Weirs, Outlets, Subcatchments and RainGages. Toggle a kind from its row in the tree, or from the kind row's context menu. Results layers expose the same kind structure for the objects they carry.

2D mesh and 2D results layers instead expose display sublayers — terrain fill, elevation bands, isolines, mesh edges, mesh vertices, boundary conditions, coupled nodes for a mesh; depth fills, contour bands, isolines and velocity vectors for results. Each is independently visible, reorderable and styleable (see 08 — Styling, Labels and Legends).

Text layers

Model → Text Layers manages named layers containing custom text and labels generated from SWMM or GIS features. Create or rename layers, move selected text between them, and use the Layers dock to control their visibility, opacity and order. Empty text layers are saved, along with their settings, in the project. Older projects with a single Annotations list load into one text layer.

With Edit Existing on, use Select to click and edit text or drag it in any visible text layer. Choose Edit on map to add text to the selected layer. Generated labels can display feature names or attribute expressions and use callout lines that follow their features. Automatic placement considers visible text layers together; pinned text keeps its position. See 12 — Editing the Network on the Map.

Tips and gotchas

  • Most imports need a project open. Vector, raster, delimited, results, mesh and 2D-results imports all refuse with a message in the log when there is no active project; only the basemap/service dialogs work without one.
  • Adding a layer fits the view to it. Vector, raster and delimited adds call Zoom Extent when they finish. If the map jumps somewhere unexpected, that layer's CRS is probably wrong.
  • A layer that declares no CRS is assumed to be in the project CRS — the single most common reason for a layer landing in the wrong place. Watch the Message Logs.
  • Loading is asynchronous. A large shapefile, GeoPackage or raster appears in the tree before it has finished opening; the progress indicator in the status bar tells you when it is done.
  • Removing a layer is not undoable.
  • Several context-menu entries are placeholders. Show in Overview, Show Feature Count, Rename, Duplicate, Filter, Set Layer Scale Visibility and Copy/Paste Style are all present but disabled. Rename via Properties… → Information.
  • The layer stack, per-layer CRS, opacity, styles, basemap connections and 2D sublayer state are saved in the .oswp sidecar, not in the .inp — see 03 — Working with Projects.

Related