- add
/collections/{collection_id}/items/{item_id}/assets/{asset_id}
optional endpoints (TITILER_PGSTAC_API_ENABLE_ASSETS_ENDPOINTS=TRUE|FALSE
) - add
/external
optional endpoints (TITILER_PGSTAC_API_ENABLE_EXTERNAL_DATASET_ENDPOINTS=TRUE|FALSE
) - add
cachecontrol_exclude_paths
attribute inApiSettings
to let users decide if some path should not have cache-control headers (defaults is to exclude/list
) - add
PgstacSettings
such that the user can provide their own default settings for PgSTAC search - add check for pgstac
read-only
mode and raiseReadOnlyPgSTACError
error when trying to write to the pgstac instance - add
/pgstac
endpoint in the application (whenTITILER_PGSTAC_API_DEBUG=TRUE
) - add
ids
,bbox
anddatetime
options to the/collections/{collection_id}
endpoints
- update models to avoid pydantic deprecation
- update
searches
model for pgstac>=9.1 - update psycopg error catching when
search
doesn't exist
-
update titiler requirement to
>=0.18.0,<0.19
-
Add
/colorMaps
endpoints to the application -
Deprecation remove default
WebMercatorQuad
tile matrix set in/tiles
,/tilesjson.json
,/map
,/WMTSCapabilities.xml
and/assets
endpoints# Before /tiles/{z}/{x}/{y} /tilejson.json /map /WMTSCapabilities.xml # Now /tiles/WebMercatorQuad/{z}/{x}/{y} /WebMercatorQuad/tilejson.json /WebMercatorQuad/map /WebMercatorQuad/WMTSCapabilities.xml
-
update
titiler.pgstac.model.Link
to match the OGC specification -
use
{tileMatrixSetId}
in templated URL links -
add support for
render
anditem-assets
STAC Collection extensions for theSTAC Collections
info and wmts endpoints -
add
/info
endpoint to theSTAC Collections
endpoints -
add
/collections
and/collections/{collection_id}
endpoints whenTITILER_PGSTAC_API_DEBUG=TRUE
-
Expect the
Metadata.defaults
configurations to follow the STACrender
extension (https://github.com/stac-extensions/render)// before "blue": { "rescale": ["0,100"], "assets": "b1", } // now "blue": { "rescale": [[0, 100]], "assets": ["b1"], }
- add python 3.12 support
- Add
extra="ignore"
optionCacheSettings
to fix pydantic issue when using.env
file
- enable passing
ConnectionPool
kwargs option intitiler.pgstac.db.connect_to_db
function (author @smohiudd, #155)
- fix invalid url parsing in HTML responses
- update titiler requirement to
>=0.17.0,<0.18
- use new
align_bounds_with_dataset=True
rio-tiler option in GeoJSON statistics methods for more precise calculation
- update titiler requirement to
>=0.16.0,<0.17
- use morecantile
TileMatrixSet.cellSize
property instead of deprecated/privateTileMatrixSet._resolution
method (author @hrodmn, #148) - add
/point/{lon},{lat}
endpoint inMosaicTilerFactory
(co-author @hrodmn, #150)
- no change since
1.0.0a4
- add
algorithm
options for/statistics [POST]
endpoints (back-ported from 0.8.1)
- remove
reverse
option inPGSTACBackend
mosaic backend. Reverse item order should be achieved with STAC search sortby.
- update titiler's dependency to
>=0.15.2,<0.16
- rename
dependencies.TileParams
todependencies.TmsTileParams
- rename
dependencies.ItemPathParams
toItemIdParams
breaking change
-
add
pgstac_dependency
attribute inMosaicTilerFactory
(defaults todependencies.PgSTACParams
) -
add database's
pool
check in startup event -
add metadata layers links in mosaic's
/info
response for TileJSON, map and wmts endpoint links -
add
CollectionIdParams
dependency to retrieve a SearchId for a CollectionId -
add
/collections/{collection_id}
virtual mosaic endpoints -
update endpoints Tags (
STAC Search
,STAC Collection
,STAC Item
)
-
move PgSTAC Search Virtual Mosaic's endpoints from
/mosaic
to/searches
-
in
model.RegisterResponse
(model used in/register
endpoint) renamesearchid
byid
# before resp = httpx.post("/mosaic/register", body={"collections": ["my-collection"], "filter-lang": "cql-json"}) assert resp.json()["searchid"] # now resp = httpx.post("/searches/register", body={"collections": ["my-collection"], "filter-lang": "cql-json"}) assert resp.json()["id"]
-
rename
dependencies.PathParams
todependencies.SearchIdParams
-
rename
searchid
path parameter tosearch_id
inSearchIdParams
-
move
check_query_params
methods outsideMosaicTilerFactory
class -
make
path_dependency
a required input toMosaicTilerFactory
class# before app = FastAPI() mosaic = MosaicTilerFactory(...) app.include_router(mosaic.router) # now app = FastAPI() mosaic = MosaicTilerFactory( ..., path_dependency=lambda: "aaaaaaaaaaaaaa" ) app.include_router(mosaic.router)
-
remove
/{search_id}
prefix inMosaicTilerFactory
routes. Now use parameter injection from global prefix# Before app = FastAPI() mosaic = MosaicTilerFactory( ..., router_prefix="/mosaics" ) app.include_router(mosaic.router, prefix="/mosaics") # Now app = FastAPI() mosaic = MosaicTilerFactory( ... router_prefix="/mosaics/{search_id}" ) app.include_router(mosaic.router, prefix="/mosaics/{search_id}")
-
move
/info
endpoint outside theMosaicTilerFactory
to its own extension (titiler.pgstac.extension.searchInfoExtension
)# Before app = FastAPI() mosaic = MosaicTilerFactory(...) app.include_router(mosaic.router) # Now app = FastAPI() mosaic = MosaicTilerFactory( ... extensions=[ searchInfoExtension(), ] ) app.include_router(mosaic.router)
-
move
/register
and/list
endpoint creation outside theMosaicTilerFactory
class# before from titiler.pgstac.factory import MosaicTilerFactory mosaic = MosaicTilerFactory( ..., router_prefix="/{search_id}", ) app.include_router(mosaic.router, prefix="/{search_id}") # Now from titiler.pgstac.factory import ( MosaicTilerFactory, add_search_register_route, add_mosaic_register_route, ) mosaic = MosaicTilerFactory( ..., router_prefix="/{search_id}", ) app.include_router(mosaic.router, prefix="/{search_id}") # add /register endpoint add_search_register_route( app, # any dependency we want to validate # when creating the tilejson/map links tile_dependencies=[ mosaic.layer_dependency, mosaic.dataset_dependency, mosaic.pixel_selection_dependency, mosaic.process_dependency, mosaic.rescale_dependency, mosaic.colormap_dependency, mosaic.render_dependency, mosaic.pgstac_dependency, mosaic.reader_dependency, mosaic.backend_dependency, ], ) # add /list endpoint add_search_list_route(app)
- enable passing
ConnectionPool
kwargs option intitiler.pgstac.db.connect_to_db
function (author @smohiudd, #155) [backported from 1.2.2]
- update rio-tiler version to
>6.3.0
(defined intitiler>=0.17
) - use new
align_bounds_with_dataset=True
rio-tiler option in GeoJSON statistics methods for more precise calculation [backported from 1.2.0] - use morecantile
TileMatrixSet.cellSize
property instead of deprecated/private TileMatrixSet._resolution method [backported from 1.1.0]
- add
algorithm
options for/statistics [POST]
endpoints
- update titiler requirement to
>=0.15.0,<0.16
- remove
max_size
default for mosaic's/statistics [POST]
endpoint breaking change - add
/bbox
and/feature [POST]
optional endpoints - add
img_part_dependency
attribute inMosaicTilerFactory
(defaults totitiler.code.dependencies.PartFeatureParams
)
-
update requirements to switch to pydantic~=2.0
- pydantic>=2.4,<3.0
- pydantic-settings~=2.0
- geojson-pydantic~=1.0
- cogeo-mosaic>=7.0,<8.0
-
update titiler requirement to
>=0.14.0,<0.15
-
replace
-
by_
in query parameters- coord-crs -> coord_crs
- dst-crs -> dst_crs
-
- add
tilejson
URL links forlayers
defined in mosaic's metadata in/mosaic/register
and/mosaic/{mosaic_id}/info
response - support multiple
layers
in/mosaic/{mosaic_id}/WMTSCapabilities.xml
endpoint created from mosaic's metadata
breaking change
-
In
/mosaic/WMTSCapabilities.xml
we removed the query-parameters related to thetile
endpoint (which are forwarded) so?assets=
is no more required. The endpoint will still raise an error if there are nolayers
in the mosaic metadata and no required tile's parameters are passed.# before response = httpx.get("/mosaic/{mosaic_id}/WMTSCapabilities.xml") assert response.status_code == 400 response = httpx.get("/mosaic/{mosaic_id}/WMTSCapabilities.xml?assets=cog") assert response.status_code == 200 # now # If the mosaic has `defaults` layers set in the metadata # we will construct a WMTS document with multiple layers, so no need for the user to pass any `assets=` response = httpx.get("/mosaic/{mosaic_id}/WMTSCapabilities.xml") assert response.status_code == 200 with rasterio.open(io.BytesIO(response.content)) as src: assert src.profile["driver"] == "WMTS" assert len(src.subdatasets) == 2 # If the user pass any valid `tile` parameters, an additional layer will be added to the one from the metadata response = httpx.get("/mosaic/{mosaic_id}/WMTSCapabilities.xml?assets=cog") assert response.status_code == 200 with rasterio.open(io.BytesIO(response.content)) as src: assert src.profile["driver"] == "WMTS" assert len(src.subdatasets) == 3
- add
python-dotenv
requirement
- update
titiler
requirement to>=0.12.0,<0.13
- use
Annotated
Type for Query/Path parameters - re-order endpoints in
MosaicTilerFactory
to avoid conflicts betweentiles
andassets
endpoints - remove
stac-pydantic
dependency - add optional
root_path
setting to specify a url path prefix to use when running the app behind a reverse proxy - add landing page
/
- use
lifespan
option instead of deprecated@app.on_event
method to initiate/close DB connection
breaking changes
- remove deprecated
/{searchid}/{z}/{x}/{y}/assets
endpoints - use /api and /api.html for documentation (instead of /openapi.json and /docs)
- replace Enum's with
Literal
types - replace variable
TileMatrixSetId
bytileMatrixSetId
- add
pixel_selection_dependency
attribute to theMosaicTilerFactory
- update
titiler
requirement to>=0.11.7
- fix
/map
endpoint template name - rename
add_map_viewer
toadd_viewer
option inMosaicTilerFactory
for consistency withtitiler's
options
- remove deprecated
/tiles/{searchid}/...
endpoints (replaced with/{searchid}/tiles/...
) - depreciate
/{searchid}/{z}/{x}/{y}/assets
endpoints and add/{searchid}/tiles/{z}/{x}/{y}/assets
- update minimum titiler requirement to
>=0.11.6
- remove timing headers
- add
strict_zoom
option (controled withMOSAIC_STRICT_ZOOM
environment variable) to raise (or not) error when fetching tile outside mosaic min/max zoom range
- update python packaging/build system to
pdm-pep517
- use
Ruff
for lint - add retry mechanism on Database connection issues for
PGSTACBackend.get_assets()
andget_stac_item
methods (back ported from 0.2.4)
- update titiler requirement to
0.10.2
- fix maximum version of FastAPI to 0.92 (to avoid breaking change of starlette >0.25)
- update Type information for
dependencies.get_stac_item
(back ported from 0.2.2)
breaking changes
-
Use
/collections/{collection_id}/items/{item_id}
prefix for Item endpoint.# Before {endpoint}/stac/info?collection=collection1&item=item1 # Now {endpoint}/collections/collection1/items/item1/info
-
Change tile url path parameter order from
/tiles/{searchid}/{TileMatrixSetId}/{z}/{x}/{y}
to/{searchid}/tiles/{TileMatrixSetId}/{z}/{x}/{y}
# Before {endpoint}/mosaic/tiles/20200307aC0853900w361030/0/0/0 # Now {endpoint}/mosaic/20200307aC0853900w361030/tiles/0/0/0
- add retry mechanism on Database connection issues for
PGSTACBackend.get_assets()
andget_stac_item
methods
- fix maximum version of FastAPI to 0.92 (to avoid breaking change of starlette >0.25)
- update Type information for
dependencies.get_stac_item
- update titiler requirement to
>=0.10.1,<0.11
and fix/map
endpoint (to accept multiple TMS)
- add python 3.10 and 3.11 support
- update to rio-tiler 4.1
- add
/{searchid}/map
endpoint to theMosaicTilerFactory
(added whenadd_map_viewer
is set toTrue
) - add
/{searchid}/WMTSCapabilities.xml
OGC WMTS endpoint to theMosaicTilerFactory
- add
/list
to theMosaicTilerFactory
to list available mosaics (added whenadd_mosaic_list
is set toTrue
)
breaking changes
- remove python 3.7 support
- update titiler requirement to
>=0.10.0
- replace
connection_string
bydatabase_url
insettings.PostgresSettings
. We can now directly setDATABASE_URL
environment variable.
- remove
asset_expression
(Mosaic and Item) - histogram band names are prefixed with
b
(e.gb1
) (Mosaic and Item) (ref: https://github.com/cogeotiff/rio-tiler/blob/main/docs/src/v4_migration.md#band-names) - expression for STAC have to be in form of
{asset}_b{band_name}
(e.gred_b1/green_b1
) (Mosaic and Item) (ref: https://github.com/cogeotiff/rio-tiler/blob/main/docs/src/v4_migration.md#multibasereader-expressions) - added
asset_as_band
option to force expression to be in form of{asset}
(e.gred/green
) (Mosaic and Item) - expression's band should now be delimited with
;
(previously,
was accepted) (Mosaic and Item) - point output model to include band_names (Item)
- added
algorithm
options
- update
titiler.core
andtitiler.mosaic
requirement to0.7
- add
MosaicTilerFactory._tilejson_routes
method to registerTileJSON
routes - raise
cogeo_mosaic.errors.MosaicNotFoundError
when SearchId is not found in pgstac.searches table
breaking changes
- move version definition in
titiler.pgstac.__version__
- remove unused
fetch_options
intitiler.pgstac.reader.PgSTACReader
- update
titiler
version and addreader_dependency
andbackend_dependency
in endpoint factory.
- remove LRU cache on all settings classes to enable support for manually providing settings via keyword arguments and to minimize lines of code (author @alukach, #54)
- Insert mosaic metadata
min/max zoom
andbounds
in tilejson (#51) - allow users the ability to optionally provide
PostgresSettings
toconnect_to_db()
function in the event that they want to customize how their DB credentials are populated (author @alukach, #53)
- add
feature()
method toPGSTACBackend
mosaic backend - add
/statistics
endpoint to return statistics given a GeoJSON feature or featureCollection - add
collection
in allowed returned fields - switch to
pgstac.search
to get the STAC Item intitiler.pgstac.dependencies.get_stac_item
(#50)
- move dependencies to
titiler.pgstac.dependencies
- add
/stac
endpoints to work with PgSTAC items
breaking changes
- add
/mosaic
prefix to the PgSTAC mosaic endpoints
- Add
search_dependency
to allow customization of the PgSTAC Search query (Author @drnextgis, #41) - Add PgSTAC Search entries model (#43)
- Add
Metadata
specification (#38)
breaking changes
- update
titiler.core
andtitiler.mosaic
requirement to>=0.5
- When registering a
search
to PgSTAC with the/register
endpoint, a default metadata{"type": "mosaic"}
will be set. - Renamed
titiler.pgstac.models
totitiler.pgstac.model
- Renamed
titiler.pgstac.models.SearchQuery
totitiler.pgstac.model.PgSTACSearch
(and removedmetadata
) - output response for
/register
endpoint:
// before
{
"searchid": "...",
"metadata": "http://endpoint/.../info",
"tiles": "http://endpoint/.../tilejson.json",
}
// now
{
"searchid": "...",
"links": [
{
"rel": "info",
"href": "http://endpoint/.../info",
"type": "application/json",
},
{
"rel": "tilejson",
"href": "http://endpoint/.../tilejson.json",
"type": "application/json",
}
]
}
- output response for
/info
endpoint:
// before
{
"hash": "...",
"search": {},
"_where": "...",
...
}
// now
{
"search": {
"hash": "...",
"search": {},
"_where": "...",
...
},
"links": [
{
"rel": "self",
"href": "http://endpoint/.../info",
"type": "application/json",
},
{
"rel": "tilejson",
"href": "http://endpoint/.../tilejson.json",
"type": "application/json",
}
]
}
- add tile
buffer
option to match rio-tiler tile options (#31)
- Forward TMS to the STAC Reader (allow multiple TMS) (#28)
- Switch to psycopg3
- add
filter-lang
in Search model to support newer PgSTAC (with CQL-2) - add
metadata
in Search model to allow forwarding metadata to the search query entry in PgSTAC
breaking changes
- Unify reader/writer db pools to
request.app.state.dbpool
- rename
PostgresSettings.db_max_inactive_conn_lifetime
toPostgresSettings.max_idle
- remove
PostgresSettings().reader_connection_string
andPostgresSettings().writer_connection_string
. Replaced withPostgresSettings().connection_string
- update titiler requirement (>= 0.4)
- Surface PgSTAC options (
scan_limit
,items_limit
,time_limit
,exitwhenfull
andskipcovered
) in Tile endpoints
breaking changes
- remove
psycopg2
requirements to avoid conflict withpsycopg2-binary
(#15)
Initial release