Vulnerability Zones

Definition

Vulnerability Zones are geographic areas used for analyzing and visualizing vulnerability levels. They divide the study region into discrete units that can be individually assessed and compared.

Purpose

Vulnerability zones serve several purposes in VERUS:

  1. Provide a spatial framework for vulnerability calculations

  2. Enable comparisons between different areas of a city or region

  3. Create a standardized grid for visualization and mapping

  4. Allow for spatial analysis of vulnerability patterns

Types of Vulnerability Zones

VERUS supports several types of vulnerability zones:

  • Hexagonal Grid: Regular hexagons of uniform size (most common)

  • Administrative Boundaries: Official boundaries like neighborhoods or districts

  • Custom Polygons: User-defined areas of interest

The hexagonal grid is often preferred because:

  • Hexagons have equal distance from center to all edges

  • They tessellate perfectly, avoiding gaps or overlaps

  • Their uniform size allows for fair comparison between areas

  • They’re not influenced by arbitrary administrative boundaries

Creation

Vulnerability zones can be created using the HexagonGridGenerator.

H3-based grid (recommended) — uses Uber’s H3 library for geodesic, pointy-topped hexagons with accurate boundaries. Covers the entire AoI by filling the bounding box, filtering by intersection, and clipping to the exact boundary:

# H3 grid — edge length selects the closest H3 resolution automatically
grid_gen = HexagonGridGenerator(region="Porto, Portugal", edge_length=250, use_h3=True)
hex_grid = grid_gen.run()

# Override the resolution explicitly (0–15)
grid_gen = HexagonGridGenerator(region="Porto, Portugal", use_h3=True, h3_resolution=9)
hex_grid = grid_gen.run()

Manual flat-topped grid (legacy) — projects the bounding box to EPSG:3857, tessellates with regular hexagons and reprojects back to WGS84:

# Legacy manual tessellation
grid_gen = HexagonGridGenerator(region="Porto, Portugal", edge_length=250)
hex_grid = grid_gen.run()

You can also load custom region boundaries from GeoJSON files:

grid_gen = HexagonGridGenerator(region="path/to/boundary.geojson", edge_length=250, use_h3=True)
hex_grid = grid_gen.run()

Note

H3 cells are pointy-topped (rotated ~30° relative to the legacy flat-topped grid). Edge cells are cropped to the AoI boundary, so their geometry may be a polygon with fewer than six vertices. The hex_id column stores the native H3 cell index, enabling spatial joins with other H3-indexed datasets.

Attributes

Each vulnerability zone contains several key attributes:

  • Geometry: The spatial polygon defining the zone

  • Cluster: The urban cluster the zone belongs to

  • Vulnerability Level: The calculated vulnerability value

  • Normalized VL: Vulnerability scaled between 0-1 for comparison

  • Smoothed VL: Vulnerability after spatial smoothing

Importance in Analysis

Vulnerability zones transform point-based PoTI data into a continuous surface of vulnerability values, making it possible to:

  1. Identify high-vulnerability hotspots

  2. Compare different regions within a city

  3. Track changes in vulnerability over time

  4. Provide actionable insights for urban planning and emergency management