Lat × Long
Last week’s major MapLibre GL JS release, which contains a whopping sixteen breaking changes and removes the last remaining references to Mapbox, marking the full emancipation from the library’s origins.
Other key highlights include:
- Switch to an ESM-only distribution (
maplibre-gl.mjs). The UMD bundles (maplibre-gl.js, maplibre-gl-csp.js) are no longer published. […] Consumers using <script src=".../maplibre-gl.js"> must switch to <script type="module">, and consumers using import maplibregl from 'maplibre-gl' must switch to import * as maplibregl from 'maplibre-gl' or named imports.
Map now composes a Camera instead of extending it (Map extends Evented directly and forwards the camera API). The internal map.transform was removed — use map’s public API instead or open a PR if you need something that’s not exposed.
- The TypeScript target has been updated to ES2022. This results in smaller bundles and improved runtime performance by relying on modern JavaScript features and reducing transpilation. Consumers targeting browsers or using some tooling released before 2022 may need to transpile MapLibre or update.
- WebGL (v1) support has been removed; WebGL2 is now required. In practical terms, this will not change how you interact with the map. This enables performance improvements (e.g. line opacity), Terrain3D enhancements, and several bug fixes. WebGL2 support has been widely available for years, and usage of the legacy path had plateaued, so maintaining it no longer justified the added complexity.
Follow the upgrade guide to mitigate breaking changes.
Is Zarr the New COG? Betteridge’s law of headlines strikes again. The answer is no. The real point is that Jarrett Keifer uses the question to make a stronger case about how the formats compare and where they can still connect.
I don’t think we need a winner. Not everything has to be Zarr, nor COG. I think having multiple effective technologies is a much bigger win for the community than picking just one. “Is Zarr the new COG?” is catchy, but I think it’s the wrong question. “What are the strengths and weaknesses of Zarr and COG and how should I pick one or the other for a new data product?” just doesn’t have the same ring to it, I know, but that’s probably the better question.
The better question, yes. Keifer’s comparison is strongest when it shows not just how COG and Zarr differ, but what future interoperability between them can mean for the technology and community.
COG and Zarr are so deeply different that a shared stack between them is impossible. That belief is self-fulfilling: nobody funds a bridge they’re convinced can’t be built, and then the absence of the bridge gets cited as proof of the chasm. Except we keep watching the bridge get built the moment someone has a reason to pay for it. AWS needed NITF and JPEG 2000 readable as virtual Zarr, so the codecs got written and shipped in osml-imagery-io. virtual-tiff needed predictor 2, so now Zarr reads it. The missing shared codec layer isn’t evidence of a thick boundary between these formats; it’s evidence of a coordination failure. The winner-take-all framing is part of the failure, because money that believes it must pick a winner doesn’t fund the seam between them. […]
The places where these formats meet—shared low-level readers, shared codec implementations, conventions with tooling behind them—are where a dollar helps both ecosystems at once. obstore, async-tiff, VirtualiZarr, even GDAL at times: these all show the veneer can thin in different ways. Let’s capitalize on the good ideas these demonstrate.
From the release notes:
The 10.10 release brings improvements throughout the library — from tile and vector rendering to sources, formats and interactions. The highlights are
- Text support in the WebGL vector renderers, plus stale tile handling for WebGL tile layers
- Smoother tile rendering: instead of clipping and redrawing full tiles, only the remainders of lower zoom levels are drawn
- WMTS and OGC tile grids now honor the advertised tile matrix set limits, so no tiles are requested outside a layer’s data extent
- GeoZarr gains selection of non-spatial dimensions, e.g. for time series
- Text along lines honors offsetX and is split into graphemes, so ligatures are no longer cut apart
- Fixes for the Modify interaction’s tracing, vector tile resolutions, decluttering z-index order, and text rendering of long lines
One upgrade note stands out: The BingMaps source is deprecated because Bing Maps for Enterprise retires in mid-2028. The recommended replacement is ol/source/ImageTile configured to point to the Azure Maps tile API.
A nice round-up of free (as in beer) base-map tile services you can use in your projects without authentication, signing up or creating authentication tokens.
maplibre-gl-shader-layer is a JavaScript library for creating custom tiled layers for MaplibreGL with WebGL and shader code. It simplifies WebGL development by leveraging ThreeJS under the hood and provides a framework for rendering complex data visualisations directly on maps with per-tile customisation. Its sweet spot is continuous data covering large geographic areas, where each pixel is a measurement rather than a colour. Think climate- and weather-related data, or remote sensing indices like NDVI.
It provides enough flexibility to create custom tile layer solutions, but already comes with powerful built-in layers. The most notable is the MultiChannelSeriesTiledLayer, which lets developers visualise multi-dimensional datasets. It uses RGBa raster tiles, but the values across the three channels don’t encode a specific colour; they represent multidimensional precision data, which the client then visualises.
It’s a neat library for those working in climate science and adjacent fields.
Apple has announced rules for advertisements on Apple Maps, to be introduced later this summer in the US and Canada. Some businesses will be prohibited from advertising on Apple Maps, while others will be vetted.
Sarah Perez, TechCrunch:
Notably, it prohibits the broad category of home services businesses, like plumbing, electrical, locksmith, HVAC, pest control, roofing, and general contracting services, among others. […]
In addition to banning home services, the policy prohibits a handful of businesses from advertising on Maps, like cryptocurrency ATMs and bail bonds providers. […]
Apple is also taking a hands-on approach to approving ads for businesses offering medical services, as the policy notes these ads will be “evaluated on a case-by-case basis.”
If ads must appear on Apple Maps, they should be limited to businesses that operate from a shop or office I can physically visit. It avoids cluttering the map and is the right choice for user experience. If I’m looking for a plumber to fix a leak in my house, I won’t use a maps application; I’ll use a search engine. I need the plumber to come to my house; where they are and how I can get there isn’t relevant. Likewise, if I’m looking for a barber shop, I’m looking for a professional shop, not for Gabriel who cuts hair in his kitchen on weekdays after four.
Compiled by Matt Forrest, this year’s edition features almost 2,500 companies and organisations from 121 countries, all neatly categorised and searchable by organisation size, founding year and funding received. If you’re looking for a job in geospatial, start your search here.
GeoViz is a new JavaScript library by Nicolas Lambert to produce maps on the web. It comes with a wide range of resizable markers and symbols, contour lines, geometry simplifications, map projections, layout marks (yeah, you can have that north arrow), and so much more. Built on D3, the syntax is similar and compatible, making it a flexible tool for serious thematic mapping on the Web.
In the geospatial world, like everywhere else, AI is the hottest topic. Anyone who’s looked at a map in the last five years is now talking about foundational models and geospatial embeddings. Some (probably many)—myself included—still struggle to get their heads around those concepts.
Kiri Carini:
I get that end users (which is where I’d put myself on the expertise spectrum) don’t need to understand all the ins and outs of how embeddings are generated. But if we’re going to use them beyond novelty or experimentation, we need to understand enough to know what level of confidence and trust to place in them when applying them to real work.
Kiri’s list is an excellent starting point to learn about geospatial foundational models and embeddings.
The premise of TerraBit is simple: Click on any area around the globe and return similar locations. We’ve seen solutions to this problem before, NASA’s (currently broken) Similarity Search springs to mind. But TerraBit is different because the computation happens entirely in the browser using modern, cloud-native technologies.
The Clay v1.5 corpus is binarised, packaged as a partitioned GeoParquet and uploaded to a public object storage. The browser queries the data using DuckDB-WASM. The comparison of binary vectors then happens on the GPU.
Isaac Corley and Caleb Robinson have more detail:
The 50M embeddings are partitioned into geohash-aligned Parquet shards and published on Source Cooperative, which serves them cloud-natively out of S3 — public HTTP with byte-range support, no egress fees, no intermediate server. A single manifest file records the path, row count, and spatial extent of every shard.
When you draw an ROI, DuckDB-WASM queries the manifest with a bounding-box predicate — manifest-based shard pruning: the manifest acts as a coarse spatial index so the browser never opens metadata on shards outside the ROI. Once the intersecting shard list is resolved, DuckDB streams those shard files over HTTP (via httpfs range requests) and applies a second filter at the row level — a bbox predicate for rectangles, or ST_Intersects for freehand polygons — to extract only patches within the drawn region. Ranking over the candidate slice is exact brute-force Hamming: binary embeddings arrive as packed Uint8Array columns (128 bytes per 1024-dim vector) and are scored in a Web Worker via XOR+popcount, which maps directly to hardware-accelerated popcount instructions and completes in milliseconds for a typical AOI partition.
New results appear instantly, once the data is downloaded for the specified area of interest. Not long ago, this needed a round-trip to a back-end, now it runs entirely in your browser.
You'll find older posts in the
archives.