Mapping
Part of the IP4CMS portal. β All module guides
What it's for β Mapping lets you build interactive maps that compose your operational data onto a single canvas. A map is a saved container; you stack layers on it to plot locations, feasibility results, and vehicles, and to overlay external imagery from WMS or ArcGIS tile servers. The map reads live data from the locations, feasibility, and vehicles modules each time it opens, so you do not re-import anything β you define what to show and the map draws it. Each layer can be coloured, toggled on or off, and clicked through to the underlying record.
Where to find it β Left navigation: Mapping (route /app/mapping, which opens the map list at /app/mapping/maps). A selected map opens at /app/mapping/maps/:mapId.
Before you start β You need:
- The mapping licence module enabled for your tenant. If it is off, the Mapping nav item does not appear.
- The
mapping:read:allpermission to view maps. To create, rename, delete, or change layers you also needmapping:create,mapping:update, andmapping:deleterespectively (see Permissions & access). - Source data already captured in the other modules: Locations (with latitude/longitude or a stored shape), Feasibility requests/queries, and Vehicles. A map only displays what those modules contain β it does not create that data.
- The vehicles module enabled if you want to add a Vehicles layer. When it is off, the Vehicles layer type is hidden and any existing vehicle layer renders empty.
Key tasks
Create a map
- Open Mapping from the left navigation.
- In the left panel, click New map.
- Enter a Name and click Save.
- The new map opens automatically with an empty canvas centred on a default view (Cape Town). Add layers to populate it.
To rename a map, hover its entry in the list and click Edit, change the name, and Save. To delete a map, use the delete confirmation β this removes the map and all its layers and cannot be undone.
Add a Location layer
Plots your tenant locations as points (or their stored shapes).
- Open a map, then in the right-hand Layers panel click Add layer.
- Set Layer type to Location.
- Enter a Name for the layer.
- Pick a Color for the markers.
- Optional filters:
- Location type β limit to one location type, or leave as All location types.
- Supplier β search and select a supplier to show only its locations.
- Click Add.
Markers use each location's stored shape geometry when present, otherwise its latitude/longitude point. Locations with neither are omitted. Clicking a marker shows the name, address, and (if you have locations access) an Open location β link.
Add a Feasibility layer
Plots feasibility requests as points, coloured by result.
- Add layer β Layer type = Feasibility.
- Enter a Name.
- Choose a Request group (required): either a specific group, or All feasibility requests. (If no groups exist, only the "All" option is offered β groups are created via bulk upload on Feasibility Requests.)
- Filter by status (optional) β tick any of Feasible, Not feasible, Maybe, Pending to show only those results. Leave all unticked to show every result.
- Click Add.
Points are coloured by result: feasible = green, not feasible = red, maybe = amber, pending = grey. Coordinates come from each request's input. Clicking a point shows the status and an Open request β link.
Add a Feasibility Query (locations) layer
Plots every location used by a saved location-based feasibility query (proximity, inside-polygon, or line-of-sight).
- Add layer β Layer type = Feasibility Query (locations).
- Enter a Name and pick a Color.
- Select a Feasibility query from the list. If none appear, create proximity / inside-polygon / line-of-sight queries first. Use the Set up feasibility queries link to jump to Settings β Feasibility, then the refresh control to reload the list.
- Click Add.
Add a Vehicles layer
(Requires the vehicles module.) Plots vehicles at their best-known position.
- Add layer β Layer type = Vehicles.
- Enter a Name and pick a Color.
- Optional filters:
- Vehicle type β exact text match (e.g.
Car). - Property β search and select; shows only vehicles at that property location.
- Member β search and select; shows only vehicles linked to that member.
- Click Add.
Each vehicle is placed by, in order: its stored GPS (live tracking) if set; otherwise its linked property location; otherwise the member's base location. Vehicles with none of these are omitted. The popup shows registration, type, the position source used, and (with vehicles access) an Open vehicles β link.
Add a WMS Server layer (external tiles)
Overlays imagery served by a WMS endpoint (e.g. coverage/GIS maps). WMS layers render beneath your data layers as a base overlay.
- Add layer β Layer type = WMS Server.
- Enter a Name.
- Color (BGCOLOR) β background colour applied to transparent areas of the WMS request.
- WMS Server URL (required) β the base WMS URL. Paste the full URL; any query string is stripped. For ArcGIS WMS, ensure it ends with
WMSServerand no trailing?. - Layers (required) β comma-separated WMS layer names (default
0,1). Find these from the server's GetCapabilities document (append?SERVICE=WMS&REQUEST=GetCapabilitiesto the URL). - WMS Version β
1.3.0(default) or1.1.1. - Format β
image/pngorimage/jpeg. - BGCOLOR override (optional) β a value in
0xRRGGBBform; overrides the Color above. Transparency is always on. - Click Add.
Add an ArcGIS (tile) layer (external tiles)
Overlays a pre-rendered ArcGIS REST MapServer tile service (e.g. an LTE coverage layer).
- Add layer β Layer type = ArcGIS (tile).
- Enter a Name.
- ArcGIS Tile URL (required) β the base MapServer URL, or a full tile URL. The
/tile/{z}/{y}/{x}path is appended automatically; if you paste a full tile URL, everything from/tile/onward is trimmed back to the base. - Query params (optional) β a query string for tile requests, e.g.
blankTile=false(do not include the leading?). - Click Add.
View, recolour, toggle, and remove layers
- Layers appear in the right-hand Layers panel. Drawing order is fixed by type so markers stay readable: WMS/ArcGIS render first (as a base), then locations, feasibility-query locations, vehicles, then feasibility points on top.
- Show/hide a layer with the eye icon. This is a view-only toggle for your current session and is not saved.
- Change colour by clicking the coloured swatch next to a Location, Feasibility-query, Vehicle, or WMS layer and picking a new colour. This change is saved to the layer.
- Click any marker to open its popup with details and a deep link into the source record.
- Remove a layer with the Remove button (appears on hover). This deletes the layer from the map.
How the data connects
| You enter / select | Where it is stored | What it feeds / consumes |
|---|---|---|
| Map name | map table (per tenant) | The saved container listed in the left panel; updated_at is bumped on any layer change so the list sorts by recent activity |
| A layer's type, name, colour, and filters | map_layer table (config JSON, ordered by sequence_number) | Defines what data to fetch and how to draw it; the map editor reloads layers when the map changes |
| Location layer filters (location type / supplier) | layer config.filters | Reads the locations module: matching, non-deleted locations are turned into GeoJSON points/shapes |
| Feasibility request group + status filter | layer config | Reads feasibility requests; coordinates from each request's input, colour from result |
| Feasibility query selection | layer config.feasibility_query_id | Reads the feasibility module via its query logic, returning that query's locations |
| Vehicle filters (type / property / member) | layer config | Reads the vehicles module; position resolved from tracking GPS β property location β member base |
| WMS / ArcGIS URL, layers, params, bgcolor | layer config (wms_* / arcgis_*) | Consumes the external tile server directly from the browser; no tenant data involved |
The data layers (location, feasibility, feasibility-query, vehicle) are served as GeoJSON from /mapping/layers/:layerId/geojson and cached per tenant + layer on the server. Editing or deleting a layer invalidates that cache so the next view rebuilds it. WMS and ArcGIS layers are not cached server-side β the browser fetches their tiles live.
Permissions & access
- Licence module:
mappingmust be enabled, or the module is invisible and all/mapping/*endpoints are blocked. - Permissions (each endpoint enforces one):
mapping:read:allβ list and view maps, and load layer GeoJSON. Required to see the Mapping nav item.mapping:createβ create a new map.mapping:updateβ rename a map and add / edit / remove layers.mapping:deleteβ delete a map.- Vehicles layers additionally require the vehicles module to be enabled; otherwise the layer type is hidden and the API refuses to add it (and renders an empty collection if one already exists).
- Popup deep links are permission-aware: an Open location β link only shows with locations access (
locations:read:all), Open request β with feasibility/mapping access, and Open vehicles β withvehicles:read:all. - All maps and layers are tenant-scoped β you only ever see and edit your own tenant's maps.
Tips & gotchas
- Hide/show is not persisted. Toggling a layer's visibility with the eye icon affects only your current view; reopening the map shows all layers again. To permanently exclude data, change the layer's filters or remove it.
- Layer colour changes are saved; visibility is not. Picking a swatch colour updates the stored layer config; recolouring a WMS/ArcGIS layer rebuilds that tile layer.
- Deleting a map is permanent and removes every layer on it. There is no undo.
- WMS "Layers" must be valid layer names for that server. Use the server's GetCapabilities (
?SERVICE=WMS&REQUEST=GetCapabilities) to find them; the default0,1will only work on servers that happen to expose those names. - Paste full URLs freely. For WMS, any query string is stripped to the base; the form also reads a
BGCOLORparam out of a pasted URL. For ArcGIS, a full/tile/...URL is trimmed back to the base MapServer path. - Feasibility points need coordinates in the request input. Requests whose input has no usable coordinates are silently skipped.
- Vehicles can fall back to a coarse position. A vehicle without live GPS is placed at its property or member base location; the popup tells you which source was used, so do not read every dot as a real-time position.
- Locations need geometry. A location with no shape and no latitude/longitude will not appear on a Location layer.
- Empty maps are normal at first. A new map shows the base street tiles only until you add at least one layer.
- The base street map is greyscaled so your coloured layers stand out; this is intentional styling, not a rendering fault.