1) Core principles
A great suitability model is transparent, defensible and reproducible. It clearly shows what improves suitability (attractors), what reduces it (detractors), and what outright prohibits development (constraints). Each layer is documented, normalised to a common scale, and combined with explainable weights.
2) Data & quality
- Coverage & currency: Prefer authoritative datasets; note vintage and spatial resolution.
- Spatial resolution: Set your analysis grid/cell size to match decision granularity (e.g., 50–100 m for municipal siting).
- CRS consistency: Reproject all layers to a common CRS; for SA, consider EPSG:3857 for web or EPSG:2054/2053 grids when needed.
- Pre-processing: Snap, dissolve, fill gaps, and validate geometry to avoid sliver effects that skew scores.
3) Normalisation & scoring
Bring every factor onto a common 0–1 scale so they are comparable:
- Min-max (linear): simple and explainable; document min/max sources.
- Piecewise: use thresholds (e.g., >800 m from transit drops score sharply).
- Log or sigmoid: for distance-decay where near things matter much more.
score_factor = (value - min) / (max - min) # min–max
suitability = Σ(weight_i * score_factor_i) # weighted sum
Alternatives include ordered weighted averaging or multi-criteria decision analysis, but keep documentation crystal clear.
4) Weights & transparency
Weights should reflect policy or stakeholder priorities, not “black box” tuning. Keep the total positive weights ~1.0 and publish a short justification for each.
{
"factors": {
"attractors": [
{"id":"near_transit","label":"Near transit","weight":0.35},
{"id":"access_services","label":"Access to services","weight":0.25}
],
"detractors": [
{"id":"steep_slope","label":"Steep slope","weight":-0.20}
]
}
}
5) Constraints & masking
Some areas should be excluded regardless of score (e.g., protected areas, floodlines, runways, safety buffers). Model these as a binary mask and apply them before combining scores.
masked_suitability = where(constraint_mask == 1, 0, suitability)
6) Sensitivity & scenarios
- One-at-a-time (OAT): vary a single weight ±10–20% and examine change.
- Bundles: “Transit-heavy”, “services-heavy”, “risk-averse” preset bundles.
- Target allocation: allocate N units/GLA to top cells and compare spatial spillover.
Show differences with swipe/spyglass maps or a “top-10% cells” overlap layer.
7) Validation & iteration
- Ground truth: compare top cells with recent approvals or high-performing sites.
- Back-casting: test if the model would have picked known good sites from prior years.
- QA: log assumptions, data vintages, and any manual overrides.
8) A reproducible workflow (GeoLayers)
- Collect layers from Datasets and convert/clean in GIS Tools.
- Open GeoAnalyst, add layers, set cell size and CRS, define factors & constraints.
- Tune weights with stakeholders and run scenarios; export PNG/PDF with legend and share links.
- Document weights and data sources next to each exported map for auditability.