Recon observations — Hurricane Katrina (2005)¶
Fetch aircraft reconnaissance high-density flight-level observations (product='recon', recon_product='hdobs') for Hurricane Katrina and plot them coloured by surface wind speed.
recon is storm-keyed: variables is a list of storm ids, and basin/source resolve them. The result is a vector FeatureCollection of observation points.
Cost. This downloads Katrina's flight-level files (tens of seconds) and returns tens of thousands of obs. Needs
pip install earthlens[tropycal].
In [ ]:
Copied!
from pathlib import Path
from earthlens import EarthLens
OUT_DIR = Path('tropycal_output')
OUT_DIR.mkdir(exist_ok=True)
obs = None
try:
obs = EarthLens(
data_source='tropycal',
product='recon',
recon_product='hdobs',
variables=['AL122005'],
basin='north_atlantic',
source='hurdat',
start='2005-08-23',
end='2005-08-31',
aoi=[-98.0, 18.0, -80.0, 31.0],
path=str(OUT_DIR),
).download(progress_bar=False)
print(len(obs), 'recon observations')
except Exception as exc:
print(f'skipped live query: {type(exc).__name__}: {exc}')
from pathlib import Path
from earthlens import EarthLens
OUT_DIR = Path('tropycal_output')
OUT_DIR.mkdir(exist_ok=True)
obs = None
try:
obs = EarthLens(
data_source='tropycal',
product='recon',
recon_product='hdobs',
variables=['AL122005'],
basin='north_atlantic',
source='hurdat',
start='2005-08-23',
end='2005-08-31',
aoi=[-98.0, 18.0, -80.0, 31.0],
path=str(OUT_DIR),
).download(progress_bar=False)
print(len(obs), 'recon observations')
except Exception as exc:
print(f'skipped live query: {type(exc).__name__}: {exc}')
Inspect the observations¶
In [ ]:
Copied!
if obs is not None and len(obs):
display(
obs[
['storm_id', 'recon_product', 'time', 'wspd_kt', 'pres_hpa', 'geometry']
].head()
)
print('CRS:', obs.crs)
if obs is not None and len(obs):
display(
obs[
['storm_id', 'recon_product', 'time', 'wspd_kt', 'pres_hpa', 'geometry']
].head()
)
print('CRS:', obs.crs)
Plot the obs points coloured by wind speed¶
In [ ]:
Copied!
if obs is not None and len(obs):
import matplotlib.pyplot as plt
fig, ax = plt.subplots(figsize=(8, 6))
obs.plot(ax=ax, column='wspd_kt', cmap='viridis', legend=True, markersize=4)
ax.set_title('Katrina (2005) recon flight-level obs, coloured by wind (kt)')
ax.set_xlabel('Longitude')
ax.set_ylabel('Latitude')
plt.tight_layout()
plt.show()
if obs is not None and len(obs):
import matplotlib.pyplot as plt
fig, ax = plt.subplots(figsize=(8, 6))
obs.plot(ax=ax, column='wspd_kt', cmap='viridis', legend=True, markersize=4)
ax.set_title('Katrina (2005) recon flight-level obs, coloured by wind (kt)')
ax.set_xlabel('Longitude')
ax.set_ylabel('Latitude')
plt.tight_layout()
plt.show()