Layers & zoom
What appears at which zoom, from the region shell up to the parcel ceiling. Numbers measured from the shipping map.
Zoom gates
< 11The region shellLGA fills as invisible click targets — they exist ONLY below 11 — with the urban footprint at 0.32.11The council fabricParcels, zoning and every constraint overlay share ONE gate: COUNCIL_MINZOOM.13.2Cadastre linesBoundary strokes fade in 0.35 → 1 between 13.2 and 13.8, and the width grows 0.4 → 1.1 toward z19.13.6Selection floorThe viewport streaming that resolves a clicked lot cannot run below it, so no parcel framing lands under it.14BuildingsFootprint tiles begin; the extrusions themselves fade in from 14.5 (see 3D & massing).14.2Council arrivalThe default zoom a council opens at. Every layer's gate sits AT or BELOW it.18Parcel ceilingParcel fits never land deeper.Code
// one constant, shared by parcels, zoning and all four hazard overlays
const COUNCIL_MINZOOM = 11
map.addLayer({
id: "lots-line",
type: "line",
source: "lots",
"source-layer": "lots",
minzoom: 13.2, // the gate lives on the LAYER, not only the source
paint: {
// fade in over half a level; grow the width so an overzoomed lot stays a line
"line-opacity": ["interpolate", ["linear"], ["zoom"], 13.2, 0.35, 13.8, 1],
"line-width": ["interpolate", ["linear"], ["zoom"],
13.2, 0.4, 15, 0.5, 17.5, 0.7, 19, 1.1]
}
})Rules
- Put the gate on the LAYER, not only the source. A source-level
minzoomholds in one serving mode and silently vanishes in the other. - Give every layer of one kind the same named constant. Parcels, zoning and all four hazard overlays share
COUNCIL_MINZOOM. - Keep every gate AT or BELOW the council arrival zoom of 14.2. A layer gated above it looks broken on arrival.
- Leave source
maxzoomat the baked maximum — lots 15, overlays 14 — and let everything deeper overzoom. - Never bake tiles deeper to chase a zoom level. Vector geometry scales; the tileset does not need to.
- Fade everything in. Strokes over half a level, buildings over a full level, the basemap raster over 300 ms. Nothing pops.
- Grow a hairline's width with zoom. The cadastre goes 0.4 → 1.1 by z19, so an overzoomed lot still reads as a line.
Behavior & Anatomy
Parcels, zoning and every constraint overlay arrive together, at 11, because half the layers arriving before the other half reads as a broken load rather than as a design. The region view below it is for choosing a council, not reading one — which is why the LGA fills exist only there, as invisible click targets, and vanish the moment you are inside a council.
Why a gate belongs on the layer
A source-level minzoom holds in one serving mode and silently vanishes in the other — the archive's own TileJSON wins, and the zoom range the code passes is simply ignored. The layer's gate holds in both. “Silently” is the operative word: nothing errors, the map just starts drawing parcels over a whole state.
Why 14.2 is the number everything else answers to
It is the zoom a council opens at, so it is the first frame anyone sees. Every layer's gate sits at or below it, because a layer gated above the arrival zoom looks broken on arrival — the utility mains learned this the expensive way, carrying minzoom 15 against a default open zoom of 14.2 and therefore being invisible until someone zoomed in without being told to.
Overzoom is free; re-baking is not
Source maxzoom is each layer's baked maximum — lots 15, overlays 14 — and everything deeper is overzoom: free, and sharp, because vector geometry scales. Baking deeper to chase a zoom level costs a pipeline run per council and buys nothing a client-side scale did not already give.
Nothing pops
A layer that appears at full strength in one frame reads as an error even when it is correct. So the cadastre fades 0.35 → 1 over half a level rather than popping at 13.2, buildings fade over a full level, and the basemap raster crosses in over 300 ms. The boundary width also grows toward the maximum — at a flat 0.5 the overzoomed fabric read faint at z18–19, and a hairline you have to look for is a hairline that is not doing its job.
Gates are stated once and shared
Four hazard overlays — flood, character, bushfire, landslide — share one constant. The day a fifth arrives it inherits the behaviour instead of inventing a neighbour to it, and nobody has to notice that the new one is 0.2 out.