Crandore Hub

bluertopo

Download and Extract BlueTopo Bathymetry with Terra

Discovers, downloads, verifies, and opens bathymetry assets from the National Oceanic and Atmospheric Administration (NOAA) BlueTopo product for user supplied areas of interest. The package keeps source files intact by default, uses 'terra' for spatial data access, supports explicit native-resolution selection policies, and records provenance for reproducible extraction workflows. It accesses the NOAA BlueTopo web service at <https://noaa-ocs-nationalbathymetry-pds.s3.amazonaws.com/> and references product documentation at <https://nauticalcharts.noaa.gov/data/bluetopo.html>.

README

# bluertopo

<img src="man/figures/logo.png" align="right" height="139" alt="bluertopo logo" />

[![R-CMD-check](https://github.com/el-cordero/bluer-topo/actions/workflows/R-CMD-check.yaml/badge.svg)](https://github.com/el-cordero/bluer-topo/actions/workflows/R-CMD-check.yaml)
[![pkgdown](https://github.com/el-cordero/bluer-topo/actions/workflows/pkgdown.yaml/badge.svg)](https://github.com/el-cordero/bluer-topo/actions/workflows/pkgdown.yaml)
[![License:
MIT](https://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/el-cordero/bluer-topo/blob/main/LICENSE.md)

`bluertopo` discovers, downloads, verifies, and opens National Oceanic
and Atmospheric Administration (NOAA) BlueTopo bathymetry for an area of
interest using `terra`. The package keeps source GeoTIFF and RAT sidecar
files intact by default, records query and catalog provenance, and makes
native source-resolution choices explicit.

Reference: NOAA,
[BlueTopo](https://nauticalcharts.noaa.gov/data/bluetopo.html) and
[BlueTopo
specifications](https://nauticalcharts.noaa.gov/data/bluetopo_specs.html).

## Installation

``` r
# install.packages("pak")
pak::pak("el-cordero/bluer-topo")
```

## Define an area of interest

Every area of interest (AOI) must be polygon or multipolygon geometry.
Spatial objects and files must have a known coordinate reference system
(CRS).

| AOI input | Example | CRS rule |
|----|----|----|
| `terra::SpatVector` | `terra::vect("my_area.gpkg")` | Uses the object’s CRS |
| `sf::sf` or `sf::sfc` | `sf::st_read("my_area.gpkg")` | Uses the object’s CRS |
| `terra::SpatRaster` | `terra::rast("template.tif")` | Uses the raster extent and CRS |
| `terra::SpatExtent` | `terra::ext(-74.1, -73.9, 40.6, 40.8)` | Interpreted as EPSG:4326 |
| Numeric bbox | `c(xmin, ymin, xmax, ymax)` | Interpreted as EPSG:4326 |
| Local vector path | `"my_area.gpkg"` | Uses the file’s CRS |
| WKT or GeoJSON string | Polygon text | Interpreted as EPSG:4326 |

Remote AOI URLs, points, lines, missing CRS values, unordered bounding
boxes, and invalid longitude/latitude bounds are rejected with an
explanatory error.

## Basic workflow

``` r
library(bluertopo)

aoi <- vect("my_area.gpkg")

bathy <- bluertopo(aoi)
plot(bathy)
```

An `sf` object can be passed without converting it to `terra` first:

``` r
aoi_sf <- sf::st_read("my_area.gpkg", quiet = TRUE)
bathy_sf <- bluertopo(aoi_sf)
```

## Choose the right function

| Function | Use it when you need | Return type |
|----|----|----|
| `bluertopo_tile_polygons()` | Every current BlueTopo tile polygon, with no AOI | `terra::SpatVector` |
| `bluertopo_tiles()` | Tile discovery and coverage planning only | `terra::SpatVector` |
| `bluertopo_download()` | Verified original GeoTIFF/RAT files and manifests | `bluertopo_downloads` data frame |
| `bluertopo()` | Elevation, uncertainty, or contributor rasters | `terra::SpatRaster` or `terra::SpatRasterCollection` |
| `bluertopo(..., details = TRUE)` | Rasters plus tiles, downloads, query, coverage, and provenance | `bluertopo_result` list |

## Provenance workflow

``` r
result <- bluertopo(aoi, details = TRUE)

result$tiles
result$downloads
result$coverage
result$provenance
```

## Get all BlueTopo tile polygons

No AOI is needed to retrieve the complete current tile scheme:

``` r
tile_polygons <- bluertopo_tile_polygons()
plot(tile_polygons)

output_file <- file.path(tempdir(), "bluetopo-tile-polygons.gpkg")
writeVector(tile_polygons, output_file, overwrite = TRUE)
```

## Download original BlueTopo assets

Use `bluertopo_download()` when the durable deliverable is the original
GeoTIFF plus optional RAT sidecars rather than an extracted raster
object.

``` r
files <- bluertopo_download(
  aoi,
  path = file.path(tempdir(), "bluertopo-downloads")
)
```

`verify = "sha256"` is the default and requires NOAA-provided checksums.
`verify = "none"` is available only for explicitly unverified workflows.
`verify = "size"` is rejected unless trustworthy expected byte counts
are available before any transfer starts.

## Native resolution policies

`resolution` filters NOAA BlueTopo source tiles by their native cell
size. Smaller meter values mean finer native source detail.
`output_resolution` requests an explicit output grid and therefore
resamples the output.

``` r
# Exact native resolution
bathy_8m <- bluertopo(aoi, resolution = 8)

# Highest native detail, with lower-resolution fallback for coverage
bathy_best <- bluertopo(aoi, resolution = "finest", coverage = "fill")

# Lowest native detail
bathy_low <- bluertopo(aoi, resolution = "coarsest")

# Closest available native resolution to 10 m
bathy_near <- bluertopo(
  aoi,
  resolution = bluertopo_resolution("nearest", value = 10, tie = "finer")
)

# Keep source tiles from 4 through 16 m
bathy_range <- bluertopo(
  aoi,
  resolution = bluertopo_resolution("between", min_m = 4, max_m = 16)
)
```

## Mixed source grids

Native BlueTopo tiles can span multiple UTM zones, resolutions, or grid
alignments. When the selected source files are not compatible,
`bluertopo()` returns a `terra::SpatRasterCollection` unless the user
explicitly requests an output grid.

``` r
bathy_10m <- bluertopo(
  aoi,
  resolution = "native",
  output_crs = "EPSG:26918",
  output_resolution = 10,
  combine = "single"
)
```

Use `crop = TRUE` to crop to the AOI extent and `mask = TRUE` to remove
cells outside the AOI polygon. Supplying both `output_crs` and
`output_resolution` requests a resampled output grid; omitting both
preserves native source grids.

## Cache operations

Package cache operations are intentionally conservative.
`bluertopo_cache_clear()` clears only the configured `bluertopo` cache,
requires confirmation in noninteractive sessions, and refuses to remove
content unless a package-owned cache marker is present. The default
cache is session-temporary; set
`options(bluertopo.cache_dir = "/path/to/cache")` when a persistent
cache is wanted.

``` r
bluertopo_cache_dir()
bluertopo_cache_clear(confirm = TRUE)
```

## Examples

The [Examples
tab](https://el-cordero.github.io/bluer-topo/articles/examples.html) on
the pkgdown site uses BlueTopo source tiles for New York Harbor, with a
documented secondary AOI only for the mixed-grid page. Normal package
tests use small synthetic fixtures so checks remain network-free.

- [Example
  gallery](https://el-cordero.github.io/bluer-topo/articles/examples.html)
- [Discover tiles and
  coverage](https://el-cordero.github.io/bluer-topo/articles/example-discover-tiles.html)
- [Download original
  assets](https://el-cordero.github.io/bluer-topo/articles/example-download-assets.html)
- [Extract elevation with
  terra](https://el-cordero.github.io/bluer-topo/articles/example-extract-elevation.html)
- [Compare resolution
  policies](https://el-cordero.github.io/bluer-topo/articles/example-resolution-policies.html)
- [Mixed grids and output
  grid](https://el-cordero.github.io/bluer-topo/articles/example-mixed-grids.html)
- [Layers and RAT
  metadata](https://el-cordero.github.io/bluer-topo/articles/example-layers-rat.html)

## Reference

NOAA. BlueTopo. <https://nauticalcharts.noaa.gov/data/bluetopo.html>

NOAA. BlueTopo specifications.
<https://nauticalcharts.noaa.gov/data/bluetopo_specs.html>

Versions across snapshots

VersionRepositoryFileSize
0.0.1 rolling linux/jammy R-4.5 bluertopo_0.0.1.tar.gz 873.5 KiB
0.0.1 rolling linux/noble R-4.5 bluertopo_0.0.1.tar.gz 993.6 KiB
0.0.1 rolling source/ R- bluertopo_0.0.1.tar.gz 873.5 KiB
0.0.1 latest linux/jammy R-4.5 bluertopo_0.0.1.tar.gz 873.5 KiB
0.0.1 latest linux/noble R-4.5 bluertopo_0.0.1.tar.gz 993.6 KiB
0.0.1 latest source/ R- bluertopo_0.0.1.tar.gz 873.5 KiB
0.0.1 2026-04-23 source/ R- bluertopo_0.0.1.tar.gz 0 B

Dependencies (latest)

Depends

Imports

Suggests