This is the POSM Imagery API. It does a few things:
- ingests GeoTIFFs (and probably other GDAL-supported formats, though it currently looks for
.tifand.tiffextensions) using HTTP multipart uploads and via the tus.io protocol for resumable uploads. - creates overviews and associated metadata to facilitate tiling
- tiles imagery on-demand
- creates MBTiles archives for individual images (and should do the same for imagery sets)
First, start redis-server so that Docker containers can access it (so that Celery can use it as a
broker and result backend and so that Flask-Tus can track uploads):
redis-server --bind 0.0.0.0This runs gunicorn under the hood (using the default Docker ENTRYPOINT).
# get the host IP on OS X (wired, then wireless)
ip=$(ipconfig getifaddr en0 || ipconfig getifaddr en1)
docker run \
-it \
--rm \
-e WEB_CONCURRENCY=8 \
-e REDIS_URL="redis://${ip}/" \
-v $(pwd)/imagery:/app/imagery \
-v $(pwd)/uploads:/app/uploads \
-p 8000:8000 \
imagery-apiThis overrides the default ENTRYPOINT and starts the Celery daemon to run workers instead. Note
that the imagery and uploads volumes are shared between containers.
# get the host IP on OS X (wired, then wireless)
ip=$(ipconfig getifaddr en0 || ipconfig getifaddr en1)
docker run \
-it \
--rm \
-e REDIS_URL="redis://${ip}/" \
-v $(pwd)/imagery:/app/imagery \
-v $(pwd)/uploads:/app/uploads \
--entrypoint celery \
imagery-api \
worker \
-A app.celery \
--loglevel=infoYou can either run a development copy with docker-compose:
docker-compose up...or you can develop against a local copy. To set up, create a virtualenv, install the
dependencies, and start up the API server and Celery workers. You'll also need a local Redis server.
Create a virtualenv and install dependencies:
virtualenv venv
source venv/bin/activate
pip install -U numpy # install this first so rasterio doesn't complain
pip install -Ur requirements.txt
npm installStart the API server:
source venv/bin/activate
python app.pyStart the Celery workers:
source venv/bin/activate
venv/bin/celery worker -A app.celery --loglevel=infoTo start Redis:
redis-serverTo see an up-to-date list of API endpoints (and supported methods), run python manage.py list_routes.
GET /imagery- List available imagery.GET /imagery/<id>- Get metadata for an image.GET /imagery/<id>/<z>/<x>/<y>[@2x].png- Tile endpoint for an image.GET /imagery/<id>/ingest/status- Check on the ingestion status for an image.GET /imagery/<id>/mbtiles- Download the MBTiles archive for an image (if available).POST /imagery/<id>/mbtiles- Request creation of an MBTiles archive.GET /imagery/<id>/mbtiles/status- Check on the status of MBTiles creation.PUT /imagery/upload- Upload imagery. Requires the image to be thefilevalue of amultipart/form-datapayload. E.g.,curl -X PUT -F "[email protected]" http://localhost:8000/imagery/uploadPOST /imagery/upload- tus.io upload endpoint.
APPLICATION_ROOT- Optional application prefix. Defaults to ``.IMAGERY_PATH- Where to store imagery on the filesystem. Must be accessible by both the API server and Celery workers. Defaults toimagery(relative to the current working directory).UPLOADED_IMAGERY_DEST- Where to (temporarily) store uploaded imagery. Must be accessible by both the API server and Celery workers. Defaults touploads/(relative to the current working directory).MIN_ZOOM- Minimum zoom served up by the tile server. Defaults to0.MAX_ZOOM- Maximum zoom served up by the tile server. Defaults to22.CELERY_BROKER_URL- Celery broker URL. Defaults to the value ofREDIS_URL.CELERY_DEFAULT_QUEUE- Default queue name. Defaults toposm-imagery-api.CELERY_RESULT_BACKEND- Celery result backend URL. Defaults to the value ofREDIS_URL.REDIS_URL- Flask-Tus backend. Defaults toredis://(localhost, default port, default database).SERVER_NAME- Local server name, for use when generating MBTiles. Defaults tolocalhost:8000.USE_X_SENDFILE- Whether Flask should useX-Sendfileto defer file serving to a proxying web server (this requires that the web server and API server are running on the same "server", so Docker won't work). Defaults toFalse.MBTILES_TIMEOUT- How long to wait before timing out MBTiles archive creation tasks. Defaults to 3600s (1 hour).TASK_TIMEOUT- How long to wait before timing out tasks. Defaults to 900s (15 minutes).