PMTiles Version 3 Introduces New Addressing Schema
PMTiles version 3 introduces a new tile-addressing schema. Instead of using Z,X,Y tile coordinates, the new schema uses tile IDs based on the tile’s position within a series of Hilbert curves:
The TileId
36052
corresponds to theZ,X,Y
position of8,40,87
. The calculation of ID uses a pyramid of Hilbert curves starting atTileId=0
for zoom level 0. The next zoom level, a 2x2 square, occupies the next four IDs in the ID spaceTileId=(1,2,3,4)
, the next level being the next 16 IDs, and so on.
And to not duplicate tiles that contain virtually no information (for example, tiles just showing water) the RunLength
indicates how many times a tile will be repeated within the Hilbert curve, so vast areas of the ocean can be represented with just one tile.
Ocean tiles are not only repetitive, but sparse and often contiguous in Hilbert space. This entry:
TileID=2578427,RunLength=107977,Offset=3650651795,Length=42
means that the 44 byte vector tile with a single square in the layer
ocean
is repeated over 100,000 times, starting atZ,X,Y=11,285,1311
and ending at11,19,1304
.
Neat.
Update: A new post outlines the disk layout and compression approach of PMTiles version 3. (15 August 2022)