TileStore

interface TileStore

Persistent backing for CachedTileSource — read/write/evict tile blobs keyed by (z, x, y). The store is the cache; CachedTileSource is the cache-aware view that combines a store with an underlying network TileSource.

Implementations:

  • GeoPackage on JVM/Android (tiles table + im_vector_tiles_mapbox extension for MVT).

  • IndexedDB / Cache API on JS.

cachePolicy is enforced lazily — implementations may evict during writeTile when the policy is bounded, or on demand via evict.

Inheritors

FileSystemTileStore
GpkgTileStore

Properties

Link copied to clipboard
abstract val cachePolicy: CachePolicy

Functions

Link copied to clipboard
open suspend fun bumpValidatedAt(z: Int, x: Int, y: Int)

Refresh a tile's freshness timestamp WITHOUT rewriting its bytes — the conditional-GET 304 Not Modified path. Restarts the stale-while-revalidate window so a still-current tile isn't re-requested every frame. Default no-op for stores that don't track freshness.

Link copied to clipboard
open suspend fun bumpValidatedAtBatch(keys: Collection<Long>)

bumpValidatedAt for many tiles at once — keys packed by tileKey. Stores that commit per call should override this with a single-transaction implementation so a coalesced restamp burst costs one commit instead of one per tile.

Link copied to clipboard
abstract suspend fun deleteTile(z: Int, x: Int, y: Int)

Drop a tile from the store (after a server-side delete, manual eviction, etc.).

Link copied to clipboard
open suspend fun evict()

Apply cachePolicy now. Idempotent / unbounded policy → no-op.

Link copied to clipboard
abstract suspend fun readTile(z: Int, x: Int, y: Int): TileBlob?

Returns the cached blob, or null if the tile isn't present. Treat TileBlob.EMPTY as "the server confirmed no tile here" — distinct from null cache miss.

Link copied to clipboard
open suspend fun setBoundingSector(sector: Sector)

Persist sector as the store's content bounding box — the data-availability extent a bulk download records (e.g. gpkg_contents). Default no-op for stores without one.

Link copied to clipboard
abstract suspend fun sizeBytes(): Long

Approximate byte size of all tiles in the store.

Link copied to clipboard
abstract suspend fun writeTile(z: Int, x: Int, y: Int, blob: TileBlob)

Persist a tile. TileBlob.EMPTY is allowed (and recommended) for "no tile here".