Ad Slot – Leaderboard

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.

Tip: Write your objective in one sentence first (e.g., “Identify parcels suitable for mixed-use within 800 m of rapid transit, avoiding floodplain and protected areas.”). Every factor should support that sentence.
Ad Slot – Rectangle

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}
    ]
  }
}
Tip: Host a workshop where stakeholders adjust weights live and see the map and score histogram update in real-time.
Ad Slot – Rectangle

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)

  1. Collect layers from Datasets and convert/clean in GIS Tools.
  2. Open GeoAnalyst, add layers, set cell size and CRS, define factors & constraints.
  3. Tune weights with stakeholders and run scenarios; export PNG/PDF with legend and share links.
  4. Document weights and data sources next to each exported map for auditability.
Try a template
GeoLayers Team
We build practical geo-tools for planners, architects, surveyors and developers in South Africa and beyond.
Ad Slot – Rail
Ad Slot – Rectangle