{ "info": { "author": "Philip Graae", "author_email": "phgr@dhigroup.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Framework :: Flask", "Intended Audience :: End Users/Desktop", "Intended Audience :: Science/Research", "Intended Audience :: System Administrators", "License :: OSI Approved :: MIT License", "Operating System :: MacOS :: MacOS X", "Operating System :: Microsoft :: Windows :: Windows 10", "Operating System :: Unix", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Topic :: Internet :: WWW/HTTP :: HTTP Servers", "Topic :: Internet :: WWW/HTTP :: WSGI :: Application", "Topic :: Multimedia :: Graphics :: Viewers", "Topic :: Scientific/Engineering :: GIS", "Topic :: Software Development :: Build Tools" ], "description": "[![Build Status](https://travis-ci.com/DHI-GRAS/terracotta.svg?token=27HwdYKjJ1yP6smyEa25&branch=master)](https://travis-ci.org/DHI-GRAS/terracotta)\n[![Documentation Status](https://readthedocs.org/projects/terracotta-python/badge/?version=latest)](https://terracotta-python.readthedocs.io/en/latest/?badge=latest)\n[![codecov](https://codecov.io/gh/DHI-GRAS/terracotta/branch/master/graph/badge.svg?token=u16QBwwvvn)](https://codecov.io/gh/DHI-GRAS/terracotta)\n[![GitHub release](https://img.shields.io/github/release-pre/dhi-gras/terracotta.svg)](https://github.com/DHI-GRAS/terracotta/releases)\n[![PyPI release](https://img.shields.io/pypi/v/terracotta.svg)](https://pypi.org/project/terracotta)\n[![License](https://img.shields.io/github/license/dhi-gras/terracotta.svg)](https://github.com/DHI-GRAS/terracotta/blob/master/LICENSE)\n[![Python versions](https://img.shields.io/pypi/pyversions/terracotta.svg)](https://pypi.org/project/terracotta)\n\n[![Logo](https://github.com/DHI-GRAS/terracotta/raw/master/docs/_figures/logo-banner.svg)](#)\n\nTerracotta is a pure Python tile server that runs as a WSGI app on a\ndedicated webserver or as a serverless app on AWS Lambda. It is built on a\nmodern Python 3.6 stack, powered by awesome open-source software such as\n[Flask](http://flask.pocoo.org), [Zappa](https://github.com/Miserlou/Zappa),\nand [Rasterio](https://github.com/mapbox/rasterio).\n\n[Try the demo](https://terracotta-python.readthedocs.io/en/latest/preview-app.html) |\n[Read the docs](https://terracotta-python.readthedocs.io/en/latest) |\n[Explore the API](https://2truhxo59g.execute-api.eu-central-1.amazonaws.com/production/apidoc) |\n[Satlas, powered by Terracotta](http://satlas.dk)\n\n## Why Terracotta?\n\n- It is trivial to get going. Got a folder full of\n [cloud-optimized GeoTiffs](https://www.cogeo.org/) in different\n projections you want to have a look at in your browser?\n `terracotta serve -r {name}.tif` and\n `terracotta connect localhost:5000` get you there.\n- We make minimal assumptions about your data, so *you stay in charge*.\n Keep using the tools you know and love to create and organize your\n data, Terracotta serves it exactly as it is.\n- Serverless deployment is a first-priority use case, so you don\u2019t have\n to worry about maintaining or scaling your architecture.\n- Terracotta instances are self-documenting. Everything the frontend\n needs to know about your data is accessible from only a handful of\n API endpoints.\n\n## The Terracotta workflow\n\n### 1. Optimize raster files\n\n```bash\n$ ls -lh\ntotal 1.4G\n-rw-r--r-- 1 dimh 1049089 231M Aug 29 16:45 S2A_20160724_135032_27XVB_B02.tif\n-rw-r--r-- 1 dimh 1049089 231M Aug 29 16:45 S2A_20160724_135032_27XVB_B03.tif\n-rw-r--r-- 1 dimh 1049089 231M Aug 29 16:46 S2A_20160724_135032_27XVB_B04.tif\n-rw-r--r-- 1 dimh 1049089 231M Aug 29 16:56 S2A_20170831_171901_25XEL_B02.tif\n-rw-r--r-- 1 dimh 1049089 231M Aug 29 16:57 S2A_20170831_171901_25XEL_B03.tif\n-rw-r--r-- 1 dimh 1049089 231M Aug 29 16:57 S2A_20170831_171901_25XEL_B04.tif\n\n$ terracotta optimize-rasters *.tif -o optimized/\n\nOptimizing rasters: 100%|\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588| [05:16<00:00, file=S2A_20170831_...25XEL_B04.tif]\n```\n\n### 2. Create a database from file name pattern\n\n```bash\n$ terracotta ingest optimized/S2A_{date}_{}_{tile}_{band}.tif -o greenland.sqlite\nIngesting raster files: 100%|\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588| 6/6 [00:49<00:00, 8.54s/it]\n```\n\n### 3. Serve it up\n\n```bash\n$ terracotta serve -d greenland.sqlite\n * Serving Flask app \"terracotta.server\" (lazy loading)\n * Environment: production\n WARNING: Do not use the development server in a production environment.\n Use a production WSGI server instead.\n * Debug mode: off\n * Running on http://localhost:5000/ (Press CTRL+C to quit)\n```\n\n### 4. Explore the running server\n\n#### Manually\n\nYou can use any HTTP-capable client, such as `curl`.\n```bash\n$ curl localhost:5000/datasets?tile=25XEL\n{\"page\":0,\"limit\":100,\"datasets\":[{\"date\":\"20170831\",\"tile\":\"25XEL\",\"band\":\"B02\"},{\"date\":\"20170831\",\"tile\":\"25XEL\",\"band\":\"B03\"},{\"date\":\"20170831\",\"tile\":\"25XEL\",\"band\":\"B04\"}]}\n```\n\nModern browsers (e.g. Chrome or Firefox) will render the JSON as a tree.\n\n#### Interactively\n\nTerracotta also includes a web client. You can start the client (assuming the server is running at http://localhost:5000) using\n```bash\n$ terracotta connect localhost:5000\n * Serving Flask app \"terracotta.client\" (lazy loading)\n * Environment: production\n WARNING: Do not use the development server in a production environment.\n Use a production WSGI server instead.\n * Debug mode: off\n * Running on http://127.0.0.1:5100/ (Press CTRL+C to quit)\n```\n\nThen open the client page (http://127.0.0.1:5100/ in this case) in your browser.\n\n![preview](https://github.com/DHI-GRAS/terracotta/raw/master/docs/_figures/workflow-preview.png)\n\n## Development\n\nWe gladly accept [bug reports](https://github.com/DHI-GRAS/terracotta/issues)\nand [pull requests](https://github.com/DHI-GRAS/terracotta/pulls) via GitHub.\nFor your code to be useful, make sure that it is covered by tests and that\nit satisfies our linting practices (via `mypy` and `flake8`).\n\nTo run the tests, just install the necessary dependencies via\n\n```bash\n$ pip install -e .[test]\n```\n\nThen, you can run\n\n```bash\n$ pytest\n```\n\nfrom the root of the repository.", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/DHI-GRAS/terracotta", "keywords": "xyz tileserver rasterio cloud-optimized-geotiff serverless", "license": "", "maintainer": "", "maintainer_email": "", "name": "terracotta", "package_url": "https://pypi.org/project/terracotta/", "platform": "", "project_url": "https://pypi.org/project/terracotta/", "project_urls": { "Homepage": "https://github.com/DHI-GRAS/terracotta" }, "release_url": "https://pypi.org/project/terracotta/0.5.2/", "requires_dist": null, "requires_python": ">=3.6", "summary": "A modern XYZ tile server written in Python", "version": "0.5.2" }, "last_serial": 5990681, "releases": { "0.5.0": [ { "comment_text": "", "digests": { "md5": "7fbfaa7f6574fbfcfe4e16c14800c2ed", "sha256": "cbc97ea3f687df20413ee6fcf20ce20afb25c698b4cb1d547763fa8155471c78" }, "downloads": -1, "filename": "terracotta-0.5.0-py3-none-any.whl", "has_sig": false, "md5_digest": "7fbfaa7f6574fbfcfe4e16c14800c2ed", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 584124, "upload_time": "2018-12-11T13:58:59", "url": "https://files.pythonhosted.org/packages/7d/46/4649f50a5dc381852425dd1db326c9732cfb495b798b7a690cc0949bead5/terracotta-0.5.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "df89263d2585bfc77f784024866a93df", "sha256": "b5b999f53e7312087538e2cd5c0e918354db7ff7124d48fde682912925f16a72" }, "downloads": -1, "filename": "terracotta-0.5.0.tar.gz", "has_sig": false, "md5_digest": "df89263d2585bfc77f784024866a93df", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 1526440, "upload_time": "2018-12-11T13:59:02", "url": "https://files.pythonhosted.org/packages/25/a7/c34b774aaff07307803d2165b7c3f8cfbf4830781e4f20672d1c3ef98d9a/terracotta-0.5.0.tar.gz" } ], "0.5.0b1": [ { "comment_text": "", "digests": { "md5": "fb9ee75d5907a4f9cf9210fbde4b45fc", "sha256": "2639900798eaeccce66966e1094e0944eeeb40aa0756e4a304170ee659932a4a" }, "downloads": -1, "filename": "terracotta-0.5.0b1-py3-none-any.whl", "has_sig": false, "md5_digest": "fb9ee75d5907a4f9cf9210fbde4b45fc", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 573134, "upload_time": "2018-12-04T13:12:47", "url": "https://files.pythonhosted.org/packages/0c/ca/16cf5d76680c08e6a071769b68dc8e7e8da07c33e6836f24fb2bb2015e19/terracotta-0.5.0b1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "37d055788b9bef41642bd64043779174", "sha256": "b1da5ea15eb2a062e2d9f30e63b1fc22a3d0dae9937a3feb559d03ec5144dd2d" }, "downloads": -1, "filename": "terracotta-0.5.0b1.tar.gz", "has_sig": false, "md5_digest": "37d055788b9bef41642bd64043779174", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 533121, "upload_time": "2018-12-04T13:12:50", "url": "https://files.pythonhosted.org/packages/17/21/5a780acb13bcae6c1670923797a549ce93d4442efd7192fbf5d74ed050db/terracotta-0.5.0b1.tar.gz" } ], "0.5.1": [ { "comment_text": "", "digests": { "md5": "b45a23f4299d0a9d9add14e74b8e763e", "sha256": "b5b497574bd43f0ce6eeb07e01f52689103434bbc990722ebb0d9f0fa0248b35" }, "downloads": -1, "filename": "terracotta-0.5.1-py3-none-any.whl", "has_sig": false, "md5_digest": "b45a23f4299d0a9d9add14e74b8e763e", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 588486, "upload_time": "2019-04-03T13:45:09", "url": "https://files.pythonhosted.org/packages/26/f4/e612c92b7669b2e4851122186d36f5bd461dfcf22599a2a025d9a5274a53/terracotta-0.5.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "54a31f3a4342125a2875c7b01050a95b", "sha256": "af0254a5119604462a714d95b4e47c6bfc426671f768cc53800a165d9190e6e6" }, "downloads": -1, "filename": "terracotta-0.5.1.tar.gz", "has_sig": false, "md5_digest": "54a31f3a4342125a2875c7b01050a95b", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 1538621, "upload_time": "2019-04-03T13:45:14", "url": "https://files.pythonhosted.org/packages/53/7b/efef72edd18ccc79a4817f3953f2365ae2cd9dcabb7f4c693edcc6d0cb1b/terracotta-0.5.1.tar.gz" } ], "0.5.2": [ { "comment_text": "", "digests": { "md5": "fc8de2ceafcff0fced5ff1fbd13585e8", "sha256": "d692af5d79cd164192dca0b610dd9a29581d858e78229f2ce615e8fb953c66e1" }, "downloads": -1, "filename": "terracotta-0.5.2.tar.gz", "has_sig": false, "md5_digest": "fc8de2ceafcff0fced5ff1fbd13585e8", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 1539640, "upload_time": "2019-10-17T15:30:23", "url": "https://files.pythonhosted.org/packages/1c/a5/bcd98bcb69adcb84c6b43689ece9eb89404c2d2e46b75e1b227f6e6d8b61/terracotta-0.5.2.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "fc8de2ceafcff0fced5ff1fbd13585e8", "sha256": "d692af5d79cd164192dca0b610dd9a29581d858e78229f2ce615e8fb953c66e1" }, "downloads": -1, "filename": "terracotta-0.5.2.tar.gz", "has_sig": false, "md5_digest": "fc8de2ceafcff0fced5ff1fbd13585e8", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 1539640, "upload_time": "2019-10-17T15:30:23", "url": "https://files.pythonhosted.org/packages/1c/a5/bcd98bcb69adcb84c6b43689ece9eb89404c2d2e46b75e1b227f6e6d8b61/terracotta-0.5.2.tar.gz" } ] }