Skip to content

Tiler Factories

TiTiler.PgSTAC provides a MosaicTilerFactory factory which is an helper functions to create FastAPI router (fastapi.APIRouter) with a minimal set of endpoints.

titiler.pgstac.factory.MosaicTilerFactory

# Minimal PgSTAC Mosaic Application
from fastapi import FastAPI
from titiler.pgstac.db import close_db_connection, connect_to_db
from titiler.pgstac.factory import MosaicTilerFactory

app = FastAPI()

@app.on_event("startup")
async def startup_event() -> None:
    """Connect to database on startup."""
    await connect_to_db(app)

@app.on_event("shutdown")
async def shutdown_event() -> None:
    """Close database connection."""
    await close_db_connection(app)

mosaic = MosaicTilerFactory()
app.include_router(mosaic.router)
Method URL Output Description
POST /register JSON (Register) Register Search query
GET /{searchid}/info JSON (Info) Return Search query infos
GET /{searchid}/{lon},{lat}/assets JSON Return a list of assets which overlap a given point
GET /{searchid}/tiles[/{TileMatrixSetId}]/{z}/{x}/{Y}/assets JSON Return a list of assets which overlap a given tile
GET /{searchid}/tiles[/{TileMatrixSetId}]/{z}/{x}/{y}[@{scale}x][.{format}] image/bin Create a web map tile image for a search query and a tile index
GET /{searchid}[/{TileMatrixSetId}]/tilejson.json JSON (TileJSON) Return a Mapbox TileJSON document
GET /{searchid}[/{TileMatrixSetId}]/WMTSCapabilities.xml XML return OGC WMTS Get Capabilities
GET /{searchid}[/{TileMatrixSetId}]/map HTML simple map viewer

Item

For the single STAC item endpoints we use TiTiler's MultiBaseTilerFactory with a custom path_dependency to use item and collection path parameter (instead of the default url query param).

This custom path_dependency will connect to PgSTAC directly to fetch the STAC Item and pass it to a custom Reader based on rio_tiler.io.MultiBaseReader.

# Minimal PgSTAC Item Application
from fastapi import FastAPI

from titiler.core.factory import MultiBaseTilerFactory

from titiler.pgstac.db import close_db_connection, connect_to_db
from titiler.pgstac.dependencies import ItemPathParams
from titiler.pgstac.reader import PgSTACReader

app = FastAPI()

@app.on_event("startup")
async def startup_event() -> None:
    """Connect to database on startup."""
    await connect_to_db(app)

@app.on_event("shutdown")
async def shutdown_event() -> None:
    """Close database connection."""
    await close_db_connection(app)

item = MultiBaseTilerFactory(
    reader=PgSTACReader,
    path_dependency=ItemPathParams,
    router_prefix="/collections/{collection_id}/items/{item_id}",
)
app.include_router(item.router, prefix="/collections/{collection_id}/items/{item_id}")