|
| 1 | +# International Charter on Space and Major Disasters |
| 2 | + |
| 3 | +The International Charter on Space and Major Disasters coordinates satellite data delivery for disaster response worldwide. Charter activations provide satellite imagery and analysis products to assist civil protection authorities. |
| 4 | + |
| 5 | +## Collections |
| 6 | + |
| 7 | +Charter data maps to three Monty collections: |
| 8 | + |
| 9 | +- **Name**: International Charter - Events |
| 10 | +- **Code**: `charter-events` |
| 11 | +- **Source organisation**: International Charter on Space and Major Disasters |
| 12 | +- **Source organisation code**: CHARTER |
| 13 | +- **Source URL**: <https://disasterscharter.org> |
| 14 | +- **STAC Catalog**: <https://supervisor.disasterscharter.org/api/> |
| 15 | +- **Data License**: Charter Activation Data License (public for Events/Hazards; partner access for Response) |
| 16 | +- **Source for**: event, hazard, response |
| 17 | +- **Temporal Coverage**: 2000-11-05 onwards (Charter formation) |
| 18 | + |
| 19 | +## Data Access |
| 20 | + |
| 21 | +### API Endpoints |
| 22 | + |
| 23 | +```bash |
| 24 | +# Activation (Event source) - use direct pattern |
| 25 | +https://supervisor.disasterscharter.org/api/activations/act-{activationID} |
| 26 | + |
| 27 | +# Example: Multi-hazard (flood + landslide) in Brazil |
| 28 | +curl -s https://supervisor.disasterscharter.org/api/activations/act-1019 | jq |
| 29 | + |
| 30 | +# Area (Hazard source) - links from activations work |
| 31 | +https://supervisor.disasterscharter.org/api/activations/act-{id}/areas/{area_slug}.json |
| 32 | +``` |
| 33 | + |
| 34 | +> [!IMPORTANT] |
| 35 | +> Known API quirks: |
| 36 | +> - Calls/Activations catalog endpoints are slow (dynamically generated) |
| 37 | +> - Activation catalog `self` links point to `.json` suffix but return HTTP 500 - omit suffix |
| 38 | +> - Direct activation pattern above is reliable |
| 39 | +> - Area links from activation items work correctly |
| 40 | +
|
| 41 | +**Alternative browsing**: [STAC Index](https://stacindex.org/catalogs/disasters-charter-mapper-catalog) |
| 42 | + |
| 43 | +### Discover Available Fields |
| 44 | + |
| 45 | +Audit upstream `properties` keys across activation range (requires [jq](https://jqlang.github.io/jq/)): |
| 46 | + |
| 47 | +```bash |
| 48 | +for i in $(seq 900 1020); do |
| 49 | + curl -s --max-time 5 "https://supervisor.disasterscharter.org/api/activations/act-$i" \ |
| 50 | + | jq -r '.properties | keys[]?' 2>/dev/null |
| 51 | +done | sort -u |
| 52 | +``` |
| 53 | + |
| 54 | +## Entity Mapping |
| 55 | + |
| 56 | +| Charter Entity | Monty Type | ID Pattern | Collection | Status | |
| 57 | +|----------------|------------|------------|------------|--------| |
| 58 | +| Activation | Event | `charter-event-{activation_id}` | `charter-events` | ✅ Ready | |
| 59 | +| Area (AoI) | Hazard | `charter-hazard-{activation_id}-{area_slug}-{type}` | `charter-hazards` | ✅ Ready | |
| 60 | +| Acquisition/Dataset/VAP | Response | `charter-response-{activation_id}-*` | `charter-response` | ⚠️ S3 access TBD | |
| 61 | + |
| 62 | + |
| 63 | + |
| 64 | +### Activation → Event |
| 65 | + |
| 66 | +| Charter Field | Monty Field | Notes | |
| 67 | +|--------------|-------------|-------| |
| 68 | +| `id: "act-1019"` | `id: "charter-event-1019"` | Prefix with `charter-event-` | |
| 69 | +| — | `collection: "charter-events"` | **Required** for STAC compliance | |
| 70 | +| `properties[" |
| 71 | +disaster:type"]` | `monty:hazard_codes` | Map via [hazard codes table](#hazard-codes), apply `hazard_profiles.get_canonical_hazard_codes()` | |
| 72 | +| `properties["disaster:country"]` | `monty:country_codes[0]` | Already ISO 3166-1 alpha-3 | |
| 73 | +| `properties.title` | `title` | Direct copy | |
| 74 | +| `properties.datetime` | `datetime` | Event onset time | |
| 75 | +| `geometry` (Point) | `geometry` | Direct copy | |
| 76 | +| `links[rel=self]` | `links[rel=via]` | Source reference | |
| 77 | + |
| 78 | +> [!IMPORTANT] |
| 79 | +> **Onset datetime**: Use `properties.datetime` as the canonical event time. This field equals `properties.created` and matches the embedded `<disasterDate>` in `cpe:cos2_xml`. Do **not** use `properties.updated` - it reflects processing close date (often weeks later). |
| 80 | +
|
| 81 | +**Multi-hazard events**: If `disaster:type: ["flood", "landslide"]`, include all hazard codes in the Event item (e.g., both MH0600/FL/nat-hyd-flo-flo and MH0901/LS/nat-geo-mmd-lan). |
| 82 | + |
| 83 | +**Correlation ID**: Generate using standard Monty algorithm from event time, ISO3 country, primary hazard, spatial block, and episode - not Charter `activation_id`. |
| 84 | + |
| 85 | +### Area → Hazard |
| 86 | + |
| 87 | +| Charter Field | Monty Field | Notes | |
| 88 | +|--------------|-------------|-------| |
| 89 | +| Area `id` | `id` | Pattern: `charter-hazard-{activation_id}-{area_slug}-{type}` | |
| 90 | +| — | `collection: "charter-hazards"` | **Required** for STAC compliance | |
| 91 | +| `geometry` (Polygon) | `geometry` | Full AoI polygon | |
| 92 | +| `properties["disaster:type"]` | `monty:hazard_codes` | **One code per item** (see multi-hazard note below) | |
| 93 | +| `properties.title` | `title` | Area name (e.g., "Juiz de Fora") | |
| 94 | +| `properties.datetime` | `datetime` | Inherit from parent Activation | |
| 95 | +| `properties.description` | `monty:hazard_detail`, `charter:area_priority` | Parse radius and priority from description text | |
| 96 | +| Parent Activation | `links[rel=derived_from]` | Link to parent Event: `../charter-events/charter-event-{id}.json` | |
| 97 | + |
| 98 | +> [!IMPORTANT] |
| 99 | +> **Multi-hazard strategy**: Create **one Hazard item per disaster type** (following GDACS precedent). For an Area with `disaster:type: ["flood", "landslide"]`: |
| 100 | +> - `charter-hazard-1019-juiz-de-fora-flood` with codes MH0600, FL, nat-hyd-flo-flo |
| 101 | +> - `charter-hazard-1019-juiz-de-fora-landslide` with codes MH0901, LS, nat-geo-mmd-lan |
| 102 | +> |
| 103 | +> Same geometry, different `monty:hazard_codes`. This satisfies the Monty schema requirement of exactly one UNDRR-ISC 2025 code per Hazard item. |
| 104 | +
|
| 105 | +#### Hazard Detail |
| 106 | + |
| 107 | +Parse Area `description` field for severity and metadata: |
| 108 | + |
| 109 | +| Pattern | Monty Field | Example | |
| 110 | +|---------|-------------|---------| |
| 111 | +| `Radius (km): X` | `monty:hazard_detail.severity_value: X` | `8` | |
| 112 | +| `Radius (km): X` | `monty:hazard_detail.severity_unit: "km"` | `"km"` | |
| 113 | +| `Radius (km): X` | `monty:hazard_detail.severity_label: "Area radius"` | `"Area radius"` | |
| 114 | +| `Priority: N` | `charter:area_priority: N` | `1` (not a severity metric) | |
| 115 | + |
| 116 | +**CPE Status Mapping**: Charter Areas may include `cpe:status.stage` field. Map to `monty:hazard_detail.estimate_type`: |
| 117 | + |
| 118 | +| CPE Stage | Estimate Type | Notes | |
| 119 | +|-----------|---------------|-------| |
| 120 | +| `notificationNew` | `primary` | First-pass AoI / notification phase | |
| 121 | +| `readyToDeliver` | `secondary` | Delivered-handoff items | |
| 122 | +| `readyToArchive` | `secondary` | Archived items | |
| 123 | +| *(unknown)* | `primary` | Default for unrecognized stages | |
| 124 | + |
| 125 | +This is an interim mapping pending full CPE stage documentation. |
| 126 | + |
| 127 | +### Response Items |
| 128 | + |
| 129 | +**Source**: Acquisition, Dataset, and Value-Added Product (VAP) items in Charter catalog |
| 130 | +**Status**: ⚠️ Requires S3 access or partner credentials - implementation pending |
| 131 | + |
| 132 | +Response items will link to parent Event/Hazard via `monty:corr_id`. Contact Zachary Foltz (zachary.foltz@acri-st.fr) for access details. |
| 133 | + |
| 134 | +## Hazard Codes |
| 135 | + |
| 136 | +Charter `disaster:type` values map to Monty hazard codes: |
| 137 | + |
| 138 | +| Charter Type | UNDRR-ISC 2025 | GLIDE | EM-DAT | Notes | |
| 139 | +|--------------|----------------|-------|---------|-------| |
| 140 | +| flood | MH0600 | FL | nat-hyd-flo-flo | Flooding (refine to MH0603/MH0604 if flash/riverine) | |
| 141 | +| fire | MH1301 | WF | nat-cli-wil-for | Wildfire / forest fire | |
| 142 | +| earthquake | GH0101 | EQ | nat-geo-ear-gro | Ground shaking | |
| 143 | +| volcano | GH0201 | VO | nat-geo-vol | Volcanic eruption | |
| 144 | +| storm_hurricane | MH0400 | ST | nat-met-sto | Generic storm (refine to MH0403 if tropical) | |
| 145 | +| cyclone | MH0403 | TC | nat-met-sto-tro | Tropical cyclone | |
| 146 | +| tsunami | GH0301 | TS | nat-geo-ear-tsu | | |
| 147 | +| landslide | MH0901 | LS | nat-geo-mmd-lan | | |
| 148 | +| snow_hazard | MH1202 | SW | nat-met-ext-col | Snow/winter hazard | |
| 149 | +| ice | MH0801 | CW | nat-met-ext-col | Ice storm/icing | |
| 150 | +| oil_spill | TH0300 | — | tec-ind-che | Chemical spill (technological) | |
| 151 | +| explosive_event | TH0600 | — | tec-ind-exp | Explosion (technological) | |
| 152 | +| other | — | OT | — | Requires manual review - no UNDRR code | |
| 153 | + |
| 154 | +**Deprecated types** (older activations): |
| 155 | +- `storm_hurricane_rural`, `storm_hurricane_urban` → map as `storm_hurricane` |
| 156 | +- `flood_large` → MH0604, `flood_flash` → MH0603 |
| 157 | + |
| 158 | +> [!NOTE] |
| 159 | +> - UNDRR-ISC 2025 code is **required** for Hazard items (exactly one per item) |
| 160 | +> - GLIDE and EM-DAT codes are optional but recommended for interoperability |
| 161 | +> - `other` has no UNDRR code - manual review required before producing Hazard item |
| 162 | +> - Deprecated types (`storm_hurricane_rural`, `flood_large`, etc.) mapped in CSV |
| 163 | +> - Apply `hazard_profiles.get_canonical_hazard_codes()` after mapping for standard format |
| 164 | +
|
| 165 | +## Implementation Guide |
| 166 | + |
| 167 | +### Step 1: Fetch and Map Activation |
| 168 | + |
| 169 | +```bash |
| 170 | +# Fetch activation |
| 171 | +curl -s https://supervisor.disasterscharter.org/api/activations/act-1019 > act-1019.json |
| 172 | + |
| 173 | +# Extract fields |
| 174 | +cat act-1019.json | jq '{ |
| 175 | + activation_id: .properties["disaster:activation_id"], |
| 176 | + types: .properties["disaster:type"], |
| 177 | + country: .properties["disaster:country"], |
| 178 | + datetime: .properties.datetime, |
| 179 | + geometry: .geometry |
| 180 | +}' |
| 181 | +``` |
| 182 | + |
| 183 | +Create Event item: |
| 184 | + |
| 185 | +```json |
| 186 | +{ |
| 187 | + "stac_version": "1.0.0", |
| 188 | + "stac_extensions": ["https://ifrcgo.org/monty-stac-extension/v1.1.0/schema.json"], |
| 189 | + "type": "Feature", |
| 190 | + "id": "charter-event-1019", |
| 191 | + "collection": "charter-events", |
| 192 | + "geometry": {"type": "Point", "coordinates": [-43.202, -21.547]}, |
| 193 | + "properties": { |
| 194 | + "title": "[Act-1019/Call-1166] Flood in Brazil", |
| 195 | + "datetime": "2026-02-24T17:09:00Z", |
| 196 | + "monty:country_codes": ["BRA"], |
| 197 | + "monty:hazard_codes": ["MH0600", "FL", "nat-hyd-flo-flo", "MH0901", "LS", "nat-geo-mmd-lan"], |
| 198 | + "monty:corr_id": "20260224T170900-BRA-HM-FLOOD-001-GCDB", |
| 199 | + "roles": ["event", "source"] |
| 200 | + }, |
| 201 | + "links": [ |
| 202 | + {"rel": "via", "href": "https://supervisor.disasterscharter.org/api/activations/act-1019"} |
| 203 | + ] |
| 204 | +} |
| 205 | +``` |
| 206 | + |
| 207 | +### Step 2: Fetch and Map Areas |
| 208 | + |
| 209 | +```bash |
| 210 | +# Extract area links |
| 211 | +cat act-1019.json | jq -r '.links[] | |
| 212 | + select(.rel == "related" and .title | startswith("[Area]")) | |
| 213 | + .href' |
| 214 | + |
| 215 | +# Fetch area |
| 216 | +curl -s "https://supervisor.disasterscharter.org/api/activations/act-1019/areas/Juiz_de_Fora-QVwJEJDB0IZNzAO3SVGtOw__.json" > area.json |
| 217 | +``` |
| 218 | + |
| 219 | +Create Hazard item (one per disaster type): |
| 220 | + |
| 221 | +```json |
| 222 | +{ |
| 223 | + "stac_version": "1.0.0", |
| 224 | + "stac_extensions": ["https://ifrcgo.org/monty-stac-extension/v1.1.0/schema.json"], |
| 225 | + "type": "Feature", |
| 226 | + "id": "charter-hazard-1019-juiz-de-fora-flood", |
| 227 | + "collection": "charter-hazards", |
| 228 | + "geometry": {"type": "Polygon", "coordinates": [[[-43.3, -21.6], ...]]}, |
| 229 | + "properties": { |
| 230 | + "title": "Juiz de Fora", |
| 231 | + "datetime": "2026-02-24T17:09:00Z", |
| 232 | + "monty:country_codes": ["BRA"], |
| 233 | + "monty:hazard_codes": ["MH0600", "FL", "nat-hyd-flo-flo"], |
| 234 | + "monty:corr_id": "20260224T170900-BRA-HM-FLOOD-001-GCDB", |
| 235 | + "monty:hazard_detail": { |
| 236 | + "severity_value": 8, |
| 237 | + "severity_unit": "km", |
| 238 | + "severity_label": "Area radius" |
| 239 | + }, |
| 240 | + "charter:area_priority": 1, |
| 241 | + "roles": ["hazard", "source"] |
| 242 | + }, |
| 243 | + "links": [ |
| 244 | + {"rel": "derived_from", "href": "../charter-events/charter-event-1019.json"} |
| 245 | + ] |
| 246 | +} |
| 247 | +``` |
| 248 | + |
| 249 | +### Step 3: Validate |
| 250 | + |
| 251 | +```bash |
| 252 | +npm run check-examples |
| 253 | +``` |
| 254 | + |
| 255 | +## Examples |
| 256 | + |
| 257 | +| Activation | Type | Country | Date | Files | |
| 258 | +|------------|------|---------|------|-------| |
| 259 | +| Act-896 | Earthquake | ECU | Apr 2016 | [charter-event-896.json](../../../../examples/charter-events/charter-event-896.json) | |
| 260 | +| Act-1019 | Flood + Landslide | BRA | Feb 2026 | Multi-hazard example (implementation reference) | |
| 261 | + |
| 262 | +## Reference Files |
| 263 | + |
| 264 | +Upstream data examples (actual Charter API responses): |
| 265 | +- [act-1000-activation.json](./act-1000-activation.json) - Single hazard activation (earthquake) |
| 266 | +- [act-1000-area-epi.json](./act-1000-area-epi.json) - Earthquake area example |
| 267 | +- [act-1019-activation.json](./act-1019-activation.json) - Multi-hazard activation (flood + landslide) |
| 268 | +- [act-1019-area-juiz-de-fora.json](./act-1019-area-juiz-de-fora.json) - Flood area example |
| 269 | + |
| 270 | +## Resources |
| 271 | + |
| 272 | +- [International Charter Website](https://disasterscharter.org/) |
| 273 | +- [STAC Index - Charter Catalog](https://stacindex.org/catalogs/disasters-charter-mapper-catalog) |
| 274 | +- [Disaster STAC Extension](https://github.com/Terradue/stac-extensions-disaster) |
| 275 | +- [Monty STAC Extension Spec](../../../../README.md) |
0 commit comments