joao-pinelo
Thu, 09 Apr 2026 16:29:08 +0000
Package Announcements

AtlanticCloud.jl — typed Julia access to the Atlantic Cloud geospatial data infrastructure

We’ve just released AtlanticCloud.jl v0.3.0 — a client for the Atlantic Cloud, a transatlantic computation and data network operated by the AIR Centre and its associates, with nodes at institutions in Brazil and the Azores. The package is registered in the General Registry.

The Atlantic Cloud serves geospatial data — satellite imagery metadata, derived products, and observational datasets — across the Atlantic basin. The first dataset available through the API is meteorological: observations from over 21,700 stations across Portugal and Brazil, including a quality-controlled version of the UNIPLU-BR unified Brazilian rainfall dataset (nearly 400 million records back to 1885). An EO catalogue endpoint for satellite scene metadata already exists in the infrastructure, and extending the package to cover Earth observation data — Sentinel-1 SAR products from the Internal Waves Service, optical imagery, classification results — is the next development. The package name reflects this broader scope: Atlantic Cloud, not Atlantic Weather.

using AtlanticCloud

client = AtlanticCloudClient()  # reads ATLANTIC_CLOUD_API_KEY from ENV

# Fetch all Brazilian stations
stations = get_stations(client; country="BR")

# Hourly rainfall for Rio Grande do Sul, May 2024
obs = get_br_observations(client;
    resolution="hourly",
    state="RS",
    start_date="2024-05-01",
    end_date="2024-05-15"
)

df = to_dataframe(obs)

Design choices that might interest this community:

Station implements GeoInterface.jl PointTrait, so stations work directly with GeoMakie, NaturalEarth.jl, and GeometryOps — no coordinate extraction needed. The example scripts plot 21,395 stations over NaturalEarth state boundaries with station objects flowing straight from the API response to the plotting layer.

Separate Observation and BrObservation types rather than one union type — the underlying data is structurally different (7 meteorological variables vs. precipitation + QC flags), and permanently null fields felt wrong.

Testing uses constructor injection: AtlanticCloudClient(; http_get=mock_get) in tests, HTTP.get in production. 822 tests, all fixture-based, no network access. CI runs on Julia 1.10 and 1.12, Ubuntu and macOS.

Single-module design at 2,964 lines. Dependencies: HTTP.jl, JSON3.jl, DataFrames.jl, GeoInterface.jl, stdlib Dates.

API key is free: services.aircentre.org/access/account

Docs: aircentre.github.io/AtlanticCloud.jl

Contributions welcome — especially examples using the JuliaGeo ecosystem with the station data, and input on how to design typed access to EO catalogue endpoints as they come online.

1 post - 1 participant