GithubHelp home page GithubHelp logo

camptocamp / tilecloud Goto Github PK

View Code? Open in Web Editor NEW
229.0 19.0 34.0 26.12 MB

A powerful utility for generating, managing, transforming, and visualizing map tiles in multiple formats.

License: BSD 2-Clause "Simplified" License

Makefile 0.39% Python 93.89% Smarty 4.92% Shell 0.21% Dockerfile 0.60%

tilecloud's Introduction

TileCloud

A powerful utility for generating, managing, transforming, and visualizing map tiles in multiple formats.

Introduction

TileCloud is a powerful utility for generating, managing, transforming, visualizing and map tiles in multiple formats. It can create, read update, delete tiles in multiple back ends, called TileStores. Existing TileStores include:

TileCloud is not limited to image tiles, it can also handle other tile data such as UTFGrid, or elevation data in JSON format.

TileCloud uses Python's generators and iterators to efficiently stream tens of millions of tiles, and can handle multiple tiles in parallel using Python's multiprocessing library.

Example tasks that TileCloud makes easy include:

  • Visualize tiles stored in any TileStore with OpenLayers, Google Maps, jQuery Geo, Leaflet, Polymaps, Modest Maps, and OpenWebGlobe.
  • Convert sixty million PNG tiles stored in S3 to JPEG format with different quality settings at different zoom levels.
  • Transform image formats and perform arbitrary image transformations on the fly, including PNG optimization.
  • Generate semi-transparent tiles with embedded tile coordinates for debugging.
  • Pack multiple tile layers into a single tile on the server.
  • Efficiently calculate bounding boxes and detect missing tiles in existing tile datasets.
  • Simulate fast and slow tile servers.
  • Efficiently delete millions of tiles in S3.
  • Read JSON tiles from a tarball, compress them, and upload them.

Getting started

TileCloud depends on some Python modules. It's easiest to install them with pip in a virtualenv:

$ pip install poetry
$ poetry install

For a quick demo, run

$ poetry run tc-viewer --root=3/4/2 'http://gsp2.apple.com/tile?api=1&style=slideshow&layers=default&lang=en_GB&z=%(z)d&x=%(x)d&y=%(y)d&v=9'

and point your browser at http://localhost:8080/. Type Ctrl-C to terminate tc-viewer.

Next, download an example MBTiles file from MapBox, such as OSM map. We can quickly find out more about this tile set with the tc-info command. For example, to count the number of tiles:

$ poetry run tc-info -t count OSM-OpenCPN2-MagellanStrait.mbtiles
51672

To calculate the bounding pyramid:

$ poetry run tc-info -t bounding-pyramid -r OSM-OpenCPN2-MagellanStrait.mbtiles
8/72/168:+16/+16
10/296/680:+40/+32
12/1184/2728:+144/+104
14/4760/10935:+536/+393
16/19048/43760:+2112/+1552

To check for missing tiles against a bounding pyramid:

$ poetry run tc-info -b 8/72/168:16/*/* -t completion OSM-OpenCPN2-MagellanStrait.mbtiles
8 256/65536 (0%)
9 0/262144 (0%)
10 832/1048576 (0%)
11 0/4194304 (0%)
12 4392/16777216 (0%)
13 0/67108864 (0%)
14 21408/268435456 (0%)
15 0/1073741824 (0%)
16 24784/4294967296 (0%)

This shows, for each zoom level, the number of tiles at that zoom level, the total number of tiles expected at that zoom level for the specified bounding pyramid (8/0/0:16/*/* means all tiles from level 8 to level 16), and a percentage completion. This can be useful for checking that a tile set is complete.

Now, display this MBTiles tile set on top of the OpenStreetMap tiles and a debug tile layer:

$ poetry run tc-viewer tiles.openstreetmap_org OSM-OpenCPN2-MagellanStrait.mbtiles tiles.debug.black

You'll need to point your browser at http://localhost:8080/ and choose your favorite library.

tc-info and tc-viewer are utility programs. Normally you use TileCloud by writing short Python programs that connect the TileCloud's modules to perform the action that you want.

As a first example, run the following:

$ poetry run examples/download.py

This will download a few tiles from OpenStreetMap and save them in a local MBTiles file called local.mbtiles. Look at the source code to examples/download.py to see how it works. If there are problems with the download, just interrupt it with Ctrl-C and re-run it: the program will automatically resume where it left off.

Once you have downloaded a few tiles, you can view them directly with tc-viewer:

$ poetry run tc-viewer --root=4/8/5 local.mbtiles tiles.debug.black

Point your browser at http://localhost:8080 as usual. The --root option to tc-viewer instructs the viewer to start at a defined tile, rather than at 0/0/0, so you don't have to zoom in to find the tiles that you downloaded.

Changelog

1.9.0

  • Add the following extra dependencies azure, aws, wsgi, redis, all.

Tile coordinates, tile layouts, tile grids and bounding pyramids

TileCloud always represents tile coordinates as strings like z/x/y. TileCloud primarily works in tile coordinates, although geographic coordinates can be used in some places.

Tile layouts convert tile coordinates to and from strings for use in paths, URLs, keys, etc.

Tile grids are used to convert tile coordinates to and from geographic coordinates, and to relate tiles with different z values.

Bounding pyramids represent a range of tiles in the x, y and z directions. The format is basically minz/minx/miny:maxz/maxx/maxy but maxz is optional and maxz, maxx and maxy can be prefixed with an + sign to indicate that they are relative to the corresponding min value. This is probably best demonstrated by a few examples:

4/10/20:15/25

: This corresponds to a range of tiles with z=4, x=10..15 and y=20..25

4/10/20:+5/+5

: This is the same range (z=4, x=10..15, y=20..25) but expressed using relative sizes.

4/10/20:5/15/20

: This is the same range of tiles above, but also includes all the tiles at level z=5 which overlap the above range. TileCloud uses the tile grid to calculate which tiles from level z=5 to include.

4/10/20:+1/+5/+5

: This represents the range same as the previous example using a relative maxz.

Quick tile generation

The tc-copy command can be used to copy tiles between different TileStores. If a TileStore has the side effect of generating tiles, then it functions as a quick tile generation utility. First, some quick examples.

To convert from one tile format to another, just copy from source to destination. For example, to convert an MBTiles file in to a ZIP file, just run:

$ poetry run tc-copy OSM-OpenCPN2-MagellanStrait.mbtiles geography-class.zip

You can check this worked with unzip:

$ unzip -t geography-class.zip

Equally, tc-copy can be used to download multiple tiles:

$ poetry run tc-copy --bounding-pyramid 4/0/0:0/16/16 tiles.openstreetmap_org osm-up-to-z4.mbtiles

Here we downloaded zoom levels 0 to 4 of the OpenStreetMap tiles into a local MBTiles file. The --bounding-pyramid option is required because otherwise we would download all OpenStreetMap tiles -- which might take some time (and also contravene OpenStreetMap's tile usage policy). Note that, by default, tc-copy won't overwrite tiles if they already exist in the destination. This means that you can interrupt the above command and restart it, and it will resume where it was interrupted. If you want to overwrite tiles in the destination then pass the --overwrite option to tc-copy.

In the same way, tc-copy can also be used to upload tiles. For example, to upload an MBTiles file to S3, just use:

$ poetry run tc-copy osm-up-to-z4.mbtiles s3://bucket/prefix/%(z)d/%(x)d/%(y)d.jpg

bucket is the name of your S3 bucket. You'll need to have set the AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY environment variables to have permission to upload to S3. The rest of the destination (prefix/%(z)d/%(x)d/%(y)d.jpg) is a template describing the layout of the tiles in S3. It's a normal Python format string: %(x)d means substitute the tile's x coordinate as a decimal integer.

You can pass the same s3:// URL to tc-viewer. This allows you to visualize your tiles stored in S3 with your favorite mapping library. For example:

$ poetry run tc-viewer s3://bucket/prefix/%(z)d/%(x)d/%(y)d.jpg

Here, tc-viewer is acting as a proxy, serving tiles stored in S3 over HTTP, bypassing any caches or access controls (assuming you have the correct credentials, of course). This allows you to visualize the exact tiles that you've stored.

Rendering the World

At FOSS4G-NA, MapBox presented an excellent strategy for rendering the world. TileCloud supports the subdivision strategy. To run the demo, execute:

$ poetry run examples/renderingtheworld.py

This will generate tiles from a WMTS tile server and save them in a local MBTiles tiles. When the above command is complete, you can see the bounding pyramid of the generated tiles:

$ poetry run tc-info -t bounding-pyramid -r medford_buildings.mbtiles
0/0/0:+1/+1
1/0/0:+1/+1
2/0/1:+1/+1
3/1/2:+1/+1
4/2/5:+1/+1
5/5/11:+1/+1
6/10/23:+1/+1
7/20/47:+1/+1
8/40/94:+2/+2
9/80/189:+2/+1
10/162/378:+1/+2
11/324/757:+2/+2
12/649/1514:+3/+3
13/1299/3028:+4/+5
14/2598/6057:+7/+8
15/5196/12114:+13/+15

You can look at these tiles (which show buildings in Medford, OR) with the command:

./tc-viewer --root=7/20/47 tiles.openstreetmap_org medford_buildings.mbtiles

A cheap-and-cheerful tile server

tc-viewer can be used as a lightweight tile server, which can be useful for development, debugging and off-line demos. The TileStores passed as arguments to tc-viewer are available at the URL:

http://localhost:8080/tiles/{index}/tiles/{z}/{x}/{y}

where {index} is the index of the TileStore on the command line (starting from 0 for the first tile store), and {z}, {x} and {y} are the components of the tile coordinate. The second tiles in the URL is present to work around assumptions made by OpenWebGlobe. This layout is directly usable by most mapping libraries, see the code in tilecloud/views/*.tpl for examples. The host and port can be set with the --host and --port command line options, respectively.

Note that there is no file extension. tc-viewer will automatically set the correct content type and content encoding headers if it can determine them, and, failing this, most browsers will figure it out for themselves.

For convenience, tc-viewer serves everything in the static directory under the URL /static. This can be used to serve your favorite mapping library and/or application code directly for testing purposes.

By default, tc-viewer will use Tornado as a web server, if it is available, otherwise it will fall back to WSGIRef. Tornado has reasonably good performance, and is adequate for local development and off-line demos, especially when used with a MBTiles TileStore. WSGIRef has very poor performance (it handles only one request at a time) and as such can be used as a "slow" tile server, ideal for debugging tile loading code or testing how your web application performs over a slow network connection. tc-viewer is particularly slow when used to proxy tiles being served by a remote server. You can set the server explicitly with the --server option.

tc-viewer sets the Access-Control-Allow-Origin header to * for all the tiles it serves, this allows the tiles to be used as textures for WebGL applications running on different hosts/ports. For more information, see Cross-Domain Textures.

tc-viewer is designed as a development tool, and the power that it offers comes at the expense of fragility. It makes many assumptions - including the benevolence of the user - that make it entirely unsuitable as a generic tile server. It should only be used in development or demonstration environments.

Comparing mapping libraries

tc-viewer supports most popular web mapping libraries out-of-the box. This can be very useful for quick, practical comparisons. If your favorite mapping library is missing, please submit an issue, or, even better, a pull request.

Contributing

Please report bugs and feature requests using the GitHub issue tracker.

If you'd like to contribute to TileCloud, please install the development requirements:

$ pip install -r dev-requirements.txt

TileCloud comes with unit tests in the tilecloud/tests directory. You can run these with the command:

$ make test

This is equivalent to:

$ python setup.py nosetests

For pull requests, it is very much appreciated if your code passes prospector without warnings. You can run prospector on the codebase with the command:

$ make prospector

License

Copyright (c) 2012, Tom Payne [email protected] All rights reserved. Copyright (c) 2012, Camptocamp All rights reserved.

Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

  • Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
  • Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

vim: set filetype=rst spell spelllang=en textwidth=0:

Contributing

Install the pre-commit hooks:

pip install pre-commit
pre-commit install --allow-missing-config

tilecloud's People

Contributors

alexbrault avatar arnaud-morvan avatar asaunier avatar ckaenzig avatar dependabot-preview[bot] avatar dependabot[bot] avatar ebelo avatar elemoine avatar fredj avatar gberaudo avatar guewen avatar pre-commit-ci[bot] avatar pvalsecc avatar rajpratik71 avatar renovate-bot avatar renovate[bot] avatar requires avatar sandypm007 avatar sbrunner avatar sdebayle avatar twpayne avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

tilecloud's Issues

Errors in README.md

The Getting started section leaves out the actual install of tilecloud. "pip install tilecloud" should be added someplace.

This repo does not seem to include a setup.py file, or anything to install. Nor does the repo contain run-in-place python code.

All of the references to "./tc-viewer" and "./tc-info" do not work. The files in the git repo can't be run directly, end in .py and have _ where the - is. After a "pip install tilecloud" the commands do work but only without the preceding "./".

Now I'm also having trouble with the suggested demos. But I'll report back on that once I have spent more time to see if the installation is actually ok.

BoundingPyramid Explanation

I've some problems figuring out the meaning of the 6 values of the bounding pyramid. A explanation of the values in the help section of tc-copy would be great. Or some more examples in the ReadMe of tilecloud.
An option to enter Lat/Long bounds would help a lot.

Issues with quick demo

When running the basic "quick demo" I'm getting:

Sorry, the requested URL 'http://localhost:8080/' caused an error:

Template 'index' not found.

My tilecloud package seems to be complete: listing

Dependency Dashboard

This issue lists Renovate updates and detected dependencies. Read the Dependency Dashboard docs to learn more.

Awaiting Schedule

These updates are awaiting their schedule. Click on a checkbox to get an update now.

  • Update all patch versions (master) (patch) (azure-storage-blob, boto3, types-requests)
  • Update dependency poetry to v1.8.2 (master)
  • Lock file maintenance (master)

Open

These updates have all been created already. Click a checkbox below to force a retry/rebase of any.

Detected dependencies

Branch 1.6
asdf
.tool-versions
  • python 3.8.18
docker-compose
docker-compose.yaml
  • redis 5
dockerfile
Dockerfile
  • osgeo/gdal 3.2.0
github-actions
.github/workflows/backport.yaml
  • ubuntu 22.04
.github/workflows/changelog.yaml
  • actions/checkout v4
  • actions/cache v3
  • ubuntu 22.04
.github/workflows/clean.yaml
  • actions/checkout v4
  • camptocamp/initialise-gopass-summon-action v2
  • ubuntu 22.04
.github/workflows/codeql.yaml
  • actions/checkout v2
  • github/codeql-action v1
  • github/codeql-action v1
  • ubuntu 22.04
.github/workflows/main.yaml
  • actions/checkout v2
  • camptocamp/initialise-gopass-summon-action v2
  • ubuntu 22.04
.github/workflows/pr-checks.yaml
  • actions/checkout v3
  • ubuntu 22.04
.github/workflows/pull-request-automation.yaml
  • actions/github-script v7
  • actions/github-script v7
  • actions/github-script v7
  • actions/github-script v7
  • actions/github-script v7
  • ubuntu 22.04
pip_requirements
ci/requirements.txt
  • c2cciutils ==1.1.35
  • oauthlib >=3.2.1
  • setuptools >=65.5.1
  • pip >=21.1
  • certifi >=2022.12.7
  • cryptography >=39.0.1
  • requests >=2.31.0
  • pygments >=2.15.0
requirements-dev.txt
  • prospector ==1.3.1
  • mypy ==0.812
  • pytest ==6.2.5
  • pytest-cov ==2.11.1
requirements-publish.txt
  • twine ==3.4.2
requirements.txt
  • azure-storage-blob ==12.13.1
  • boto3 ==1.17.112
  • bottle ==0.12.25
  • c2cwsgiutils >=4.0.1
  • Pillow ==10.2.0
  • pyproj ==3.0.1
  • pyramid ==2.0.2
  • certifi >=2022.12.7
  • setuptools >=65.5.1
  • cryptography >=39.0.1
  • requests >=2.31.0
  • urllib3 ==1.26.18
pip_setup
setup.py
  • requests >=1.0
  • redis >=2
pre-commit
.pre-commit-config.yaml
  • pre-commit/mirrors-prettier v2.7.1
regex
ci/config.yaml
  • camptocamp/c2cciutils 1.1.35
Branch 1.8
docker-compose
docker-compose.yaml
  • redis 5
dockerfile
Dockerfile
  • osgeo/gdal 3.2.0
github-actions
.github/workflows/backport.yaml
  • ubuntu 22.04
.github/workflows/changelog.yaml
  • actions/checkout v4
  • actions/cache v3
  • ubuntu 22.04
.github/workflows/clean.yaml
  • actions/checkout v4
  • camptocamp/initialise-gopass-summon-action v2
  • ubuntu 22.04
.github/workflows/codeql.yaml
  • actions/checkout v2
  • github/codeql-action v1
  • github/codeql-action v1
  • ubuntu 22.04
.github/workflows/main.yaml
  • actions/checkout v2
  • camptocamp/initialise-gopass-summon-action v2
  • ubuntu 22.04
.github/workflows/pr-checks.yaml
  • actions/checkout v3
  • ubuntu 22.04
.github/workflows/pull-request-automation.yaml
  • actions/github-script v7
  • actions/github-script v7
  • actions/github-script v7
  • actions/github-script v7
  • actions/github-script v7
  • ubuntu 22.04
pip_requirements
ci/requirements.txt
  • c2cciutils ==1.1.35
  • oauthlib >=3.2.1
  • setuptools >=65.5.1
  • certifi >=2022.12.7
  • cryptography >=39.0.1
  • requests >=2.31.0
requirements-dev.txt
  • prospector ==1.7.7
  • pylint ==2.12.2
  • pytest ==7.1.3
  • pytest-cov ==3.0.0
  • mypy ==0.950
  • types-boto ==2.49.18.20240205
  • types-redis ==4.2.8
requirements-publish.txt
  • twine ==3.8.0
requirements.txt
  • azure-storage-blob ==12.13.1
  • azure-identity ==1.7.1
  • boto3 ==1.20.54
  • bottle ==0.12.25
  • c2cwsgiutils >=4.0.1
  • Pillow ==10.2.0
  • pyproj ==3.3.1
  • pyramid ==2.0.2
  • oauthlib >=3.2.1
  • pyjwt >=2.4.0
  • setuptools >=65.5.1
  • certifi >=2022.12.7
  • cryptography >=39.0.1
  • requests >=2.31.0
  • urllib3 ==1.26.18
pip_setup
setup.py
  • requests >=1.0
  • redis >=2
pre-commit
.pre-commit-config.yaml
  • pre-commit/mirrors-prettier v2.7.1
regex
ci/config.yaml
  • camptocamp/c2cciutils 1.1.35
Branch 1.9
docker-compose
docker-compose.yaml
  • redis 7
dockerfile
Dockerfile
  • osgeo/gdal 3.2.0
github-actions
.github/workflows/backport.yaml
  • ubuntu 20.04
.github/workflows/changelog.yaml
  • actions/checkout v4
  • actions/cache v3
  • ubuntu 22.04
.github/workflows/clean.yaml
  • actions/checkout v4
  • camptocamp/initialise-gopass-summon-action v2
  • ubuntu 22.04
.github/workflows/codeql.yaml
  • actions/checkout v3
  • github/codeql-action v2
  • github/codeql-action v2
  • ubuntu 20.04
.github/workflows/main.yaml
  • actions/checkout v3
  • camptocamp/initialise-gopass-summon-action v2
  • ubuntu 20.04
.github/workflows/pr-checks.yaml
  • actions/checkout v3
  • ubuntu 20.04
.github/workflows/pull-request-automation.yaml
  • actions/github-script v7
  • actions/github-script v7
  • actions/github-script v7
  • actions/github-script v7
  • actions/github-script v7
  • ubuntu 20.04
pep621
pyproject.toml
  • poetry-core >=1.3.0
  • poetry-plugin-tweak-dependencies-version >=1.1.0
pip_requirements
ci/requirements.txt
  • c2cciutils ==1.4.16
  • attrs ==23.2.0
  • certifi >=2023.7.22
  • cryptography >=41.0.6
  • requests >=2.31.0
requirements.txt
  • poetry ==1.3.2
  • poetry-plugin-export ==1.2.0
  • poetry-plugin-tweak-dependencies-version ==1.2.1
  • poetry-dynamic-versioning ==0.21.5
  • pip ==23.3.2
  • requests >=2.31.0
  • urllib3 >=1.26.18
  • certifi >=2023.7.22
  • jinja2 >=3.1.3
poetry
pyproject.toml
  • azure-storage-blob 12.14.1
  • azure-identity 1.12.0
  • boto3 1.26.165
  • bottle 0.12.25
  • c2cwsgiutils 5.1.7
  • Pillow 10.2.0
  • pyproj 3.4.1
  • pyramid 2.0.2
  • requests 2.31.0
  • redis 4.4.4
  • certifi 2023.7.22
  • cryptography 42.0.5
  • msal 1.24.1
  • urllib3 1.26.18
  • prospector 1.7.7
  • pytest 7.2.2
  • pytest-cov 4.0.0
  • types-boto 2.49.18.20240205
  • types-redis 4.3.21.7
  • types-requests 2.28.11.17
  • pycairo 1.23.0
  • Shapely 2.0.3
pre-commit
.pre-commit-config.yaml
  • pre-commit/mirrors-prettier v2.7.1
regex
.pre-commit-config.yaml
  • prettier 2.8.8
ci/config.yaml
  • camptocamp/c2cciutils 1.4.16
Branch 1.10
docker-compose
docker-compose.yaml
  • redis 7
dockerfile
Dockerfile
  • ghcr.io/osgeo/gdal ubuntu-small-3.7.3
github-actions
.github/workflows/backport.yaml
  • ubuntu 20.04
.github/workflows/changelog.yaml
  • actions/checkout v4
  • actions/cache v3
  • ubuntu 22.04
.github/workflows/clean.yaml
  • actions/checkout v4
  • camptocamp/initialise-gopass-summon-action v2
  • ubuntu 22.04
.github/workflows/codeql.yaml
  • actions/checkout v3
  • github/codeql-action v2
  • github/codeql-action v2
  • ubuntu 20.04
.github/workflows/main.yaml
  • actions/checkout v3
  • camptocamp/initialise-gopass-summon-action v2
  • actions/cache v3
  • ubuntu 22.04
.github/workflows/pr-checks.yaml
  • actions/checkout v3
  • ubuntu 20.04
.github/workflows/pull-request-automation.yaml
  • actions/github-script v7
  • actions/github-script v7
  • actions/github-script v7
  • actions/github-script v7
  • actions/github-script v7
  • ubuntu 20.04
pep621
pyproject.toml
  • poetry-core >=1.3.0
  • poetry-plugin-tweak-dependencies-version >=1.1.0
pip_requirements
ci/requirements.txt
  • c2cciutils ==1.5.10
  • pre-commit ==3.3.3
  • cryptography >=41.0.0
  • requests >=2.31.0
  • setuptools >=65.5.1
  • urllib3 >=1.26.17
requirements.txt
  • poetry ==1.5.1
  • poetry-plugin-export ==1.4.0
  • poetry-plugin-tweak-dependencies-version ==1.4.0
  • poetry-dynamic-versioning ==0.22.0
  • pip ==23.3.2
  • requests >=2.31.0
  • certifi >=2022.12.7
  • urllib3 >=1.26.17
  • jinja2 >=3.1.3
poetry
pyproject.toml
  • azure-storage-blob 12.16.0
  • azure-identity 1.13.0
  • boto3 1.26.165
  • bottle 0.12.25
  • prometheus_client 0.17.1
  • Pillow 10.2.0
  • pyproj 3.5.0
  • pyramid 2.0.2
  • requests 2.31.0
  • redis 4.5.5
  • cryptography 42.0.5
  • certifi 2023.7.22
  • msal 1.24.1
  • urllib3 1.26.18
  • prospector 1.10.3
  • pytest 7.3.2
  • pytest-cov 4.1.0
  • types-boto 2.49.18.20240205
  • types-redis 4.5.5.2
  • pycairo 1.23.0
  • Shapely 2.0.3
pre-commit
.pre-commit-config.yaml
  • pre-commit/mirrors-prettier v2.7.1
  • pre-commit/pre-commit-hooks v4.4.0
  • sbrunner/hooks 0.5.0
  • codespell-project/codespell v2.2.6
  • shellcheck-py/shellcheck-py v0.9.0.6
  • jumanjihouse/pre-commit-hooks 3.0.0
  • python-jsonschema/check-jsonschema 0.23.3
  • sirwart/ripsecrets v0.1.7
  • PyCQA/autoflake v2.1.1
  • asottile/pyupgrade v3.4.1
  • PyCQA/isort 5.12.0
  • psf/black 23.3.0
regex
.pre-commit-config.yaml
  • poetry 1.5.1
  • poetry 1.5.1
  • pyjson5 1.6.6
ci/config.yaml
  • camptocamp/c2cciutils 1.5.10
Branch 1.11
docker-compose
docker-compose.yaml
  • redis 7
dockerfile
Dockerfile
  • ghcr.io/osgeo/gdal ubuntu-small-3.7.3
github-actions
.github/workflows/backport.yaml
  • ubuntu 22.04
.github/workflows/changelog.yaml
  • actions/checkout v4
  • actions/cache v3
  • ubuntu 22.04
.github/workflows/clean.yaml
  • actions/checkout v4
  • camptocamp/initialise-gopass-summon-action v2
  • ubuntu 22.04
.github/workflows/codeql.yaml
  • actions/checkout v4
  • github/codeql-action v2
  • github/codeql-action v2
  • ubuntu 22.04
.github/workflows/main.yaml
  • actions/checkout v4
  • camptocamp/initialise-gopass-summon-action v2
  • actions/cache v3
  • ubuntu 22.04
.github/workflows/pr-checks.yaml
  • actions/checkout v4
  • ubuntu 22.04
.github/workflows/pull-request-automation.yaml
  • actions/github-script v7
  • actions/github-script v7
  • actions/github-script v7
  • actions/github-script v7
  • actions/github-script v7
  • actions/github-script v7
  • ubuntu 22.04
pep621
pyproject.toml
  • poetry-core >=1.3.0
  • poetry-plugin-tweak-dependencies-version >=1.1.0
pip_requirements
ci/requirements.txt
  • c2cciutils ==1.6.17
  • pre-commit ==3.5.0
  • poetry-dynamic-versioning ==1.1.1
  • poetry-plugin-export ==1.6.0
  • poetry-plugin-tweak-dependencies-version ==1.5.2
  • poetry-plugin-drop-python-upper-constraint ==0.1.0
  • certifi >=2023.7.22
  • setuptools >=65.5.1
  • jinja2 >=3.1.3
  • cryptography >=42.0.2
requirements.txt
  • poetry ==1.6.1
  • poetry-plugin-export ==1.6.0
  • poetry-plugin-tweak-dependencies-version ==1.5.2
  • poetry-dynamic-versioning ==1.1.1
  • pip ==23.3.2
  • certifi >=2023.7.22
  • jinja2 >=3.1.3
poetry
pyproject.toml
  • azure-storage-blob 12.18.3
  • azure-identity 1.15.0
  • boto3 1.28.85
  • bottle 0.12.25
  • prometheus_client 0.18.0
  • Pillow 10.2.0
  • pyproj 3.6.1
  • pyramid 2.0.2
  • requests 2.31.0
  • redis 5.0.2
  • cryptography 42.0.5
  • prospector 1.10.3
  • prospector-profile-duplicated 0.3.0
  • prospector-profile-utils 1.1.0
  • pytest 7.4.4
  • pytest-cov 4.1.0
  • types-boto 2.49.18.20240205
  • types-redis 4.6.0.20240218
  • pycairo 1.25.1
  • Shapely 2.0.3
pre-commit
.pre-commit-config.yaml
  • pre-commit/mirrors-prettier v3.0.3
  • pre-commit/pre-commit-hooks v4.5.0
  • sbrunner/hooks 0.5.0
  • codespell-project/codespell v2.2.6
  • shellcheck-py/shellcheck-py v0.9.0.6
  • jumanjihouse/pre-commit-hooks 3.0.0
  • python-jsonschema/check-jsonschema 0.27.4
  • sirwart/ripsecrets v0.1.7
  • PyCQA/autoflake v2.2.1
  • asottile/pyupgrade v3.15.1
  • PyCQA/isort 5.12.0
  • psf/black 23.10.1
  • sbrunner/jsonschema-validator 0.1.0
regex
.pre-commit-config.yaml
  • poetry 1.6.1
  • poetry 1.6.1
  • pyjson5 1.6.6
ci/config.yaml
  • camptocamp/c2cciutils 1.6.17
Branch master
docker-compose
docker-compose.yaml
  • redis 7
dockerfile
Dockerfile
  • ghcr.io/osgeo/gdal ubuntu-small-3.8.4
github-actions
.github/workflows/audit.yaml
  • actions/checkout v4
  • camptocamp/initialise-gopass-summon-action v2
  • andstor/file-existence-action v3
  • asdf-vm/actions v3
  • andstor/file-existence-action v3
  • ubuntu 22.04
.github/workflows/backport.yaml
  • ubuntu 22.04
.github/workflows/changelog.yaml
  • actions/checkout v4
  • actions/cache v4
  • ubuntu 22.04
.github/workflows/clean.yaml
  • actions/checkout v4
  • camptocamp/initialise-gopass-summon-action v2
  • ubuntu 22.04
.github/workflows/codeql.yaml
  • actions/checkout v4
  • github/codeql-action v3
  • github/codeql-action v3
  • ubuntu 22.04
.github/workflows/delete-old-workflows-run.yaml
  • MajorScruffy/delete-old-workflow-runs v0.3.0
  • ubuntu 22.04
.github/workflows/main.yaml
  • actions/checkout v4
  • camptocamp/initialise-gopass-summon-action v2
  • actions/cache v4
  • ubuntu 22.04
.github/workflows/pr-checks.yaml
  • actions/checkout v4
  • ubuntu 22.04
.github/workflows/pull-request-automation.yaml
  • actions/github-script v7
  • actions/github-script v7
  • actions/github-script v7
  • actions/github-script v7
  • actions/github-script v7
  • actions/github-script v7
  • ubuntu 22.04
pep621
pyproject.toml
  • poetry-core >=1.3.0
  • poetry-plugin-tweak-dependencies-version >=1.1.0
pip_requirements
ci/requirements.txt
  • c2cciutils ==1.6.17
  • pre-commit ==3.6.2
  • poetry-dynamic-versioning ==1.2.0
  • poetry-plugin-export ==1.6.0
  • poetry-plugin-tweak-dependencies-version ==1.5.2
  • poetry-plugin-drop-python-upper-constraint ==0.1.0
requirements.txt
  • poetry ==1.8.1
  • poetry-plugin-export ==1.6.0
  • poetry-plugin-tweak-dependencies-version ==1.5.2
  • poetry-dynamic-versioning ==1.2.0
  • poetry-plugin-drop-python-upper-constraint ==0.1.0
poetry
pyproject.toml
  • azure-storage-blob 12.19.0
  • azure-identity 1.15.0
  • boto3 1.34.54
  • bottle 0.12.25
  • prometheus_client 0.20.0
  • Pillow 10.2.0
  • pyproj 3.6.1
  • pyramid 2.0.2
  • requests 2.31.0
  • redis 5.0.2
  • prospector 1.10.3
  • prospector-profile-duplicated 1.1.0
  • prospector-profile-utils 1.7.2
  • pytest 8.0.2
  • pytest-cov 4.1.0
  • types-boto 2.49.18.20240205
  • types-redis 4.6.0.20240218
  • types-requests 2.31.0.2
  • pycairo 1.26.0
  • Shapely 2.0.3
  • urllib3 1.26.18
pre-commit
.pre-commit-config.yaml
  • pre-commit/mirrors-prettier v3.1.0
  • pre-commit/pre-commit-hooks v4.5.0
  • sbrunner/hooks 0.7.0
  • codespell-project/codespell v2.2.6
  • shellcheck-py/shellcheck-py v0.9.0.6
  • jumanjihouse/pre-commit-hooks 3.0.0
  • python-jsonschema/check-jsonschema 0.28.0
  • sirwart/ripsecrets v0.1.7
  • PyCQA/autoflake v2.3.0
  • asottile/pyupgrade v3.15.1
  • PyCQA/isort 5.13.2
  • psf/black 24.2.0
  • sbrunner/jsonschema-validator 0.1.0
regex
.pre-commit-config.yaml
  • poetry 1.8.2
  • poetry 1.8.2
  • pyjson5 1.6.6
ci/config.yaml
  • camptocamp/c2cciutils 1.6.17

  • Check this box to trigger a request for Renovate to run again on this repository

TileCloud should be installable from pypi

TileCloud can already be uploaded to pypi. This works. But there are still issues when using TileCloud after an installation from pypi. One issue is that the templates aren't there.

Add ThumbnailTileStore

Should generate thumbnails from existing TileStore, e.g. pack 8x8 tiles into a single tile.

Example for slicing png to png tiles

Dear all,

i am searching for an example to slice a png (have a look to the attached file) into png tiles. My png is covering the whole world. And all i want is x/y/z png tiles. Quite similar to what is done with gdal2tile.py.
I hope you can give me a short example. Thanks a lot ;)

osm_gfs_precip_24

S3 should not be restricted to Amazon

  1. We should use te possibility to set another host in the S3Connection class
    See: https://github.com/sbrunner/tilecloud/blob/e50329e80f3fecfbb4bee1d81cf633f50f72429b/tilecloud/lib/s3.py#L205
    And for example: https://github.com/sbrunner/tilecloud/blob/e50329e80f3fecfbb4bee1d81cf633f50f72429b/tilecloud/store/s3.py#L15 (to do also in tilecloud_chain)

  2. We should use Boto (http://boto3.readthedocs.io/en/latest/) To sign the requests. (The signature seems to be in version 2, that works for S3 (for now), but not for exoscale for instance)

tc-info's estimate-completion function is broken

$ ./tc-info -t bounding-pyramid -r ~/haiti-terrain.mbtiles 
5/8/13:+3/+2
6/17/27:+5/+3
7/34/54:+9/+6
8/69/109:+16/+10
9/138/219:+31/+19
10/276/439:+64/+36
11/550/878:+105/+75
12/1195/1806:+80/+40
13/2395/3622:+155/+70
14/4790/7244:+300/+140
15/9585/14498:+595/+270
16/19175/29001:+1180/+535

$ ./tc-info -t estimate-completion -b 16/19175/29001:5/+1180/+535 haiti-terrain.mbtiles 
5 6/4 (150%)
6 15/6 (250%)
7 54/12 (450%)
8 160/28 (571%)
9 589/72 (818%)
10 2304/210 (1097%)
11 7875/702 (1121%)
12 3200/2660 (120%)
13 10850/10200 (106%)
14 42000/40095 (104%)
15 160650/158979 (101%)
16 631300/631300 (100%)

Add --cache option to tc-viewer

By default, tc-viewer requests each tile from the TileStore when it is requested. Sometimes it is desirable to minimise the number of requests to the underlying TileStore, even if this means increased memory consumption (tc-viewer is a development tool). So, tc-viewer should have a --cache option that causes it to cache requested tiles in memory rather than requesting them from the underlying TileStore each time.

Internal server error when running tc-viewer from pip installed package

When running tc-viewer from a version of tilecloud that is installed via pip install tilecloud the tile server errors with an internal server error:

Error: 500 Internal Server Error

Sorry, the requested URL 'http://localhost:8080/' caused an error:

Template 'index' not found.

The reason is most likely a standard mistake in Python packaging: The packaged wheel is missing the html template, because only *.py ends up in the wheel. Having a quick glance over the wheels on PyPi it looks like they are missing both html templates and bundled tiles.

Add CachingTileStore

Act as a proxy behind a slow store, example:

slowstore = TileStore(...)

store = CachingTileStore(store=slowstore, cache=DictTileStore())

Tune MBTilesTileStore timeout

The bug is:

  1. A long-running process records its progress in a MBTilesTileStore, i.e. an SQLite3 database.
  2. A second process performs an expensive read-only operation, e.g. calculating the exact completion relative to a user-specified bounding pyramid which reads the database for more than five seconds.
  3. The long-running process raises SQLite OperationErrors because the database is locked for more than five seconds by the read.
  4. This causes the long-running process to crash :(

Options are:

  1. Pass some longer timeout when creating the SQLite3 connection passed to MBTilesTileStore.
  2. Tweak the second process to open a snapshot of the database that does not block the writer, e.g. a private read-only mmap.
  3. Adapt the writer to retry after timeouts.
  4. Something else?

SQLite is wonderful, but sometimes we hit the limits of a filesystem database with a single lock :-)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.