{
  "slug": "maputo",
  "name": "Maputo",
  "country": "Mozambique",
  "blurb": "Mozambique's capital, on the Indian Ocean coast at the mouth of the Maputo River, repeatedly struck by major tropical cyclones including Idai in 2019.",
  "generated_at": "2026-08-23T12:17:49+00:00",
  "city": {
    "population": 2384312,
    "ucdb_population": 3533370,
    "area_km2": 567.6,
    "ucdb_name": "Maputo",
    "center": [
      -25.9655,
      32.5832
    ],
    "bounds": [
      -25.9897,
      32.4018,
      -25.695,
      32.6919
    ],
    "h3_resolution": 8,
    "cells": 695
  },
  "score": {
    "overall": 32.5,
    "band": "Moderate"
  },
  "indicators": [
    {
      "key": "flood",
      "label": "Flood",
      "description": "Expected annual inundation depth from river and coastal flooding combined, population-weighted across the city. From JRC CEMS-GloFAS river maps at 90 m (seven return periods) and WRI Aqueduct coastal maps (six). Both models are undefended: they simulate water without levees, sea walls or pumping.",
      "unit": "m/year",
      "icon": "droplets",
      "raw_value": 0.005596577186132039,
      "score": 32.503813474500745,
      "weight": 1.0,
      "detail": {
        "population_in_100y_floodplain_pct": 5.5,
        "river_100y_share_pct": 5.52,
        "river_10y_share_pct": 3.22,
        "coastal_100y_share_pct": 0.0,
        "population_in_100y_floodplain": 131672,
        "population_in_severe_100y_flood_pct": 5.5,
        "severe_depth_threshold_m": 0.5,
        "max_100y_depth_m": 5.52,
        "river_expected_annual_depth_m": 0.005597,
        "coastal_expected_annual_depth_m": 0.0,
        "dominant_source": "river",
        "coastal_included": true,
        "undefended": true,
        "river_resolution_m": 90,
        "river_return_periods": [
          10,
          20,
          50,
          75,
          100,
          200,
          500
        ],
        "coastal_return_periods": [
          10,
          25,
          50,
          100,
          250,
          500
        ]
      },
      "unavailable_reason": null
    },
    {
      "key": "earthquake",
      "label": "Earthquake",
      "description": "Distance-decayed, magnitude-weighted rate of observed earthquakes around the city, from the USGS ANSS catalogue.",
      "unit": "index/year",
      "icon": "waves",
      "raw_value": 0.007736992125151672,
      "score": 0.0,
      "weight": 1.0,
      "detail": {
        "events": 48,
        "catalogue_years": 56,
        "catalogue_from": 1970,
        "min_magnitude": 4.5,
        "search_radius_km": 500.0,
        "largest_magnitude": 5.6,
        "events_m6_within_100km": 0,
        "events_within_100km": 0
      },
      "unavailable_reason": null
    },
    {
      "key": "cyclone",
      "label": "Cyclone",
      "description": "Annual rate of tropical cyclone passages near the city, weighted by the sustained wind speed at closest approach. From NOAA IBTrACS, 1980 onwards.",
      "unit": "events/year",
      "icon": "tornado",
      "raw_value": 0.02712037267072246,
      "score": 16.05411146976189,
      "weight": 1.0,
      "detail": {
        "storms": 4,
        "storms_per_year": 0.09,
        "typhoon_strength_storms": 0,
        "strongest_wind_kt": 55,
        "strongest_storm": "Unnamed",
        "record_years": 46,
        "record_from": 1980,
        "influence_radius_km": 200.0
      },
      "unavailable_reason": null
    },
    {
      "key": "wildfire",
      "label": "Wildfire",
      "description": "Annual satellite fire-detection density in the vegetated ring around the city, from NASA FIRMS VIIRS 375 m.",
      "unit": "detections/1000km2/year",
      "icon": "flame",
      "raw_value": 122.55271903574425,
      "score": 88.81838523887836,
      "weight": 1.0,
      "detail": {
        "detections_in_ring": 28933,
        "detections_per_year": 2411.1,
        "record_years": 12,
        "record_from": 2013,
        "buffer_km": 20.0,
        "sensor": "VIIRS S-NPP 375 m",
        "max_cell_density": 357.57
      },
      "unavailable_reason": null
    },
    {
      "key": "heat",
      "label": "Extreme heat",
      "description": "Maximum temperature of the warmest month (BIO5, 1981-2010), averaged across the city. An absolute measure, comparable between climate zones. It does not account for humidity, so it understates the danger of humid tropical heat.",
      "unit": "°C",
      "icon": "thermometer-sun",
      "raw_value": 28.625987313277417,
      "score": 34.50394925310967,
      "weight": 1.0,
      "detail": {
        "warmest_month_max_c": 28.6,
        "hottest_cell_c": 29.7,
        "period": "1981-2010",
        "variable": "BIO5, maximum temperature of the warmest month",
        "humidity_included": false,
        "warm_days_now_pct": 17.7,
        "warm_days_1970s_pct": 14.7,
        "warm_days_change_pp": 3.1,
        "warm_days_history": [
          [
            "1970s",
            14.7
          ],
          [
            "1980s",
            8.8
          ],
          [
            "1990s",
            10.7
          ],
          [
            "2000s",
            16.6
          ],
          [
            "2010s",
            17.7
          ]
        ],
        "warm_days_projections": [
          [
            "SSP1-2.6, 2030s",
            18.7
          ],
          [
            "SSP5-8.5, 2030s",
            15.1
          ]
        ],
        "warm_days_note": "TX90p, the share of days above this city's own 1961-1990 90th percentile. A warming trend, not a heat level - shown for context and deliberately excluded from the score."
      },
      "unavailable_reason": null
    },
    {
      "key": "air_quality",
      "label": "Air quality",
      "description": "Population-weighted annual mean PM2.5 concentration. A chronic hazard rather than an episodic one - it harms through years of exposure, not in a single event - but by mortality it is the largest hazard on this site.",
      "unit": "µg/m³",
      "icon": "wind",
      "raw_value": 10.0,
      "score": 23.137821315975913,
      "weight": 1.0,
      "detail": {
        "pm25_ugm3": 10.0,
        "who_guideline_ugm3": 5.0,
        "times_who_guideline": 2.0,
        "premature_deaths_per_year": 335,
        "history": [
          [
            "2000",
            11.0
          ],
          [
            "2005",
            10.0
          ],
          [
            "2010",
            9.0
          ],
          [
            "2015",
            11.0
          ],
          [
            "2020",
            10.0
          ]
        ],
        "chronic": true,
        "spatially_uniform": true
      },
      "unavailable_reason": null
    }
  ],
  "missing_indicators": [],
  "profile": [
    {
      "key": "solar",
      "label": "Solar potential",
      "value": 4.33,
      "unit": "kWh/kWp per day",
      "note": "Photovoltaic output for a standard panel. A resource, not a hazard.",
      "source": "World Bank Global Solar Atlas 2.0",
      "icon": "sun"
    },
    {
      "key": "mean_temperature",
      "label": "Mean temperature",
      "value": 22.7,
      "unit": "°C",
      "note": "Annual mean, 2010s. Shown for context; the heat score measures departure from local normal, not absolute warmth.",
      "source": "GHS-UCDB climate reanalysis",
      "icon": "thermometer"
    },
    {
      "key": "greenness",
      "label": "Greenness",
      "value": 0.4,
      "unit": "NDVI",
      "note": "Mean vegetation index across the built-up area. Higher values moderate urban heat.",
      "source": "Landsat via GHS-UCDB",
      "icon": "trees"
    },
    {
      "key": "hospitals",
      "label": "Hospitals",
      "value": 1.5,
      "unit": "per 100,000 people",
      "note": "Mapped health facilities per head. A rough proxy for capacity to respond, and dependent on how completely the country is mapped.",
      "source": "healthsites.io via GHS-UCDB",
      "icon": "hospital"
    },
    {
      "key": "elevation",
      "label": "Average elevation",
      "value": 34.0,
      "unit": "m",
      "note": "Mean ground height across the urban centre.",
      "source": "Copernicus GLO-90",
      "icon": "mountain"
    }
  ],
  "validation": {
    "reference": "GHS-UCDB R2024A published statistics",
    "passed": false,
    "failures": 2,
    "warnings": 2,
    "checks": [
      {
        "key": "urban_area",
        "label": "Urban centre area",
        "ours": 567.6,
        "reference": 570.0,
        "unit": "km²",
        "reference_attribute": "GC_UCA_KM2_2025",
        "reference_source": "GHS-UCDB",
        "warn_at": 0.02,
        "fail_at": 0.05,
        "note": "Same polygon measured twice. Disagreement means our projection or area arithmetic is wrong.",
        "informational": false,
        "comparable": true,
        "absolute_floor": null,
        "relative_difference": 0.004,
        "status": "ok"
      },
      {
        "key": "population",
        "label": "Population",
        "ours": 2384312,
        "reference": 3533370.361,
        "unit": "people",
        "reference_attribute": "GC_POP_TOT_2020",
        "reference_source": "GHS-POP via GHS-UCDB",
        "warn_at": 0.25,
        "fail_at": 0.6,
        "note": "Two different global population products (WorldPop against GHS-POP). They routinely differ by 10-20% for the same city.",
        "informational": false,
        "comparable": true,
        "absolute_floor": null,
        "relative_difference": 0.325,
        "status": "warn"
      },
      {
        "key": "river_flood_rp100",
        "label": "Population in the 1-in-100-year river flood plain",
        "ours": 5.52,
        "reference": 1.57,
        "unit": "%",
        "reference_attribute": "EX_100_SHP_2020",
        "reference_source": "Baugh et al. (2024) via GHS-UCDB",
        "warn_at": 0.25,
        "fail_at": 0.5,
        "note": "Same flood model, independently aggregated. This is the check that would have caught the 90 m/1 km resolution bug.",
        "informational": false,
        "comparable": true,
        "absolute_floor": 1.5,
        "relative_difference": 2.516,
        "status": "fail"
      },
      {
        "key": "river_flood_rp10",
        "label": "Population in the 1-in-10-year river flood plain",
        "ours": 3.22,
        "reference": 0.22,
        "unit": "%",
        "reference_attribute": "EX_010_SHP_2020",
        "reference_source": "Baugh et al. (2024) via GHS-UCDB",
        "warn_at": 0.25,
        "fail_at": 0.5,
        "note": "Same flood model, independently aggregated. This is the check that would have caught the 90 m/1 km resolution bug.",
        "informational": false,
        "comparable": true,
        "absolute_floor": 1.5,
        "relative_difference": 13.636,
        "status": "fail"
      },
      {
        "key": "coastal_flood",
        "label": "Population exposed to coastal flood",
        "ours": 0.0,
        "reference": 0.05,
        "unit": "%",
        "reference_attribute": "EX_CF2_SHP_2020",
        "reference_source": "Vousdoukas et al. (2018) via GHS-UCDB",
        "warn_at": 0.35,
        "fail_at": null,
        "note": "Investigated 2026-08-22: this gap is a model difference, not an aggregation bug. Aqueduct's historical coastal layer puts almost no water over Tokyo Bay (101 pixels above 1 cm in the whole city window), while UCDB's two coastal scenarios track the low-elevation coastal zone closely (CF2 8.9% against 8.2% of population below 5 m; CF1 21.0% against 17.2% below 10 m). Aqueduct appears to understate enclosed bays. Aqueduct is kept because it ships rasters and UCDB publishes only city totals, but a better coastal source is an open task.",
        "informational": true,
        "comparable": true,
        "absolute_floor": null,
        "relative_difference": 1.0,
        "status": "warn"
      },
      {
        "key": "cyclone_wind",
        "label": "Cyclone wind exposure",
        "ours": 0,
        "reference": 0.0,
        "unit": "storms within 200 km / % of population in category-1 wind",
        "reference_attribute": "EX_100_S1P_2020",
        "reference_source": "GHS-UCDB cyclone wind exposure",
        "warn_at": null,
        "fail_at": null,
        "note": "Not the same quantity, so no ratio is computed: we count storm passages within 200 km, UCDB models whether category-1 wind actually reaches the built-up area. Tokyo reads 24 near-passages against 0% population in category-1 wind, which is consistent - typhoons pass close often, and hurricane-force wind rarely lands on the city. Shown side by side so a qualitative contradiction would be visible.",
        "informational": true,
        "comparable": false,
        "absolute_floor": null,
        "relative_difference": null,
        "status": "ok"
      }
    ]
  }
}