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:
- Historical exposure maps — which vessels / assets have been in storm paths over time
- Forward-looking risk — given a storm forecast, which NTHMAP-tracked assets are at risk
- Aggregate portfolios — total exposure of an insurance book to a forecast storm
Learn more
- Concepts — how NTHMAP models events
- Marine insurance use case — related underwriting workflow
- API reference — full events endpoint documentation