Changelog
Source:NEWS.md
ggOceanMaps 3.0.0
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