Insurance & risk

Weather & climate risk — storm impact on shipping and infrastructure

How climate risk teams, reinsurers, and energy companies use NTHMAP to assess weather impact on physical flows.

Weather events — tropical storms, earthquakes, wildfires — have direct physical impacts on shipping, ports, pipelines, and offshore infrastructure. NTHMAP surfaces active events in a queryable layer and lets you instantly see what's inside the impact zone.

The Events layer

NTHMAP ingests:

  • NOAA alerts — hurricanes, tropical storms, marine warnings
  • USGS earthquakes — magnitude 2.5+ in the last 24 hours
  • NASA FIRMS — active wildfire hotspots from MODIS + VIIRS
  • GDELT — conflict events, port closures, strikes
  • NTHMAP editorial — sanctions and strategic overlays

Each event has a lat/lng, radius_km (impact area), and severity (Extreme / Severe / Moderate / Minor). The impact radius renders as a translucent circle on the map so you can see exactly what's underneath.

Single most useful query: what's in the impact zone?

This is the single query that makes NTHMAP uniquely useful for storm-impact assessment:

# Get the event coordinates + radius
EVENT=$(nthmap events list --types hurricane --active --format json | jq '.[0]')
LAT=$(echo "$EVENT" | jq -r .lat)
LNG=$(echo "$EVENT" | jq -r .lng)
RAD_KM=$(echo "$EVENT" | jq -r .radius_km)

# Convert km to approximate lng/lat degrees
DLAT=$(python -c "print($RAD_KM / 111)")
DLNG=$(python -c "import math; print($RAD_KM / (111 * math.cos(math.radians($LAT))))")

# Query vessels in the impact zone
nthmap vessels list --bbox $(python -c "print(f'{$LNG-$DLNG},{$LAT-$DLAT},{$LNG+$DLNG},{$LAT+$DLAT}')") --format json

Or, better, use the draw tool endpoint with a circle polygon:

import nthmap
import math

client = nthmap.Client(api_key="ntm_live_...")

# Get the first active hurricane
events = client.events(types=["hurricane"], active=True)
if not events:
    exit()

event = events[0]

# Build a 64-point circle polygon around it
def circle_polygon(lat, lng, km, n=64):
    R = 6371
    coords = []
    for i in range(n + 1):
        t = (i / n) * 2 * math.pi
        dy = (km / R) * (180 / math.pi)
        dx = dy / math.cos(math.radians(lat))
        coords.append([lng + dx * math.cos(t), lat + dy * math.sin(t)])
    return {"type": "Polygon", "coordinates": [coords]}

geom = circle_polygon(event["lat"], event["lng"], event["radius_km"])
analysis = client.draw_analyze(geojson=geom, draw_type="circle")

print(f"Event: {event['name']} ({event['severity']})")
print(f"  Vessels inside: {analysis['total_vessels']}")
print(f"  Commodity breakdown: {analysis['commodity_breakdown']}")
print(f"  Estimated cargo at risk: {analysis['est_cargo_mt']:,.0f} MT")
print(f"  Infrastructure inside: {len(analysis['infrastructure_inside'])}")
for i in analysis['infrastructure_inside']:
    print(f"    - {i['name']} ({i['asset_type']})")

Output for a hypothetical Cat-4 hurricane over the Gulf of Mexico:

Event: HURRICANE DELTA (Severe)
  Vessels inside: 23
  Commodity breakdown: {'Crude Tanker': 8, 'LNG Carrier': 3, 'Chemical Tanker': 5, 'Bulk Carrier': 7}
  Estimated cargo at risk: 2,380,000 MT
  Infrastructure inside:
    - Sabine Pass LNG (lng_terminal)
    - Galveston Bay refinery (oil_refinery)
    - Port Arthur Refinery (oil_refinery)
    - Bryan Mound SPR (spr)

That's a complete impact assessment in one function call.

Parametric insurance triggers

Parametric insurance products pay out based on measurable parameters rather than assessed losses. A common structure: "pay $X if a hurricane of category Y passes within Z km of a specific asset."

NTHMAP provides the objective measurement:

import nthmap
from geopy.distance import distance

client = nthmap.Client(api_key="ntm_live_...")

# Insured asset
asset_lat, asset_lng = 29.728, -93.870  # Sabine Pass LNG
trigger_km = 150
trigger_severity = "Severe"

hurricanes = client.events(types=["hurricane"], active=True)
for h in hurricanes:
    dist_km = distance((asset_lat, asset_lng), (h["lat"], h["lng"])).km
    if dist_km < trigger_km and h["severity"] in ("Severe", "Extreme"):
        print(f"PARAMETRIC TRIGGER: {h['name']} at {dist_km:.0f}km from Sabine Pass")
        # Trigger payment...

This isn't a legal binding source (you'd need a certified data provider for actual insurance settlement), but it's the same physical reality. Parametric insurers can use NTHMAP as a monitoring feed and cross-reference with their official data source only when a potential trigger fires.

Wildfire impact on supply chains

California wildfires don't usually affect shipping, but they do affect:

  • Power plants and refineries (smoke, evacuations)
  • Rail lines and highways
  • Port staffing
nthmap events list --bbox -125,32,-114,42 --types wildfire --active

Cross-reference with nearby refineries:

nthmap infra list --bbox -125,32,-114,42 --types oil_refinery

For a California refinery with an active wildfire within 50km, you have an elevated operational risk indicator.

Earthquake impact on ports

Earthquakes M6.0+ near major ports can shut them down for days or weeks. NTHMAP surfaces all USGS earthquakes M2.5+:

nthmap events list --types earthquake --format json | \
  jq '[.[] | select(.magnitude >= 6)]'

For each M6+ event, check infrastructure nearby:

nthmap infra list --bbox $(bbox_around $LAT $LNG 200)

The most important historical example: the 2011 Tohoku earthquake shut down Japanese refineries for weeks. A NTHMAP user in March 2011 could have seen the impact pattern within an hour of the event.

Climate risk modeling

For longer-horizon climate risk modeling, NTHMAP data is more of a historical-pattern source than a forecasting tool. Combined with forecast providers (ECMWF, GFS), you can build:

  1. Historical exposure maps — which vessels / assets have been in storm paths over time
  2. Forward-looking risk — given a storm forecast, which NTHMAP-tracked assets are at risk
  3. Aggregate portfolios — total exposure of an insurance book to a forecast storm

Learn more