A map of a COG in any projection, in the browser
The question people keep asking: how do I get a pole-centred (or otherwise non-Web-Mercator) view of a raster without a tile server, a pre-rendered copy, or loading the whole file? See Pole centric map with Raster? on r-sig-geo, and the many “reproject on the fly” threads around OpenLayers reprojection and deck.gl-raster.
What wxylib does: the browser demo in wxylib/web compiles wxy-tiff and wxy-warp to WebAssembly. The canvas is the target grid. Each view is a fresh warp with the same code wxy warp runs on the command line (GDAL’s chunked warp, its kernels, and gdalwarp -ovr AUTO overview choice), and only the tiles that view touches are fetched by HTTP range request.
Try it
Each link opens the live demo with a source and a target CRS already set. Drag to pan, scroll to zoom; the status line reports cells, time, the overview read and the bytes fetched.
| View | Live |
|---|---|
| Sentinel-2 true colour over Hobart (UTM 55S), on south polar stereographic | open |
| The same scene on a Lambert azimuthal centred on Hobart | open |
| A synthetic world grid seen from a geostationary satellite over 140E | open |
Your own COG: put its URL after ?url= (the server must allow CORS and Range) |
open |

That first view took 144 ms and five range requests (the header, the image directories and the coarsest overview’s tiles, 0.74 MB). Zoomed in, the warp moves to full resolution and fetches only the tiles in view.
Sentinel-2 on a web map, no tile server
s2.html searches Earth Search’s STAC for the map view, lists scenes, and draws the one you pick from its raw uint16 band COGs: three bands warped from UTM onto the map’s own Web Mercator pixel grid each time the map stops moving, then stretched to colour in the page. A date range can go in the link, for example summer 2024.

Limits
- CRS strings go through proj4rs (EPSG codes and PROJ strings, no datum grids). Some projections are missing there: polar Lambert azimuthal and azimuthal equidistant among them (see CRS input).
- GeoTIFF only in the browser for now; Zarr follows.
- A COG on a server without CORS will not open from the page. Most public buckets (sentinel-cogs, raw.githubusercontent.com) allow it.