v0.5.2
GeoPQ Workbench 0.5.2 draws the basemap in the projection your data
asked for, in the colours it was published in.
Tiles outside Web Mercator
The first layer picks an equal-area projection by default, and that was
exactly when the basemap disappeared: tiles were gated on the display
being Web Mercator, so a Lambert-93 view of a French city got no basemap
at all.
Tiles are square in Mercator and curved anywhere else, so each one is
now drawn as a subdivided mesh with its vertices projected exactly. The
error falls as O(h²) in the sub-cell size, adjacent tiles share the
vertices along their common edge so no seams open, and 128 triangles a
tile is nothing next to a vector layer.
What reprojection cannot fix is text. Place names are pixels in the
raster, so they shear with it and no amount of subdivision helps. So the
view is measured rather than assumed: sample the Jacobian of Mercator to
display across the viewport, and when the worst rotation passes 5° or
the worst anisotropy passes 1.2, fall back to the same style without
labels.
| rotation | drawn | |
|---|---|---|
| Toulouse, Lambert-93, z12 | 1.2° | labels kept |
| Europe, LAEA, z5 | 25.4° | label-free |
At world scale there is no honest answer, so tiles are refused and say
why: Mercator stops at ±85°, and a warped world map would leave a blank
cap over each pole, which is the one place an equal-area projection is
supposed to be truthful. The projected coastline overlay already covers
that view.
Tiles also carry a mip chain now, box-reduced in linear light, and the
sampler does 16x anisotropic filtering. Reprojection minifies a tile
several times over along one axis, roughly 1/cos²φ against a cylindrical
equal-area, so 4:1 at 60°N.
The dark basemap was black
Not a reprojection bug, and older than this release. The tile texture
was declared sRGB while the surface is Bgra8Unorm, so the sampler
decoded to linear and nothing ever re-encoded. Mid-grey 128 reached the
screen as 55. On a light basemap that reads as slightly flat; on the
dark one it is a black rectangle.
This affected every basemap in every release so far.
More basemaps
OpenTopoMap, Esri World Topo and Esri World Imagery, plus label-free
variants of all three Carto styles. Imagery carries no rendered text at
all, so it reprojects with none of the label caveats.
The Basemap menu also stops hiding sources. It used to drop a labelled
style whenever its label-free twin existed, which left no way to pick it
again; every source is listed, and when the one drawn differs from the
one picked the menu says so instead of substituting silently.
The basemap loads with the data, not after it
Tiles were never serialised behind the parquet read. The camera simply
sat on the whole world until the built layer arrived, and at world scale
there is nothing to fetch, so nothing was requested for the entire load
and then everything at once.
The extent is known from the row-group covering boxes the moment the
footer is read. The map is framed there before a byte of geometry is
decoded, so the basemap downloads alongside the data. The exact bounds
still refine the fit when the layer lands, and a file with no covering
stats behaves as before. The win scales with load time: seconds on a
local file, the whole download on a remote one.
Fixes
- The cursor readout no longer prints the CRS name. Names like
Auto: Albers equal-area (36.2°/45.8°)pushed the zoom, tile count
and network readout off the right of the status bar; the projection
selector in the corner already names it.
Install
Prebuilt binaries for macOS (Apple Silicon and Intel), Linux x86_64 and
Windows x86_64 are attached, each with a SHA-256 checksum. macOS builds
are signed and notarized.