Experimental browser-based visualization of the International Bathymetric Chart of the Southern Ocean (IBCSO) v2 using deck.gl-raster.
https://projects.pawsey.org.au/image-cogs/index.html
The modified code is available at https://github.com/mdsumner/deck.gl-raster/tree/modified-polar
Base URL: https://projects.pawsey.org.au/image-cogs/index.html
Add ?cog=<URL> to load a specific COG. e.g. bottom left quadrant IBCSO
This figure shows the tl/tr/bl/br (topleft, topright, bottomlef, bottomright) configuration, then each in the corresponding Mercator view:
The original IBCSO chart is in EPSG:9354 (WGS 84 / IBCSO Polar Stereographic), centered on the South Pole. Because WebMercator cannot represent the pole (it maps to infinity), the image has been split into four quadrants that exclude the polar region within 533km of 90°S.
| Quadrant | URL | Extent (xmin, xmax, ymin, ymax) |
|---|---|---|
| Top Left | IBCSO_v2_digital_chart_tl.tif | -4833000, -533000, 533000, 4797000 |
| Top Right | IBCSO_v2_digital_chart_tr.tif | 533000, 4837000, 533000, 4797000 |
| Bottom Left | IBCSO_v2_digital_chart_bl.tif | -4833000, -533000, -6629000, -533000 |
| Bottom Right | IBCSO_v2_digital_chart_br.tif | 533000, 4837000, -6629000, -533000 |
The complete chart is also available:
https://projects.pawsey.org.au/image-cogs/images/IBCSO_v2_digital_chart.tif
?cog= viewer. The image includes the South Pole, which (presumably) causes the adaptive mesh reprojection to hang as it attempts to refine triangles near the Mercator singularity at -90° latitude.
Another two are included, and the antimeridian one also thrashes, the other is ok.
| Section | URL | Extent (xmin, xmax, ymin, ymax) |
|---|---|---|
| Prime Meridian | IBCSO_v2_digital_chart_primem.tif | -4833000, 4837000, -533000, -6629000 |
| Anti Meridian | IBCSO_v2_digital_chart_antim.tif | -4833000, 4837000, 533000, -6629000 |
The geotiff-geokeys-to-proj4 library does not correctly handle EPSG:9354. It produces:
+proj=stere +lon_0=0 +lat_ts=-65 +x_0=0 +y_0=0 +ellps=WGS84 ...
This is missing the critical +lat_0=-90 parameter, which defines the projection center at the South Pole. Without it, the image is incorrectly placed at the equator.
The viewer includes a workaround that detects ProjectedCSTypeGeoKey: 9354 and substitutes the correct proj4 string:
+proj=stere +lat_0=-90 +lat_ts=-65 +lon_0=0 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs
The modification is made in App.tsx in GeoKeysParser:
// Fix for EPSG:9354 - IBCSO Polar Stereographic (missing lat_0)
if (geoKeys.ProjectedCSTypeGeoKey === 9354) {
const proj4def = "+proj=stere +lat_0=-90 +lat_ts=-65 +lon_0=0 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs";
console.log("Using custom proj4 for EPSG:9354:", proj4def);
return {
def: proj4def,
parsed: proj.parseCrs(proj4def),
coordinatesUnits: "metre" as proj.SupportedCrsUnit,
};
}- Dataset: IBCSO v2 Digital Chart
- Citation: Dorschel et al. (2022) The International Bathymetric Chart of the Southern Ocean Version 2, Scientific Data. https://doi.org/10.1038/s41597-022-01366-7
- Original CRS: EPSG:9354 (WGS 84 / IBCSO Polar Stereographic)
- Original resolution: ~1949m × 1935m per pixel
Just running locally for now. Source image is at
https://github.com/mdsumner/ibcso-cog/raw/refs/heads/main/IBCSO_v2_digital_chart.tif
tl <- c(-4833000, -533000, 533000, 4797000)
tr <- c(533000, 4837000, 533000, 4797000)
bl <- c(-4833000, -533000, -6629000, -533000)
br <- c(533000, 4837000, -6629000, -533000)
l <- list(tl = tl, tr = tr, bl = bl, br = br)
ex <- c(-1, 1, -1, 1) * pi * 6378137
vaster::plot_extent(ex, asp = 1)
library(wk)
library(geos)
trans <- PROJ::proj_trans_create("EPSG:9354", "EPSG:3857")
for (i in l) {
plot(wk::wk_transform( geos_densify(wk::rct(i[1], i[3], i[2], i[4]), 10000), trans = trans), add = TRUE)
}
cmds <- c('gdal_translate -projwin -4833000 4797000 -533000 533000 ~/IBCSO_v2_digital_chart.tif ~/IBCSO_v2_digital_chart_tl.tif -of COG',
'gdal_translate -projwin 533000 4797000 4837000 533000 ~/IBCSO_v2_digital_chart.tif ~/IBCSO_v2_digital_chart_tr.tif -of COG',
'gdal_translate -projwin -4833000 -533000 -533000 -6629000 ~/IBCSO_v2_digital_chart.tif ~/IBCSO_v2_digital_chart_bl.tif -of COG',
'gdal_translate -projwin 533000 -533000 4837000 -6629000 ~/IBCSO_v2_digital_chart.tif ~/IBCSO_v2_digital_chart_br.tif -of COG')
for (cm in cmds) system(cm)
system("gdal_translate -projwin -4833000 -6629000 4837000 -533000 ~/IBCSO_v2_digital_chart.tif ~/IBCSO_v2_digital_chart_antim.tif -of COG")
system("gdal_translate -projwin -4833000 4797000 4837000 533000 ~/IBCSO_v2_digital_chart.tif ~/IBCSO_v2_digital_chart_primem.tif -of COG")