Back to calendar

January 2026

Sources &
Methods

Data sources and methodologies for each day of the project.

View the code on GitHub →

Rationale
Finding this Department of Transport LiDAR data on National Map years ago got me interested in subsea data. It reveals the path of the river, the ancient shorelines and dunes offshore around Wadjemup Rottnest, and the deep scars of sand mining. Please explore it, and click to share links of anything you find interesting.
Source
Perth Bathymetric LiDAR from the Department of Transport WA (December 2009, 10m grid). CC BY 4.0.
Processing
Individual survey grids combined as a virtual raster in QGIS, exported as a 25% Float32 DEFLATE COG (from 568 MB to 14 MB).
Implementation Details
HTML/CSS/JS webmap. I wanted a chance to upgrade from my Leaflet map experience, so this uses the modern and open MapLibre GL for basemap rendering. deck.gl: colours and hillshades the bathymetry on the client side. GeoTIFF.js reads the COG to show depth on click.
Author
Patrick Morrison
Rationale
The WA Museum's shipwreck database is a huge, detailed resource that's well worth taking a look at. It's hard to believe just how many shipwrecks lie off our coast
Source
Maritime Archaeology databases from the Western Australian Museum via Data WA. CC BY 4.0.
Processing
None. The data was used as-is from the source GeoJSON.
Implementation Details
Built with OpenLayers to render the GeoJSON points. Added a simple method to share shipwrecks.
Author
Jack Langoulant
Rationale
Streetlights of the WA area as managed by Western Power, and thus does not cover all of WA. The dataset has the ID of each streetlamp, as well as the wattage and type of bulb installed.
Licence
Processing
The only preprocessing needed was converting the downloaded dataset (GDA94 Geopackage) to a EPSG:4326 GeoJSON for easy handling on the web.
Implementation Details
HTML/CSS/JS webmap. Utilising the modern and open MapLibre GL for basemap rendering, the streetlamps are then added as a scatterplot layer on top, with the size and color of the bulb determined by the wattage and type respectively.
Author
Aren Leishman
Rationale
We are often planning our fieldwork around tides: highs for remote sensing clearance, lows for access, or slacks for diving. We need to know if these fall during work hours or after. This lets us scan the BOM data quickly for the perfect day.
Source
Tide predictions from the Bureau of Meteorology (Fremantle & Barrack Street Jetty, 2026). © Commonwealth of Australia.
Processing
BOM publishes tides as PDF charts, not machine-readable data. A Python script extracts times and heights using pdfplumber, with regex handling for merged text tokens. Tide types inferred from neighbouring heights. This took a lot of iteration.
Implementation details
HTML/CSS/JS calendar matching the style, but with a responsive grid layout. Designed for quickly scanning on desktop or mobile.
Author
Patrick Morrison
Rationale
Showing the patterns and intensity of fire activity in Western Australia, from 2000-2025. Separated by wildfires and prescribed burns.
Source
DBCA Fire History Dataset - Department of Biodiversity, Conservation and Attractions fire history records. Geographic boundaries from Australian Bureau of Statistics ASGS Edition 3.
Implementation Details
Animated visualizations created using gganimate in R, with gradient fill techniques from Andrew Heiss's tutorial.
Author
Daisy Evans
Rationale
As an archaeologist, I study ancient sites under the sea. During the last ice age, sea levels were up to 130m lower, revealing landscapes where Aboriginal people lived for tens of thousands of years. Visualising these landscapes is the first step to understanding them, and I have previously made a sea level tool for QGIS to do this. However, the interactive Flash-based map Sahultime by Matthew Coller is what showed me what ancient Australia looked like, and so this is an attempt to capture that magic, by allowing people to explore the ancient landscapes to the best our continent-wide data will allow. This visualization combines modern bathymetry data with sea level reconstructions to show how Australia's coastline has changed over 130,000 years. A guide feature shows people around key Western Australian archaeological sites in the context of the ancient land extent, using the sea level and measurement tools.
Source
2024 Australian Bathymetry and Topography Grid (AusBathyTopo) from Geoscience Australia (250m resolution, 2.6 GB Float32). Sea level curve from Grant et al. 2012 (Red Sea Sea-level Reconstruction), published in Nature.
Processing
The original bathymetry was clipped to +10m to -150m depth range and quantized to 8-bit (63cm precision) using gdal_calc.py, reducing size by 99.5% to 14 MB. Reprojected to Web Mercator (EPSG:3857) for web compatibility and clipped to Australian extent. Preview file (360 KB) created at 10% resolution for instant loading.
Implementation Details
HTML/CSS/JS application using MapLibre GL for base mapping and GeoTIFF.js for raster data loading. Custom WebGL shaders render real-time depth coloring with hillshading and environmental blending. Chart.js visualizes the sea level curve with interactive scrubbing. Includes guided tour system highlighting archaeological sites and ancient land extent.
Author
Patrick Morrison
Rationale
Large tracts of Western Australian land are designated as potential sites for Unexploded Ordnance (UXO) due to historical military activity, including in what is now the Perth and Geraldton metro areas. This visualization aims to make these legacy risk zones more visible, showing the historical defense footprints persist within the current landscape.
Source
UXO Potential Dataset from the Department of Fire and Emergency Services via Data WA. CC BY 4.0.
Processing
None. The data was used as-is from the source GeoJSON.
Implementation Details
Built ontop of OpenLayers. Dataset utilised as a geoJSON.
Author
Jack Langoulant
Rationale
This is one of my favourite open datasets. It is so delightful! Looking at all of the trees on QGIS is a great way to understand what geospatial data is useful for, but this app is a way of exploring it on the ground. It shows you only the trees that are nearby, and lets you take note of which of the 314 species you have seen. This is also an experiment for me using localStorage on a phone web browser, with lightweight save/load to a text file.
Source
City of Perth - Trees in the City. This dataset shows point locations of public trees inventoried by the City of Perth field teams, and doesn't include all trees - just those on public land. CC BY 4.0.
Tech Stack
A mobile-only GPS radar interface built with MapLibre GL JS, Deck.gl, and Turf.js. Features real-time location tracking with compass orientation, smooth position interpolation, distance-based tree visualization with 30m radius, and species collection system with localStorage persistence and text file backup/restore.
Author
Patrick Morrison
Rationale
The background ambiance of birdsong is a classic feature of Australian wildlife, the dataset collected over years by John Hutchinson. This tool allows one to be able to easily bring a sample of that into our every day lives background noise for us to live, work, and relax to.
Processing
The published CSV data was simply trimmed for unused fields. The url is appended in the browser in order to allow for easy playing of the underlying MP3s.
Tech Stack
Simple HTML + Javascript to pull and interpret the CSV data.
Author
Aren Leishman
Rationale
Western Australia has a very mining oriented history and economy, and a critical part of a mines lifecycle is its remediation and cleanup once the extraction of the commodity is complete. Knowing the condition and status of various abandoned mine features is valuable not just from the perspective of safety and land management, but also from a historical and archaeological lens. The remains of past mining operations give insight into the history of regions and work practices throughout WA.
Processing
The only preprocessing needed was converting the downloaded dataset to a CSV for handling on the web.
Implementation Details
HTML/CSS/JS webmap. Utilising the modern and open MapLibre GL for basemap rendering, the mines are then added as a scatterplot layer on top. To better analyse the dataset the feature type, condition, base condition, stability, and mined commodity are able to be visualised by colour. It is also possible to filter on these fields plus a few more. Clicking on a feature brings up its detailed record as well as its link on minedex.
Author
Aren Leishman
Rationale
225 aerial photographs from WWII military mapping operations captured over Fremantle-Pinjarra on 14-15 January 1942. These images show the landscape as it was over 80 years ago, aligned and processed into an interactive orthomosaic with terrain visualization.
Processing
225 photographs captured with a Williamson Eagle 4 camera across four film rolls. I aligned them in Agisoft Metashape to generate a 1m resolution grayscale orthomosaic (28MB) and 5m DEM (3.3MB). DEM terrain visualization uses GDAL multiply blend method combining color-coded elevation with hillshading. Both exported as Cloud Optimized GeoTIFFs in Web Mercator projection with internal tiling and multi-resolution overviews.
Implementation Details
HTML/CSS/JS webmap using MapLibre GL. The @geomatico/maplibre-cog-protocol library reads Cloud Optimized GeoTIFFs directly. Camera positions shown as clickable markers with metadata, thumbnails, and download links. Basemap: Esri World Imagery. This approach can be applied to many areas of WA - I have clean DEMs processed from historical aerial photography dating back to 1939.
Author
Patrick Morrison
Rationale
Analysis of how socioeconomic advantage and disadvantage varies within Western Australian suburbs using the Index of Relative Socioeconomic Advantage and Disadvantage (IRSAD). Visualises distribution patterns across Statistical Area Level 1 (SA1) regions within each suburb.
Data Sources
Tools
R (tidyverse, patchwork, readxl, extrafont). Rendered from R Markdown.
Author
Daisy Evans
Rationale
A visualisation of all beach emergency signs in WA as of December 2025.
Data Sources
Beach Emergency Numbers (BEN) Signage — Department of Primary Industries and Regional Development
Author
Jack Langoulant
Rationale
Tenders.wa.gov.au is where the government publicizes all awarded contracts. Visualizing this data provides insight into how government money gets spent and how resources are assigned across agencies. The last 3 months of awarded contracts are published in list form for anyone to download and analyze.
Source
Processing
The Excel report of the last 3 months of contracts was retrieved on 10-01-2026. Unneeded columns were removed and the data exported as CSV for compact serving.
Implementation Details
Interactive Sankey diagram built with D3.js v7 and d3-sankey. Shows contract value flows from a root total node through agencies to budget bins (Micro, Small, Medium, Large). Features pan/zoom navigation and clickable nodes that reveal contract details in a popover.
Author
Aren Leishman
Rationale
Interactive map of Western Australia's Long Term Cycle Network, showing both metro and regional cycling infrastructure across 11,281 route segments.
Data Sources
Metro Cycle Routes (LTCN) and Regional Cycle Routes — Department of Transport WA. CC BY 4.0.
Processing
GeoDataBase converted to GeoJSON via MyGeoData Cloud. No simplification applied to maintain route accuracy.
Implementation Details
HTML/CSS/JS webmap using MapLibre GL and Deck.gl. Features dual-layer rendering for metro and regional networks, hierarchy-based color coding, and route status indication via solid/dashed lines.
Author
Coen Arrow
Rationale
A thought experiment: what would future archaeologists make of 21st century Australia if sea levels rose 70m? This analysis explores how rising seas would affect archaeological visibility of modern sites, reversing the problem we face studying the Pleistocene.
Tools
R (tidyverse, terra, sf, tidyterra, patchwork). Rendered from R Markdown.
Author
Patrick Morrison
Rationale
80m, 40m, and 20m geomagnetic intensity grids from the Geologic Survey of WA. Used in mining to locate ferrous materials, and increasingly for locating shipwrecks by their magnetic signatures. Includes MINEDEX operating mines and shipwreck data.
Tools
MapLibre GL JS, @geomatico/maplibre-cog-protocol for Cloud Optimized GeoTIFF rendering.
Author
Aren Leishman
Rationale
Interactive maps showing tree canopy, shrub, and grass coverage across Perth. Visualises vegetation ratings and walking comfort based on total vegetation percentage, split into SA4 regions for performance.
Data Sources
Urban Forest Mesh Blocks 2024 (DPLH-109) — Department of Planning, Lands and Heritage. Map tiles: Esri World Imagery.
Tools
R (leaflet, sf, dplyr, htmlwidgets). View source code.
Author
Caitlin Smith
Rationale
We dive the Swan River often, and many people use underwater scooters and contour navigation for planning dives. Technical diving is planned around times and depths, which this helps you calculate. This tool allows you to plan a route that includes "follow the 9m depth contour for 20 minutes, then go west for 5 minutes". This is the Swan River multibeam data I used to find the oldest wreck in the river - an 1882 barge upstream of Point Walter. We have more targets to investigate, so with this I can identify a target, right-click on it and load its location into my Garmin - or share it with the dive team.
Source
Swan-Canning Multibeam Survey (SC2010) from the Department of Transport WA. CC BY 4.0. Original coordinate system: GDA94 / MGA zone 50 (EPSG:28350).
Processing
BAG file hole-filled in QGIS, exported as GeoTIFF in original projection. Optimized for web by converting Float32 to Int16 (×100) at 25% resolution as a DEFLATE COG (731MB → 3.2MB). The GeoTIFF retains the original GDA94 / MGA zone 50 projection with on-the-fly conversion to Web Mercator (EPSG:3857) happening client-side for web map display.
Implementation Details
MapLibre GL + deck.gl for rendering, Chart.js for depth profiles, GeoTIFF.js for COG streaming. A* pathfinding with depth tolerance for contour-following routes. Shareable URLs encode waypoints and configuration.
Author
Patrick Morrison
Rationale
As scientists voyaged around the Kimberley between 2008 and 2011 during their whale tracking research, they recorded the latitude, longitude, and number of whales sighted. This visualization allows you to scroll through time, select windows, and showcase the research that has been undertaken.
Processing
The original Excel files were converted to a single CSV for web handling using a Python script.
Implementation Details
HTML/CSS/JS webmap using MapLibre GL for basemap rendering with whales displayed as a scatterplot layer. Chart.js renders the timeline with native functionality to animate the timeline and show features on the map.
Author
Aren Leishman
Rationale
Tracking coastline changes is critical for understanding coastal erosion, sea level rise impacts, and land use planning. This map makes it easy to visualise how Australia's high tide boundary has shifted between 2016 and 2022, with the ability to toggle individual years or animate through time to spot patterns of change.
Source
High Resolution National High Tide Coastline History (DPIRD-094) from the Department of Primary Industries and Regional Development via Data WA. Derived from Sentinel-2 satellite imagery using the Normalised Difference Water Index. CC BY 4.0.
Processing
Data is fetched directly from the WA SLIP (Shared Location Information Platform) WFS service in GeoJSON format, then rendered on the map using Leaflet with custom styling.
Implementation Details
HTML/CSS/JS webmap using Leaflet for basemap rendering with Esri World Imagery tiles. Coastline vectors are loaded dynamically via WFS requests scoped to the current map viewport. Features include per-year colour-coded layers with toggle controls, an animation mode to cycle through years automatically, and debounced loading to avoid excessive requests during pan/zoom.
Author
Nick Wright
Rationale
The State Library has excellent image collections, many of which are out of copyright. They often post them to their Instagram. This uses new machine learning driven single image view synthesis from Apple. It works on desktop and mobile, but in a VR headset it will load in mixed reality, and let you step into the gaussian splat - to experience the historical image, in an estimate of life-size 3D.
Data Sources
State Library of Western Australia. Call numbers are listed beside image names.
Processing
Pipeline uses Apple ML-Sharp for initial reconstruction (free for research/education). The output is converted to `.sog` files using splat-transform and thinned down to 750,000 splats to ensure performance on Meta Quest headsets. The processing pipeline (written in Python) is available in the GitHub repository.
Implementation Details
WebXR-enabled 3D viewer built with Three.js and SparkJS. Support for AR passthrough on compatible devices (tested on Meta Quest 3).
Author
Patrick Morrison
Rationale
The Houtman Abrolhos Islands are a popular spot for SCUBA diving, and as such there are designated dive trails with marked locations. This map showcases each of these routes while also laying over DOT bathymetry data of the area so that the depths of each of the routes can be observed. This is aided by a planning tool that measures distance traveled and the depth at each point along the route, line segments for the dive trails can be clicked directly to add them to the plan.
Source
Abrolhos Islands Dive Trail Markers from the Department of Primary Industries and Regional Development via DataWA. Bathymetry from the Department of Transport WA (Survey AB2016_mean_lidar). CC BY 4.0.
Processing
Trail markers used as-is from DataWA GeoJSON. Bathymetry: The .bag file was converted to a COG (EPSG:3857, DEFLATE, 16-bit float) using GDAL, reducing the file size from 1.4GB to ~67MiB for web serving.
Implementation Details
HTML/CSS/JS webmap using MapLibre GL. The @geomatico/maplibre-cog-protocol library reads the Cloud Optimized GeoTIFF directly. D3 Contours generates contours at render time in the browser.
Author
Aren Leishman
Rationale
I wanted to visualise how population has changed across Local Government Areas (LGAs) in Australia over the past two decades.
Source
Regional population from the Department of Australian Bureau of Statistics. CC BY 2.5.
Processing
The data was originally provided as a GeoPackage. This has been converted to a geoJSON for easier web integration. Unused data (such as deaths and births) was removed in an effort to minimise file size.
Implementation Details
The map functionality was added via OpenLayers. The project utilises the Mako colour scheme for population, Viridis for growth, and Inferno for density. These should all be colour blind friendly.
Author
Jack Langoulant
Rationale
Interactive bathymetric map of Wellington Dam with dynamic water level control, dive survey data, and contour-following measurement tools. Features merged Department of Transport bathymetry with custom dive survey lines, real-time COG rendering with custom colormap, and advanced measure tool with A* pathfinding along depth contours.
Data Sources
Bathymetry from Department of Transport WA (Surveys AS20131211 and AS20130627). Dive survey data (January 2026) collected by Aren Leishman, Matt Gannicott, Huw Porter, Doreen Ee, Gabriel Feng, Patrick Morrison, Geoff Paynter, Stuart Parsons, and Andrew Currie. Water level from Water Corporation of WA. Current storage 84.35 GL used to map incomplete bathymetry to surveyed water levels.
Processing
Two bathymetry datasets merged in QGIS and exported as Cloud Optimized GeoTIFF (COG) using gdalwarp -of COG -co COMPRESS=DEFLATE -co NBITS=16 -co PREDICTOR=3. Hillshade generated with multidirectional light source and converted to COG. Custom Python script (generate_contour_source.py) applied anisotropic diffusion to reduce noise while preserving cliff edges, creating optimized cache layer for real-time contouring. Water level calculated by cross-referencing 126 matched points between survey and bathymetry: median 156.96m AHD (std dev 0.69m). Volume estimation script (generate_volume_lookup.py) examines DEM to map Water Corporation storage volumes to dam levels and depths.
Implementation Details
Custom WebGL layers for bathymetry and hillshade rendering. Bathymetry converts elevation to depth below water surface, applies inverted Turbo colormap (red/orange for shallow, blue/purple for deep), masks pixels above water level, and caches raw elevation for instant re-coloring when water level slider adjusts. Hillshade uses multiply blend mode (gl.blendFunc(gl.DST_COLOR, gl.ZERO)) to darken slopes while preserving color palette. Dynamic depth contours generated at render time using d3-contour marching squares algorithm with two-tier resolution (4× overview for zoom <16, 2× for ≥16), LRU cache (20 entries), and clean boundary handling. Measure tool includes contour-following mode with A* pathfinding that snaps to target depth and applies Chaikin smoothing. Cost function combines base movement cost, quadratic depth penalty, and directness penalty. Module architecture: main.js (config/state), map.js (layers/UI), measure.js (A* pathfinding), contours.js (caching), utils.js (transforms/smoothing). Tech stack: MapLibre GL JS 4.7.1, GeoTIFF.js 2.1.3, d3-contour 4.0.2.
Author
Aren Leishman

More sources will appear here as each day is published.