The open marina for maritime data — one clean Python interface over fragmented US public marine data (NDBC, tides & currents, and more).
Project description
openmarina
Clean marine data in one line — no parsers, no unit conversions, no agency quirks.
import openmarina
cf = openmarina.load("ndbc:41122") # a buoy off Florida, last 24h
df = cf.to_wide() # one clean column per variable
The problem it solves
You want recent wave height and wind near a spot on the water. Simple — until you try.
One agency hands you whitespace-delimited text with a cryptic header. The next wants an API key and returns JSON. Pressure is in hectopascals here, millibars there. Wind direction means "coming from" in one feed and "going to" in another. Timestamps arrive in three different time zones. So you write a parser — and patch it again next month when the format quietly changes. Then you need a second agency, and you start over.
Public ocean data is free, but using it costs you days.
openmarina does that work once, so you don't. One call returns a clean, normalized table — the same variable names, the same SI units, UTC, WGS84 — no matter which agency the data came from.
How it works
- Normalized once. A wave height from a Florida buoy and one from a Maine buoy come back as the same variable, in the same units, in the same table.
- Quality you can see. Every value carries a
qc_flag(good / suspect / missing), so you know what to trust. - Find what's near you.
nearest(lat, lon)— ornearest --zip 33139. - Add an agency in one PR. Each source is a small adapter behind one shared contract, verified by a built-in conformance harness. New sources don't complicate the ones you already use.
Get started
Install (Python 3.10+):
pip install openmarina # once published
pip install -e ".[dev]" # from a clone
From Python:
import openmarina
cf = openmarina.load("coops:8723214", start="2026-06-23", end="2026-06-24")
cf.to_wide() # tidy table, one column per variable
cf.meta # provenance, datum, cadence
openmarina.load_many(["ndbc:41122", "ndbc:41009"]) # several stations at once
openmarina.nearest_zip("33139") # nearest station to a ZIP (pip install pgeocode)
From the terminal:
openmarina pull ndbc:41122 --wide -o out.csv
openmarina nearest 25.76 -80.19
openmarina stations
# on a locked-down machine, run any command as: python -m openmarina ...
Sources today
| Source | What it gives you |
|---|---|
| NDBC | NOAA buoys — waves, wind, water/air temperature, pressure |
| CO-OPS | NOAA Tides & Currents — water level, currents, met |
| ERDDAP | one configurable adapter for 60+ global providers |
New agencies are welcome — the 15-minute path is in CONTRIBUTING.md.
License
Apache-2.0 — free to use, including commercially.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file openmarina-0.0.1.tar.gz.
File metadata
- Download URL: openmarina-0.0.1.tar.gz
- Upload date:
- Size: 30.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6ff9984a97c4bf5a65c55e31a8579b78f77eda274766ca0d66e2fba846db2191
|
|
| MD5 |
679d6705c5ad28144d8979eb0c047a10
|
|
| BLAKE2b-256 |
95b00be28042f9cb3869414a151caea066033499f3fbb91a1425826410cbedcc
|
File details
Details for the file openmarina-0.0.1-py3-none-any.whl.
File metadata
- Download URL: openmarina-0.0.1-py3-none-any.whl
- Upload date:
- Size: 30.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
de6bcfd277531cdad0fe3dd693410447b9f442a37a4415bdbc331a35fb968062
|
|
| MD5 |
c81dd98ab09f5363c491e9744b55fa65
|
|
| BLAKE2b-256 |
406c313e7d1dd5d8963de54f18534b593231ef4107a5b56a0326d9d2541e4a4a
|