from fastapi import FastAPI from titiler.core.factory import TilerFactory from titiler.stac.factory import STACTilerFactory from titiler.mosaic.factory import MosaicTilerFactory from starlette.middleware.cors import CORSMiddleware app = FastAPI( title="MPG TiTiler Endpoint", description="High-performance geospatial tile server with COG, STAC, and Mosaic support", version="1.0.0" ) # Enable CORS app.add_middleware( CORSMiddleware, allow_origins=["*"], # Use specific domains in production allow_credentials=True, allow_methods=["*"], allow_headers=["*"], ) # ---- COG Tiler ---- cog = TilerFactory() app.include_router(cog.router, tags=["Cloud Optimized GeoTIFF"]) # ---- STAC Tiler ---- stac = STACTilerFactory() app.include_router(stac.router, prefix="/stac", tags=["STAC Items"]) # ---- MosaicJSON Tiler ---- mosaic = MosaicTilerFactory() app.include_router(mosaic.router, prefix="/mosaic", tags=["MosaicJSON"]) # Root endpoint with API information @app.get("/") def read_index(): return { "message": "Welcome to MPG TiTiler Endpoint", "description": "High-performance geospatial tile server", "endpoints": { "cog": "Cloud Optimized GeoTIFF tiling", "stac": "STAC item tiling (prefix: /stac)", "mosaic": "MosaicJSON tiling (prefix: /mosaic)" }, "docs": "/docs", "health": "/health" } @app.get("/health") def health_check(): return {"status": "healthy", "service": "titiler"}