OPSIS / open-gira
Geospatial infrastructure + hazard exposure
OPSIS (Open Platform for Systemic Infrastructure Spatial Analysis)
Repository: University of Oxford / GFDRR / World Bank URL: https://global.infrastructureresilience.org/ GitHub: https://github.com/nismod License: Code: MIT | OSM data: ODbL-1.0 | Other data: CC-BY-4.0 Update cadence: Periodic re-runs against updated OSM extracts and hazard models (not real-time)
What This Dataset Is
Global geospatial infrastructure networks (roads, rail, ports, airports, waterways) combined with multi-hazard exposure analysis and damage modelling. This is the primary source for where infrastructure is and how vulnerable it is to climate and natural hazards.
OPSIS is the public face of the Global Infrastructure Resilience Initiative (GIRI). The underlying analysis pipelines come from Oxford's nismod programme.
API Feature Record Structure
Every feature returned by GET /features/{id} has this top-level shape:
| Field | Type | Description |
|---|---|---|
id | Integer | Auto-increment feature ID |
string_id | String | Human-readable ID ({slice}_{index}, e.g. "152_1001") |
layer | String | Layer name (e.g. "road_edges_motorway", "road_edges_primary") |
sublayer | String/null | Optional sublayer |
properties | Object | Asset attributes (mode-specific — see below) |
damages_expected | Array | Expected Annual Damage across hazard/climate scenarios |
damages_return_period | Array | Damage by specific return period |
damages_npv | Array | Net present value damage |
adaptation | Array | Adaptation/mitigation measures |
Data Layers (Transport-Specific)
Roads — properties Schema (31 fields, confirmed from live API)
| Field | Type | Example | Description |
|---|---|---|---|
sector | String | "transport" | Always "transport" |
subsector | String | "road" | Always "road" |
asset_type | String | "motorway", "primary", "secondary", "tertiary" | Road classification (from OSM highway tag) |
_asset_type | String | "road_paved", "road_unpaved" | Internal type for damage curve lookups |
osm_way_id | Integer | 25452113 | Original OpenStreetMap way ID |
segment_id | Integer | 0, 1 | Segment index within a split OSM way |
from_node_id | String | "152_1377" | Network graph source node |
to_node_id | String | "152_535" | Network graph target node |
from_iso_a3 | String | "USA", "KEN" | ISO alpha-3 country of source node |
to_iso_a3 | String | "USA", "KEN" | ISO alpha-3 country of target node |
length_m | Float | 2069.68 | Edge length in metres |
lanes | Integer | 1, 2 | Number of lanes (gap-filled from OSM or defaults) |
width_m | Float | 6.25, 9.5 | Estimated road width in metres |
paved | Boolean | true, false | Whether the road is paved |
bridge | Boolean | true, false | Whether the segment is a bridge |
material | String | "asphalt", "gravel" | Surface material |
tag_lanes | Float/String | 2.0, "" | Raw OSM lanes tag (empty if unmapped) |
tag_surface | String | "asphalt", "" | Raw OSM surface tag |
tag_bridge | String | "" | Raw OSM bridge tag |
tag_maxspeed | Float/String | 50.0, "" | Raw OSM maxspeed (km/h) |
max_speed_kmh | Float | 207.69, 110.0 | Maximum speed (gap-filled/estimated) |
min_speed_kmh | Float | 156.17, 32.075 | Minimum speed (gap-filled/estimated) |
max_tariff | Float | 0.54, 2.4 | Maximum transport tariff (USD/ton-km) |
min_tariff | Float | 0.36, 1.6 | Minimum transport tariff (USD/ton-km) |
tariff_unit | String | "USD/ton-km" | Unit for tariff fields |
max_flow_cost | Float | 1.124 | Maximum flow cost (USD/ton) |
min_flow_cost | Float | 0.749 | Minimum flow cost (USD/ton) |
flow_cost_unit | String | "USD/ton" | Unit for flow cost fields |
rehab_cost_USD_per_km | Float | 4579435.63, 23545.10 | Rehabilitation cost per km |
Layers served: road_edges_motorway, road_edges_trunk, road_edges_primary, road_edges_secondary, road_edges_tertiary
Railways
Rail is included in the gri_osm.roads_and_rail_version_1 extract processor. Schema follows the same pattern as roads with expected differences:
| Field | Expected Values | Notes |
|---|---|---|
sector | "transport" | Same |
subsector | "rail" | Rail-specific |
asset_type | "rail", "light_rail", "subway", "tram" | From OSM railway tag |
tag_gauge | Track gauge value | OSM gauge tag |
tag_electrified | Electrification status | OSM electrified tag |
| Network topology fields | Same pattern as roads | from_node_id, to_node_id, length_m |
Layers: rail_edges, rail_nodes
Ports and Airports
These appear in the visualization platform but are not currently part of the GeoPackage extract service (gri_osm processor covers roads + rail only). Available as point/polygon layers in the web viewer with location, name, country, and hazard exposure.
Damage & Adaptation Arrays
Each feature carries nested arrays for damage modelling. Confirmed structure from live API records:
damages_expected[] — Expected Annual Damage
| Field | Type | Description |
|---|---|---|
ead_amin | Float | EAD annual minimum estimate (USD) |
ead_mean | Float | EAD mean estimate (USD) |
ead_amax | Float | EAD annual maximum estimate (USD) |
eael_amin | Float | Expected Annual Economic Loss — minimum (USD) |
eael_mean | Float | EAEL mean (USD) |
eael_amax | Float | EAEL maximum (USD) |
hazard | String | Hazard type (e.g. "river") |
rcp | String | Climate scenario: "baseline", "rcp4p5", "rcp8p5" |
epoch | Integer | Time period: 1980, 2030, 2050, 2080 |
protection_standard | Integer | Existing protection level (return period years) |
damages_return_period[] — Per Return Period
| Field | Type | Description |
|---|---|---|
exposure | Float | Asset value at risk (USD) |
damage_amin / damage_mean / damage_amax | Float | Damage estimates (USD) |
loss_amin / loss_mean / loss_amax | Float | Economic loss estimates (USD) |
hazard | String | Hazard type |
rcp | String | Climate scenario |
epoch | Integer | Time period |
rp | Integer | Return period in years (25, 50, 100) |
adaptation[] — Adaptation Measures
| Field | Type | Description |
|---|---|---|
hazard | String | Target hazard type |
rcp | String | Climate scenario |
adaptation_name | String | Name/description of measure |
adaptation_protection_level | Float | Protection standard provided (return period years) |
properties | Object | Additional adaptation attributes |
Terminology
| Term | Meaning |
|---|---|
ead | Expected Annual Damage — average annual cost of damage from a hazard |
eael | Expected Annual Economic Loss — indirect losses from disruption |
rcp | Representative Concentration Pathway (climate scenario) |
epoch | Time period for projections (1980=baseline, 2030/2050/2080=future) |
rp | Return period — flood frequency in years |
rehab_cost_USD_per_km | Cost to reconstruct per kilometre |
_asset_type | Internal classification for damage curve lookups |
Access Methods
1. REST APIs (No Authentication)
| API | Base URL | Purpose |
|---|---|---|
| Main API | https://global.infrastructureresilience.org/api/ | Feature queries, pixel drilling |
| Extract API | https://global.infrastructureresilience.org/extract/ | Country data package generation |
| Vector Tiles | https://global.infrastructureresilience.org/vector/ | 36 MVT layers |
OpenAPI specs:
https://global.infrastructureresilience.org/api/openapi.jsonhttps://global.infrastructureresilience.org/extract/openapi.json
Key endpoints:
GET /features/{id} -- single feature with damage/adaptation data
GET /features/sorted-by/{field} -- paginated features with filters (sector, asset_type)
POST /v1/jobs -- submit country extraction (async, returns GeoPackage)
GET /v1/processors -- list available data processors
GET /pixel-driller/point/{lon}/{lat} -- all layer values at a coordinate
2. Extract API — Country GeoPackage Bundles
The Extract API generates national-level data packages on demand. The key transport processor:
gri_osm.roads_and_rail_version_1 — Roads and Rail from GRI OSM, including damage estimates. Output: GeoPackage.
249 country boundaries available. Packages stored at: https://irv-autopkg.s3.eu-west-2.amazonaws.com/{iso3}/
Other available processors include hazard data (flood, cyclone, drought, landslide), population, power infrastructure — see the OpenAPI spec for full list.
3. Bulk Downloads
- Country data starter kits on Zenodo (GeoPackage + GeoTIFF)
- Extract API as above
3. Code Pipelines
| Repository | Purpose |
|---|---|
nismod/open-gira | Core Snakemake analysis pipeline |
nismod/infra-risk-vis | Backend + frontend web app |
nismod/irv-autopkg | Extract API service |
nismod/snail | Spatial network analysis library |
nismod/snkit | Network cleaning/assembly |
Data Formats
| Format | Use |
|---|---|
| GeoPackage (.gpkg) | Primary vector format |
| GeoJSON | Web-friendly vector |
| GeoTIFF / COG | Raster hazard data |
| MVT | Vector tiles |
| Parquet | Large tabular datasets |
Coverage & Quality
| Region | Roads | Rail | Ports | Hazards |
|---|---|---|---|---|
| Europe | Excellent | Excellent | Good | Good |
| North America | Excellent | Good | Good | Good |
| East Asia | Good | Good | Good | Good |
| South/SE Asia | Good | Moderate | Good | Good |
| Sub-Saharan Africa | Moderate | Moderate | Good | Good |
| Latin America | Good | Moderate | Good | Good |
| Pacific Islands | Limited | N/A | Moderate | Good |
Coverage quality is driven by OSM completeness for networks and global hazard model availability for hazard layers.
Key Limitations for Automation
- No traffic volumes — network geometries are well-covered but traffic/demand data is mostly absent
- Static snapshots — not real-time; reflects a point-in-time analysis
- OSM-dependent — quality mirrors OSM completeness, which is uneven
- Modelled damage — EAD and disruption estimates are model outputs, not observed events
- Schema varies by country extraction — different extractions may include different field sets depending on available data
Integration Notes
- Join key to PortWatch: Match OPSIS port geometries to PortWatch
portidfor combined resilience + trade monitoring - Join key to World Bank: Country ISO codes enable linking OPSIS exposure summaries to WDI indicators
- Python stack: GeoPandas, NetworkX, Rasterio, Snail are the core libraries for working with this data
- Full schema reference: Run
open-girapipeline outputs or query the OpenAPI specs for the definitive field list