Skip to content

Methodology

Computational mechanics

For the technically curious: how the pipeline turns raw planning data into the figures on the site, described as abstract mechanics.

This page is for the technically curious. It describes, in the abstract, the geometric operations, the unit conversions, the order the Australian Zoning Atlas pipeline runs in, and the robustness harness that stress-tests every headline.

Not that this is a description of process and mechanics, not source: the pipeline itself is not open, and nothing below names a file, function, or piece of code. It also only describes how the computation runs—inputs and assumptions are covered elsewhere.

The pipeline, end to end

Every figure on the site is produced by the same ordered chain. The order matters: each stage depends on the ones before it, and choices and assumptions are baked in at specific points.

  1. Parcel generation. Start with the cadastral lot—the individual title parcel—as the atomic unit of spatial analysis.
  2. Control matching. Match each parcel to any planning zones, height controls, and heritage overlays that govern it, by a representative-point lookup (below).
  3. Parcel classification. Filter out excluded parcels. Derive secondary measures, such as each parcel’s restriction flags—2-storey, detached-only, low-density, heritage.
  4. Output structuring. Place each parcel into a concentric distance ring measured from the city’s centre point, and into a city by whether it sits inside that city’s metro boundary.

In short: generate → match → classify → output. Additional aggregation (per ring, per suburb, per council, per city) happens only after all four stages are complete, reading from a single per-parcel table so the headline numbers and the map polygons remain consistent.

Representative-point parcel-to-zone matching

A parcel is a polygon. Zoning layers, height layers, and heritage layers are each their own set of polygons. The pipeline has to decide which zone, which height, and which heritage statuses apply to each parcel. It does this using a representative point.

For every parcel, a single interior point is computed that is guaranteed to fall inside the parcel’s polygon—even for an awkward concave or C-shaped lot, where a naive centre-of-mass could land outside the boundary.

That point is then tested against each planning layer: the zone it falls within is the parcel’s zone, the height polygon it falls within supplies the parcel’s height, and any heritage polygon it falls within flags the parcel as heritage.

Why a point rather than a polygon-overlap test? Because an overlap test counts a parcel as heritage (or low-density, or capped) the moment it touches an overlay edge, even by a sliver. Using the interior point instead means a parcel only inherits a control when its body genuinely sits inside it. For heritage specifically we found a large effect—a touch-the-edge test inflated inner-city heritage by roughly 20–25 percentage points. The point-in-polygon method keeps the result conservative.

We also use this same method to decide when specific parcels should be filtered out, such as by the statistical boundaries sourced from the ABS.

Strata collapse

Apartment buildings create a problem for a parcel-based count. A single building footprint can carry dozens or hundreds of stacked strata lots—one title per unit—all sharing the same patch of ground. Counted naively, a dense apartment block can register as hundreds of “parcels” and swamp the land-area weighting.

To prevent this, stacked strata lots are collapsed back to their underlying parcel, ensuring each given piece of land is only counted once.

The projected metric coordinate system

Two of the headline quantities are physical measurements: the square-metre land area that weights every parcel, and the kilometre distance from the city centre that sorts parcels into rings. Both have to be exact, and both go wrong if computed on raw latitude/longitude.

All geometry is referenced to the GDA2020 datum: the current Australian geodetic standard.

Crucially, before any area or distance is computed, geometry is reprojected into a projected, metric coordinate system (the appropriate local map-grid zone for each city). In a projected metric system, a square metre of area and a metre of distance are true metres on the ground; on an unprojected lat/long surface they are degrees, which vary in real-world size with latitude and would distort both the area denominators and the ring boundaries.

This is the foundation the area-weighting and the distance rings both stand on to ensure the accuracy of the Australian Zoning Atlas.

The metres-to-storeys formula

Height controls arrive in two flavours. Some planning schemes publish a storey count directly; others publish a height in metres. To compare like with like, metres are converted to storeys with a single, centralised formula:

storeys = floor( (height_in_metres − 1) / 3.1 )

The constants encode a simple physical model: 3.1 m per storey, plus a 1 m roof/ground allowance. The floor operator means a building only earns a storey once it clears the full 3.1 m for it—so the per-storey boundaries land at 4.1 m (1 storey), 7.2 m (2 storeys) and 10.3 m (3 storeys).

The consequence for the headline metric: the 2-storey restriction catches any height limit below ~10.3 m—a zone has to allow 10.3 m or more before it reads as three storeys and clears the cap. So the typical 8.5–9.5 m two-storey controls sit squarely inside the highly restricted band, and even a 10 m limit still resolves to two storeys.

This one conversion constant is shared across every city, so no city is on a different ruler. The 3.1 m / 1 m figures are themselves a modelling choice (and one the robustness harness sweeps, below); they are catalogued on the assumptions page.

The conservative unknown-height rule, in mechanics

The formula only produces a storey count where a published height exists. Mechanically this matters because of how the 2-storey flag is built:

  • The 2-storey flag requires a published height AND no more than 2 storeys. An unknown-height parcel fails the first half, so it is never counted in the 2-storey numerator.
  • Unknown-height land does, however, still get counted as residential land.

The effect is to under-count restriction, never over-count it.

The transit-headway computation (GTFS)

“Rapid transit” stops are derived from each jurisdiction’s General Transit Feed Specification (GTFS) data—the open standard that publishes transit schedules, routes and stops. The mechanical question is: at this stop, does a service turn up often enough to count?

The window and the threshold. For each candidate service, the pipeline counts arrivals across the weekday 7am–7pm span and computes the mean headway—the average gap between consecutive arrivals. The stop qualifies if that mean headway is ≤15 minutes. The same 15-minute threshold applies across every mode.

The aggregation differs by vehicle category:

  • Bus, tram and ferry are evaluated per route. At least one single passenger-facing route serving the stop must hit the 15-minute mean on its own. Two half-frequency routes do not add up to one frequent route.
  • Train and metro are evaluated as a combined trunk service: all rail arrivals at the station are pooled and the headway is computed over the pooled arrivals. The reason is origin-destination route coding on cross-city through-running networks—Brisbane is the clearest case—where a train can arrive every five minutes yet no single named route hits the 15-minute mean. Pooling the arrivals into one trunk frequency captures the rider’s actual experience, which the strict per-route rule would miss.

Distance from a qualifying stop is measured as the crow flies—a straight-line 800 m radius, not a street-network walk.

The distance-ring computation

Once a parcel has its representative point and that point’s distance to the city centre (a single fixed anchor point per city), the ring assignment is arithmetic:

ring = floor( distance_in_metres / 1000 ) + 1

So ring = 1 is the 0–1 km disc around the centre, ring = 2 is 1–2 km, and so on. Because a typical cadastral parcel is far smaller than a kilometre, the point-in-polygon method described above is used to assign each parcel to just one ring.

The robustness and perturbation harness

A headline such as “most inner-5 km residential land is restricted” rests on a chain of interpretive choices: the metres-to-storeys ratio, how heritage is treated, where the 5 km line falls, how small a sliver still counts as a parcel.

To prove the result is not an artefact of those choices, the entire pipeline is re-run under a battery of perturbations and the movement in each city’s headline is recorded. Each perturbation is a mechanical knob; turning it tests one assumption.

PerturbationWhat it varies, mechanicallyDirection
Carve-out envelope (strict / default / permissive)Progressively removes parcels from “restricted” wherever a generous reading might permit more.One-sided—the baseline is the upper bound.
Heritage-as-builtStops counting heritage land as restricted where it is already developed above a density threshold (swept at 20 / 40 / 60 / 100 dwellings per hectare).One-sided—relaxes restriction.
Storey-cap bindingVaries whether a 2-storey cap is treated as actually binding.
Metres-to-storeys sweepVaries the 3.1 m + 1 m conversion assumption away from its default.Bidirectional.
Random flag noiseRandomly flips 1% / 5% / 10% of parcel flags, across three random seeds.Bidirectional—confirms no handful of misclassified parcels drives the result.
Radius sweepRecomputes the headline at 3, 4, 5, 6, 7 and 10 km.Bidirectional—the “within 5 km” figure can’t be cherry-picked from one radius.
Minimum parcel-size sweepDrops parcels below 100 / 500 / 1000 m².One-sided—confirms strata slivers and mis-tagged road reserves aren’t carrying the result.
Density-decile breakdownBuckets parcels by current dwellings-per-hectare.Diagnostic—shows where on the density gradient the restriction sits.

We use random flag noise and carve-out as different tools. Flag noise tests fragility—would a small rate of misclassification move the answer? The carve-out envelope tests interpretation—how far does the answer move if every borderline call goes the permissive way? This is to ensure that the Atlas’s results are robust to both error and reasonable disagreement.

And indeed, the Atlas’s key findings hold under every perturbation, including the adversarial ones.

The quantitative band is tighter for some cities than others—Hobart and the smaller capitals barely move, while Melbourne and Sydney are the most methodology-dependent due to high heritage restriction concentration in the first five kilometres.

Reform-uplift mechanics (in brief)

The “X extra homes” reform figures are produced by a parallel computation that reuses the same parcel base as the above.

Mechanically, each reform is scored lot by lot: every residential lot is asked whether the rule would let it build more than current controls already allow. Then, each lot is gated through a lot-size-and-frontage cascade (stepped down to the tallest form its actual shape can hold), ensuring that each lot takes the maximum uplift and is only counted once. Only the net increase over current controls is credited.

The results are then ingested

Finally, after the outputs above are calculated and outputted, they are ingested by the front-end for display in the Australian Zoning Atlas. And here we are!