Fold a tile coordinate onto the canonical XYZ identity an offline region stores.
This reuses the contract's QueryTileKey vocabulary but deliberately not
normalizeQueryTileKey(), whose clamping is right for a renderer and wrong for
a content-addressed cache: clamping an out-of-range row would quietly address a
different tile's bytes. Longitude wrapping is kept, because a wrapped column
is the same geographic tile; an out-of-range row or zoom is refused instead.
Fold a tile coordinate onto the canonical XYZ identity an offline region stores.
This reuses the contract's QueryTileKey vocabulary but deliberately not
normalizeQueryTileKey(), whose clamping is right for a renderer and wrong for a content-addressed cache: clamping an out-of-range row would quietly address a different tile's bytes. Longitude wrapping is kept, because a wrapped column is the same geographic tile; an out-of-range row or zoom is refused instead.