Skip to content

PmTilesRasterTileSource

Namespace: ThinkGeo.Core

Raster tiles from a local PMTiles archive.

public sealed class PmTilesRasterTileSource : RasterTileSource, System.IDisposable

Inheritance object → RasterTileSource → PmTilesRasterTileSource
Implements IDisposable

Remarks:

PMTiles addresses tiles the slippy-map way, so no row flip is needed, and its header states the zoom range the archive actually covers.

Properties

MetadataJson

The archive's metadata JSON, read at open.

public string MetadataJson { get; private set; }

Property Value

string

IsOpen

public bool IsOpen { get; }

Property Value

bool

TileMatrixSet

Gets the tile grid this source PUBLISHES on: one TileMatrix per zoom level, indexed by zoom. The native grid, or the reprojection target when the tiles are being republished onto another grid.

public TileMatrixSet TileMatrixSet { get; }

Property Value

TileMatrixSet

DrawsFallbackTiles

Gets or sets a value indicating whether a tile of this source, magnified from a shallower zoom, is worth showing while the tiles for the current one arrive.

public bool DrawsFallbackTiles { get; set; }

Property Value

bool

Remarks:

True for imagery, and the default: a magnified aerial is a blurred version of the truth, in the right place, and it beats a hole in the map for the second or two the new tiles take.

Set it false for a source whose tiles are symbols drawn at a fixed size - a WMS of points or labels on nothing. Magnifying one of those does not blur it; it draws the symbols at the wrong size, beside the correctly sized ones in the cells that have already arrived. Measured on a service taking 1.2 s a tile, that is the whole of the transition. With this false the cells simply stay empty until their own tiles come, and whatever is under the layer shows through.

It says nothing about tiles that have arrived. A loaded tile always replaces the zoom beneath it across its whole footprint, transparent pixels included.

https://community.thinkgeo.com/t/bug-gpu-raster-tiles-from-previous-zooms-remain-visible/12479

TileSize

Gets the edge length, in pixels, of the tiles this source publishes.

public int TileSize { get; }

Property Value

int

MinDataZoom

The shallowest zoom level tiles exist at. A subclass that learns the range from the data - an archive header, a service capability - records it through at open.

public int MinDataZoom { get; }

Property Value

int

MaxDataZoom

The deepest zoom level tiles exist at; deeper views reuse this level's tiles (overzoom). See RasterTileSource.MinDataZoom.

public int MaxDataZoom { get; }

Property Value

int

Constructors

PmTilesRasterTileSource(string)

Initializes a source over the .pmtiles file at .

public PmTilesRasterTileSource(string filePath)

Parameters

filePath string

Methods

OpenAsync(CancellationToken)

public Task OpenAsync(CancellationToken cancellationToken)

Parameters

cancellationToken CancellationToken

Returns

Task

GetTileImageAsyncCore(int, long, long, CancellationToken)

protected Task<Byte[]> GetTileImageAsyncCore(int zoom, long x, long y, CancellationToken cancellationToken)

Parameters

zoom int

x long

y long

cancellationToken CancellationToken

Returns

Task<Byte[]>

Dispose(bool)

Closes the archive.

protected void Dispose(bool disposing)

Parameters

disposing bool

Returns

void

Events

DataChanged

Raised when the tiles this source serves have changed - by RasterTileSource.Refresh(RectangleShape) - with the ground they changed over, null for all of it. The map listens and asks again.

public event EventHandler<TileSourceDataChangedEventArgs> DataChanged;