Advent Automation 2025

Day 19: Maritime Underwater Noise Mapping (Geospatial Analytics MVP)

Industry: Environmental Marine Science / Ocean Policy Stakeholder: Marine Spatial Planner (Environmental Compliance Officer) Built with: Folium (Python) + GeoPandas + JOMOPANS-ECHO Noise Model Time to deliver: 3 hours Data Source: NOAA AIS (Gulf of Mexico demonstration data from GIS_SymphonyLayer project)


Decision Context (CRITICAL SECTION)

WHO is making a decision?

Marine Spatial Planner at a regional environmental agency responsible for implementing noise reduction measures under marine protection regulations (e.g., EU Marine Strategy Framework Directive - MSFD Descriptor 11, or equivalent US coastal protection policies).

Background: This stakeholder reviews quarterly shipping traffic patterns to identify areas where continuous low-frequency underwater noise exceeds regulatory thresholds and impacts marine life (whales, dolphins, fish communication/navigation).

Responsibility: Recommend specific maritime traffic management measures (speed restrictions, route adjustments, seasonal closures) to reduce noise impact in sensitive marine habitats.

WHAT decision are they making?

Which 3 shipping areas require noise mitigation measures THIS QUARTER based on:

Specific action: Propose to maritime authorities:

  1. Priority Area 1: Implement 10-knot speed limit in highest noise zone
  2. Priority Area 2: Recommend voluntary route deviation 5km north
  3. Priority Area 3: Schedule seasonal shipping restrictions during marine mammal migration (if applicable)

WHAT minimum visual supports this decision?

Interactive Folium map with TWO layers:

  1. Noise Intensity Grid (Choropleth):
    • 2.5km × 2.5km grid cells colored by average 125 Hz noise level
    • Color gradient: Green (low impact) → Yellow → Orange → Red (high impact >170 dB)
    • Tooltip: Noise level, vessel count, dominant vessel type, impact classification
  2. Vessel Position Markers (Point layer):
    • Sample of 500 vessel positions color-coded by type (Cargo=Blue, Tanker=Red, Passenger=Green, Fishing=Orange)
    • Tooltip: Vessel MMSI, type, speed, length, noise emission

Why THIS visualization (not others):

Rejected alternatives:


Business Problem

Context: Underwater noise from commercial shipping disrupts marine life communication, navigation, and feeding behavior. Continuous low-frequency noise (63-125 Hz) from large vessels (cargo ships, tankers) travels hundreds of kilometers underwater.

Regulatory Requirement: EU Marine Strategy Framework Directive (MSFD) Descriptor 11 requires member states to monitor and reduce continuous anthropogenic noise. Similar regulations exist in US coastal waters under NOAA Marine Mammal Protection Act.

Stakeholder Pain Point:

“We receive AIS vessel tracking data monthly but lack tools to quickly identify WHERE noise is concentrated and WHICH shipping routes to target for mitigation. Current process involves manual spreadsheet analysis of 1M+ vessel positions—taking weeks to produce maps for quarterly policy reviews.”

Impact: Without spatial visualization, noise mitigation measures are reactive (responding to marine mammal strandings) rather than proactive (preventing noise accumulation in sensitive habitats).


Solution Delivered

Visualizations:

  1. Noise Intensity Grid (2.5km cells): Choropleth map showing average 125 Hz noise levels across Gulf of Mexico demonstration region
    • Decision support: Identifies 3 priority zones exceeding 170 dB threshold requiring immediate intervention
    • Color scale: Green (<160 dB, low impact) → Red (>170 dB, high impact)
  2. Vessel Position Markers (500-sample): Color-coded points showing vessel distribution by type
    • Decision support: Reveals whether hotspots are from cargo traffic (blue clusters) or passenger vessels (green)
    • Interactive tooltips: Click vessel to see noise emission (dB), speed (knots), length (meters)
  3. Layer Control: Toggle noise grid and vessel markers independently
    • Decision support: Compare noise intensity (choropleth) with vessel density (markers) to validate correlation
  4. Custom Legend: Vessel type color key for quick classification
    • Cargo (Blue), Tanker (Red), Passenger (Green), Fishing (Orange), Other (Gray)

Data Source:


Key Insights (From Demonstration Data)

Gulf of Mexico AIS Sample (2024-01-01):

  1. Priority Area 1 (29.012°N, 94.188°W):
    • Noise: 180.3 dB (HIGH IMPACT) - Passenger vessel
    • Decision implication: Recommend speed restriction or route deviation for high-speed passenger ferry routes
  2. Priority Area 2 (28.913°N, 93.987°W):
    • Noise: 178.9 dB (HIGH IMPACT) - Passenger vessel
    • Decision implication: Coordinate with cruise line operators for voluntary noise reduction measures
  3. Priority Area 3 (28.938°N, 94.438°W):
    • Noise: 177.5 dB (HIGH IMPACT) - Tanker traffic
    • Decision implication: Target tanker shipping lanes for regulatory speed limits (10-knot max in sensitive zones)

Vessel Type Distribution:

Noise Statistics (125 Hz):


How to Run Locally

Prerequisites:

Setup:

# Navigate to day19 directory
cd day19

# Install dependencies
pip3 install -r day19_requirements.txt

# STEP 1: Process AIS data (generates grid and vessel samples)
python3 day19_data_prep.py

# STEP 2: Generate interactive map
python3 day19_VIZ_maritime_noise_map.py

# STEP 3: Open map in browser
open day19_maritime_noise_map.html  # macOS
# OR: xdg-open day19_maritime_noise_map.html  # Linux
# OR: start day19_maritime_noise_map.html  # Windows

Expected Output:

Terminal output from day19_data_prep.py:

✅ DATA PREPARATION COMPLETE!
📂 Output files:
   • vessel_positions_sample.csv (500 records)
   • grid_noise_gulf_of_mexico.csv (964 cells)
   • day19_MAP_metadata.json

Terminal output from day19_VIZ_maritime_noise_map.py:

✅ INTERACTIVE MAP CREATED SUCCESSFULLY!
🎯 Map Features:
   • Noise intensity grid: 964 active cells
   • Vessel markers: 500 positions
   • Interactive tooltips: Click cells/vessels for details

Browser view:


Architecture Decisions

Decision 1: Why Folium over Tableau/Power BI?

Rationale:

Trade-off accepted: Less visual polish than Tableau, but decision clarity is more important than aesthetic design for regulatory compliance reports.

Decision 2: Why 2.5km grid cells (not 1km or 10km)?

Rationale:

Decision 3: Why JOMOPANS-ECHO noise model (not custom calculations)?

Rationale:

Model formula (simplified):

Source Level (dB re 1 µPa @ 1m) = Base_Level + 20*log10(Speed/10) + 10*log10(Length/100)

Decision 4: Why Gulf of Mexico data (not Swedish waters)?

Rationale:

Next step: Replace DEMO_BOUNDS in day19_data_prep.py with Swedish waters coordinates for production deployment.


Limitations & Future Enhancements

Current Limitations:

Possible Enhancements (out of 3h scope):


Portfolio Notes

Demonstrates:

Upwork Keywords:

Portfolio Positioning:

“Built interactive geospatial visualization for marine spatial planning, identifying 3 priority shipping zones requiring noise mitigation measures under EU Marine Strategy Framework Directive. Processed 1.3M vessel positions using JOMOPANS-ECHO noise model, delivering actionable regulatory insights in <3 hours.”


Files Structure

day19/
├── day19_data_prep.py                       # AIS data processing + noise calculations
├── day19_VIZ_maritime_noise_map.py          # Folium map generation
├── day19_maritime_noise_map.html            # 🎯 PRIMARY DELIVERABLE (interactive map)
├── day19_MAP_metadata.json                  # Data source documentation
├── day19_requirements.txt                   # Python dependencies
├── .env.example                             # Environment configuration template
├── README.md                                # This file (decision context + setup)
├── data/
│   ├── raw/
│   │   └── AIS_2024_01_01.csv               # NOAA AIS data (copied from GIS_SymphonyLayer)
│   ├── processed/
│   │   ├── grid_noise_gulf_of_mexico.csv    # 964 grid cells with noise metrics
│   │   └── vessel_positions_sample.csv      # 500 vessel sample for map markers
│   └── reference/
│       └── 01_DEMO_gulf_of_mexico.ipynb     # Original GIS project demo notebook
└── screenshots/
    ├── day19_full_map.png                   # Complete map view
    ├── day19_tooltip_demo.png               # Tooltip interaction example
    ├── day19_noise_hotspot_zoom.png         # Zoomed into high-noise area
    └── day19_layer_control.png              # Layer toggle demonstration

Connection to Existing Work

Reuses GIS_SymphonyLayer Components (ALL COPIED to day19/):

What’s NEW for Day 19:

File Independence:

✅ Day 19 is 100% independent from GIS_SymphonyLayer repository location ✅ All code uses relative paths within day19/ directory ✅ Project can be zipped and run on any machine ✅ README documents exact setup steps for reproducibility


Technical Notes

JOMOPANS-ECHO Model Simplification:

The full JOMOPANS-ECHO model includes:

Day 19 MVP uses simplified 125 Hz source level only:

Grid Aggregation Logic:

# Each grid cell summarizes all vessel positions within 2.5km × 2.5km area:
- noise_mean: Average 125 Hz emission (arithmetic mean in dB)
- noise_median: Median emission (reduces impact of outlier loud vessels)
- noise_max: Peak emission (identifies single loud vessel in cell)
- vessel_count: Number of AIS positions in cell
- dominant_vessel_type: Most frequent vessel class in cell

AIS Data Quality Notes:


Testing Checklist

Functionality:

Data Accuracy:

Decision Support:

Performance:


Regulatory Context (Background)

EU Marine Strategy Framework Directive (MSFD) - Descriptor 11:

Requirement: “Introduction of energy, including underwater noise, is at levels that do not adversely affect the marine environment.”

Key Indicators:

Mitigation Measures:

US Equivalent: NOAA Marine Mammal Protection Act

Why 125 Hz Matters:


Built as part of Christmas Data Advent 2025 - Visualization Week (Days 16-20)

Project Philosophy: Data visualization over dashboard aesthetics. Decision support over decoration. Analytical rigor over visual polish.