Changelog
Source:NEWS.md
ggOceanMaps 3.0.10
- Hide README setup diagnostics and reject leaked startup messages or temporary paths before website publication.
ggOceanMaps 3.0.9
- Pin the older-R Linux check to Ubuntu 24.04 to avoid the rolling ubuntu-latest image’s system-package download delays.
ggOceanMaps 3.0.8
- Publish pkgdown directly through GitHub Pages artifacts, with source-version verification and no generated commits.
ggOceanMaps 3.0.3
Bug fixes
-
get_depth()failed with “object ‘tmp’ not found” when thelonandlatarguments were given for a data frame. The coordinate columns are now taken from the arguments; before, the function only worked when the columns were guessed. -
get_depth()returnedNAfor points with a depth of exactly 1 m whendatacontained rows with missing coordinates.
ggOceanMaps 3.0.2
Bug fixes
- Raster bathymetries no longer trigger the ggplot2 warning “Raster pixels are placed at uneven horizontal intervals and will be shifted” when the raster warped to the map projection contains entirely empty columns or rows (e.g.
basemap(limits = c(-30, 30, 50, 80), bathymetry = TRUE), #69). The maps themselves were drawn correctly; only the warning was spurious.
Performance
- Raster bathymetries are plotted through a leaner internal layer instead of
stars::geom_stars(). The plotted data no longer carries an index of every empty cell, nor four corner coordinates per cell that were only used to find the extent of the raster as a whole. For a million-cell bathymetry this roughly halves the memory the plot holds (77 -> 43 MB forbasemap(limits = c(-30, 30, 50, 80), bathymetry = TRUE)) and makes drawing about twice as fast. The maps are pixel-identical to those of 3.0.1.
ggOceanMaps 3.0.1
Bug fixes
-
qmap()now acceptssfcgeometry vectors directly, such asqmap(ices_areas$geometry).
ggOceanMaps 3.0.0
CRAN release: 2026-06-22
This major release adds on-demand bathymetry sources, build-your-own shapefile tools, automated tests, and a reorganised documentation site. The repository also includes instructions for AI assistants that help users and contributors work with ggOceanMaps.
New features
- On-demand WCS bathymetry via the new
wcs_bathymetry()function with two sources:- EMODnet —
bathy.style = "wcs_emodnet_blues"("wemb") /"wcs_emodnet_grays"("wemg"). ~115 m European-waters bathymetry. - ETOPO1 from NOAA NCEI —
bathy.style = "wcs_etopo_blues"("wceb") /"wcs_etopo_grays"("wceg"). ~1.85 km global topo-bathy. Use this when EMODnet has no coverage for your region. Bounding boxes outside a source’s coverage error cleanly with a pointer to the right alternative. Large boxes are tiled and mosaicked automatically. Tiles cached undergetOption("ggOceanMaps.datapath").
- EMODnet —
-
vector_land()extracts a land polygon from abathyRasterproduced byraster_bathymetry(). Pairs withvector_bathymetry()for build-your-own shapefile workflows. - Maps no longer print
x/yaxis titles by default (decimal-degree maps used to show “Longitude” / “Latitude”). Add them back when you want them with+ labs(x = "Longitude", y = "Latitude").
Documentation and AI support
- New repository-level
AGENTS.mdwith instructions for AI assistants helping users use ggOceanMaps. - New website Cookbook of short, copy-pasteable recipes.
- New website Bathymetry article covering all bathymetry sources.
- New website Adding graphical elements article covering ocean-current arrows (velocity quivers and schematic “Figure 1” arrows) and pie charts on maps via
scatterpie::geom_scatterpie(). - New website Customising shapefiles article covering
clip_shapefile(), theraster_bathymetry()->vector_bathymetry()/vector_land()pipeline, andgeonorge_bathymetry(). - The “Premade maps” and “Premade shapefiles” articles were rewritten to the current
sf/starstoolchain and the currentshapefile_list()contents. - The user manual was slimmed to concise explanations that link out to the in-depth articles, and the documentation site (navbar, reference index) was reorganised.
Bug fixes
- Fixed land being clipped too early on projected (polar-stereographic) maps with decimal-degree limits, e.g.
basemap(c(-20, 30, 50, 70))cut off northern Norway. The land clip boundary is now densified before back-projecting to WGS84. - Fixed antimeridian / wide-span land clipping by routing the clip through the projected map CRS, fixing wrong land for
basemap(c(120, -120, 60, 80))and a topology crash for rotated antimeridian data input. - Fixed a crash (
st_cast()on a degenerateGEOMETRYCOLLECTION) for some customvector_land()layers at some map limits. - Fixed rotated antimeridian maps drawing no land, e.g.
basemap(c(100, -120, -12, -57), rotate = TRUE)andbasemap(c(40, -70, -37, 40), rotate = TRUE). A landmass crossing the rotated antimeridian (even off-screen, such as Antarctica) was “unwrapped” into a degenerate >180-degree polygon during projection, which made ggplot2 skip the whole land layer. Such polygons are now split along the seam before projection (issue #44). - Fixed the default bathymetry being heavily downsampled. The raster was warped onto a coarse ~256-cell grid regardless of the source resolution, so e.g.
basemap(60, bathymetry = TRUE)lost most of its detail. The warp now keeps the source resolution by default; use thedownsampleargument to reduce it. - Fixed
basemap("DecimalDegree", bathymetry = TRUE)(and the same whole-world set withglaciers = TRUE) collapsing the bathymetry to a single row at the equator. Clipping the global raster to an exact -180..180 longitude box returned a degenerate boundary; whole-world decimal-degree limits are now pulled just inside the antimeridian before clipping. - Fixed a WCS
bathy.style("wemb"/"wceb", etc.) failing with “st_transform applied to an object of class ‘logical’” when combined with an explicitly named premade shapefile set, e.g.basemap(..., bathy.style = "wemb", shapefiles = "Svalbard"). The on-demand bathymetry is now fetched in that case too. - Fixed WCS bathymetry leaving white gaps around the edges of projected maps (e.g. on the Svalbard or Europe CRS). The coverage is now requested for the full projected, expand-factor-padded map area rather than the raw decimal-degree limits, so it fills the whole panel.
- WCS
downsampleis now applied by the remote service, reducing transfer size and memory use. Raster cropping preserves the downloaded cell resolution and no longer applies a second implicit reduction before plotting. - WCS downloads now use validated temporary files and atomic cache updates. Invalid cache entries are replaced automatically, and multipart responses are split using their complete MIME boundary rather than a generic byte sequence that can occur inside a GeoTIFF.
Testing
- A local testthat suite covers the historical regression corpus; vdiffr SVG snapshot tests catch “code runs but wrong map” regressions. Tests are run during development and excluded from the CRAN source package.
- Unit tests for
transform_coord(),auto_limits(),guess_coordinate_columns(),LS(),quiet(),vector_land(),wcs_bathymetry().
Internal
-
load_map_data()no longer callsmenu()in non-interactive sessions, so data downloads work during automated/CI documentation builds. - Performance:
basemap_data_crop()now clips in native CRS before reprojecting, avoiding world-scale transforms for small map extents (#55). - Performance: grid-line generation in polar maps switched from
lapply(unique())tosplit() + lapply()(#57). - Removed ~131 lines of dead/commented code across
basemap.R,basemap_data.R,raster_bathymetry.R,dist2land.R(#56, #59, #60, #61, #62).
ggOceanMaps 2.3.0
CRAN release: 2026-02-10
- Fixed anti-meridian crossing land clipping in rotated basemaps (#53)
- Fixed bugs and package incompatibilities, including TopologyException (#52, #40)
- Fixed issue with plotting Indian and Pacific Ocean (#51, #44)
- Replaced
sizewithlinewidthto stop ggplot2 warning (#49, #48) - Removed size-related warnings throughout the package
- Updated
grid.size/grid.colbehavior - Various minor bug fixes
- Fixed a bug where both
load_map_data(shapefile_list("Arctic"))andshapefile_list("Arctic", get.data = TRUE)would cause error due to changed bathymetry system.
ggOceanMaps 2.2.0
CRAN release: 2024-01-15
- Added tests better explaining wrongly specified arguments
- Updated the user manual
- Fixed an issue with certain
bathy.styleabbreviations - qmap arguments did not match those of basemap: added
bathy.alphaanddownsamplearguments to qmap - Fixed an issue when trying to plot basemaps using
plotly::ggplotly() - Fixed an issue with . in file path
- Fixed an issue when plotting singular points
- Fixed
basemap(c(-180, 180, -90, 90))case and turned off automatic rotation when crossing the anti-meridian. A message is shown instead. - Turned off
expandinggplot2::coord_sf()to avoid an error when having map border at 0 meridian. - Fixed a case where data argument produced too wide boundaries
expand.factorshould work now as designed- Fixed an error in
dist2land(binary = TRUE) -
get_depth()now usesraster_userand returns depths as positive numeric. - Fixed an issue where land boundaries did not get clipped correctly when using custom crs
ggOceanMaps 2.1.1
CRAN release: 2023-08-30
- Fixed a bug in bathy.style wording.
- Added
get_depth()function. - Fixed a critical issue with downloads failing on Windows.
- Added detailed land shapes of Europe. Can be used by
basemap(shapefiles = "Europe")
ggOceanMaps 2.0.0
CRAN release: 2023-07-04
- Full sf integration. Old GIS packages for R and ggspatial dependencies removed. Since this change required rewriting of most functions, new bugs have almost certainly been introduced.
- Bathymetry system redesigned (see this)
- Decimal degree maps can now be plotted across the antimeridian.
- Added spatial data to ggOceanMaps making the ggOceanMapsData package not needed any longer.
-
dist2land()now uses great circle distances on a spherical Earth (s2) by default and should be able to calculate distances to land anywhere around the globe. - qmap points turned red. Addressed a long-standing issue with
shapefilesandshapegetting mixed. - Fixed a bug with shapefiles argument shortcut.
- Fixed a bug in ices_data
- Added sf support for clip_shapefile
- Added sf support for shapefiles (converts to sp, needs to be refined)
- Fixed a bug with expanded limits in decimal degree projection
- Fixed a bug where shapefile_list(“all”) would return multiple rows per shapefile name.
ggOceanMaps 1.3.4
CRAN release: 2022-09-26
- Added shapefiles to the
xargument shortcut inbasemap(). - Added limits to premade shapefiles to make visualization easier.
- Removed many CRS warning from sp and rgdal
- Added a way to control the plotting order of graticules
- Added transparency (alpha) scaling to bathymetry fill
- Added GEBCO bathymetry which is more detailed than the ArcticSterographic.
- Added EMODnet bathymetry which is more detailed than GEBCO for the Northeast Atlantic
- Improved vignette and webpage:
- Added a way to control the plotting order of graticules.
- New design
- Added vignettes
- Added ICES and Norwegian directorate of fisheries areas.
ggOceanMaps 1.2.6
CRAN release: 2022-01-08
- added
xargument tobasemap()andqmap() - Conversion from PROJ4 to PROJ6. This change will make the old ggOceanMapsData files incompatible with ggOceanMaps 1.2 and vice versa. Changed most functions.
- Added NEWS.md
- Improved premade_shapefiles and shapefile documentation.
- Started rewriting the package from
sp,rgeosandrgdaltosf. - Moved the
rgdalpackage from Imports to Suggests. - Added
geonorge_bathymetry() - Added the possiblity to adjust
datalimits using theexpand.factorparameter inbasemap()andqmap() - Improved the user manual and website.
-
Fixed an issue with other than decimal degree input rasters in
raster_bathymetry() - Fixed an issue with ggplot2 (>=3.3.4)
ggOceanMaps 1.1
CRAN release: 2021-05-21
- Started replacing the PROJ4 system by the PROJ6 wkt based system by replacing “+init=epsg:NNNN” strings by “EPSG:NNNN”. Did not finish the conversion.
ggOceanMaps 1.0.9
CRAN release: 2021-01-14
- First CRAN release. Contains the core of the package code rewritten from PlotSvalbard