跳转到主要内容

管理瓦片工具

项目描述

TileCloud

一个用于生成、管理、转换和可视化多种格式的地图瓦片的强大工具。

简介

TileCloud是一个用于生成、管理、转换、可视化和多种格式的地图瓦片的强大工具。它可以创建、读取、更新和删除多个后端中的瓦片,称为TileStores。现有的TileStores包括

TileCloud不仅限于图像瓦片,还可以处理其他瓦片数据,例如UTFGrid,或者JSON格式的海拔数据。

TileCloud使用Python的生成器和迭代器高效地流式传输数千万个瓦片,并可以使用Python的multiprocessing库并行处理多个瓦片。

TileCloud使以下任务变得简单:

  • 使用OpenLayersGoogle MapsjQuery GeoLeafletPolymapsModest MapsOpenWebGlobe等工具可视化存储在任何TileStore中的瓦片。
  • 将存储在S3中的六千万个PNG瓦片转换为不同缩放级别的JPEG格式。
  • 实时转换图像格式并执行任意图像变换,包括PNG优化。
  • 生成半透明瓦片,并嵌入瓦片坐标以进行调试。
  • 将多个瓦片层打包到服务器上的单个瓦片中。
  • 高效地计算边界框并检测现有瓦片数据集中的缺失瓦片。
  • 模拟快速和慢速瓦片服务器。
  • 高效地从S3中删除数百万个瓦片。
  • 从tarball中读取JSON瓦片,压缩它们并上传。

入门

TileCloud依赖于一些Python模块。最简单的安装方式是在virtualenv中使用pip

$ pip install poetry
$ poetry install

快速演示,运行

$ 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'

并将您的浏览器指向http://localhost:8080/。按Ctrl-C终止tc-viewer

接下来,从MapBox下载一个示例MBTiles文件,例如OSM地图。我们可以使用tc-info命令快速了解更多关于这个瓦片集的信息。例如,要计算瓦片的数量

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

计算边界金字塔

$ 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

检查边界金字塔中的缺失瓦片

$ 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%)

这显示了每个缩放级别的瓦片数量,指定边界金字塔在该缩放级别的预期瓦片总数(8/0/0:16/*/*表示从级别8到级别16的所有瓦片),以及完成百分比。这有助于检查瓦片集是否完整。

现在,在OpenStreetMap瓦片和调试瓦片层上显示此MBTiles瓦片集

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

您需要将浏览器指向http://localhost:8080/并选择您喜欢的库。

tc-infotc-viewer是实用程序。通常您通过编写连接TileCloud模块以执行所需操作的短Python程序来使用TileCloud。

作为一个示例,运行以下命令

$ poetry run examples/download.py

这将从OpenStreetMap下载一些瓦片,并将它们保存到名为local.mbtiles的本地MBTiles文件中。查看examples/download.py的源代码以了解其工作原理。如果下载有问题,只需用Ctrl-C中断它并重新运行:程序将自动从上次停止的地方继续。

一旦下载了一些瓦片,您可以直接使用tc-viewer查看它们

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

像往常一样,将浏览器指向http://localhost:8080tc-viewer--root选项指示查看器从定义的瓦片开始,而不是从0/0/0开始,因此您不必放大以找到下载的瓦片。

变更日志

1.9.0

  • 添加以下额外依赖项azureawswsgiredisall

瓦片坐标、瓦片布局、瓦片网格和边界金字塔

TileCloud始终以字符串形式表示瓦片坐标,如z/x/y。TileCloud主要在瓦片坐标下工作,尽管在某些地方可以使用地理坐标。

瓦片布局将瓦片坐标转换为字符串,并用于路径、URL、键等。

瓦片网格用于将瓦片坐标转换为地理坐标,并关联不同z值的瓦片。

边界金字塔表示x、y和z方向上的瓦片范围。格式基本上是minz/minx/miny:maxz/maxx/maxy,但maxz是可选的,且maxzmaxxmaxy可以前面加上一个+符号,表示它们相对于相应的min值。这最好通过几个例子来说明。

4/10/20:15/25

: 这对应于z=4、x=10..15和y=20..25的瓦片范围。

4/10/20:+5/+5

: 这是相同的范围(z=4、x=10..15、y=20..25),但使用相对大小表示。

4/10/20:5/15/20

: 这是上面相同的瓦片范围,但还包括所有与上面范围重叠的z=5层的瓦片。TileCloud使用瓦片网格来计算需要包含的z=5层的瓦片。

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

: 这与前面的例子使用相对的maxz表示相同的范围。

快速瓦片生成

tc-copy命令可以用于在不同TileStore之间复制瓦片。如果一个TileStore有生成瓦片的副作用,那么它作为一个快速瓦片生成工具工作。以下是一些快速示例。

要转换一种瓦片格式到另一种格式,只需从源复制到目标。例如,要将MBTiles文件转换为ZIP文件,只需运行

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

你可以使用unzip来检查是否成功。

$ unzip -t geography-class.zip

同样,tc-copy也可以用来下载多个瓦片

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

在这里,我们下载了OpenStreetMap瓦片的0到4级别到本地的MBTiles文件。需要使用--bounding-pyramid选项,否则我们将下载所有的OpenStreetMap瓦片——这可能会花费一些时间(也可能违反OpenStreetMap的瓦片使用政策)。请注意,默认情况下,tc-copy不会覆盖已存在于目标中的瓦片。这意味着你可以中断上面的命令并重新启动它,它会从中断的地方继续。如果你想要在目标中覆盖瓦片,请将--overwrite选项传递给tc-copy

同样,tc-copy也可以用来上传瓦片。例如,要将MBTiles文件上传到S3,只需使用

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

bucket是你的S3桶的名称。你需要设置AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY环境变量以获得上传到S3的权限。目标路径的其余部分(prefix/%(z)d/%(x)d/%(y)d.jpg)是一个模板,描述了S3中瓦片的布局。它是一个正常的Python格式字符串:%(x)d表示用十进制整数替换瓦片的x坐标。

你可以将相同的s3:// URL传递给tc-viewer。这允许你使用你喜欢的地图库可视化存储在S3中的瓦片。例如

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

在这里,tc-viewer作为代理,通过HTTP提供存储在S3中的瓦片,绕过任何缓存或访问控制(当然,假设你有正确的凭证)。这允许你可视化你存储的确切瓦片。

绘制世界

FOSS4G-NA上,MapBox提出了一个绘制世界的优秀策略。TileCloud支持细分策略。要运行演示,执行

$ poetry run examples/renderingtheworld.py

这将从一个WMTS瓦片服务器生成瓦片,并将它们保存到本地的MBTiles瓦片中。当上述命令完成后,您可以查看生成的瓦片的边界金字塔

$ 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

您可以使用以下命令查看这些瓦片(显示了俄勒冈州梅德福的建筑)

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

一个简单且实用的瓦片服务器

tc-viewer可以用作轻量级瓦片服务器,这对于开发、调试和离线演示非常有用。tc-viewer作为参数传递的TileStores可以在以下URL中找到

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

其中{index}是命令行上TileStore的索引(从0开始为第一个瓦片存储),而{z}{x}{y}是瓦片坐标的组成部分。URL中的第二个tiles存在是为了解决OpenWebGlobe做出的假设。这种布局可以直接由大多数地图库使用,请参阅tilecloud/views/*.tpl中的代码以获取示例。可以使用--host--port命令行选项分别设置主机和端口。

请注意,没有文件扩展名。tc-viewer将自动设置正确的内容类型和内容编码头,如果它能够确定它们,否则,大多数浏览器会自己解决这个问题。

为了方便,tc-viewer在URL/static下的static目录中提供一切。这可以用来直接为测试目的提供您喜欢的地图库和/或应用程序代码。

默认情况下,如果可用,tc-viewer将使用Tornado作为Web服务器,否则将回退到WSGIRef。Tornado具有相当不错的性能,对于本地开发和离线演示来说足够好,尤其是在与MBTiles瓦片存储一起使用时。WSGIRef性能非常差(一次只能处理一个请求),因此可以用作“慢速”瓦片服务器,非常适合调试瓦片加载代码或测试您的Web应用程序在低速网络连接下的性能。tc-viewer在用作代理由远程服务器提供的瓦片时尤其慢。您可以使用--server选项明确设置服务器。

tc-viewer将所有它提供的瓦片的Access-Control-Allow-Origin头设置为*,这允许瓦片作为在不同的主机/端口上运行的WebGL应用程序的纹理使用。有关更多信息,请参阅跨域纹理

tc-viewer被设计为开发工具,它提供的功能是以脆弱性为代价的。它做了许多假设——包括用户的善意——这使得它完全不适用于通用瓦片服务器。它只能在开发或演示环境中使用。

比较地图库

tc-viewer开箱即支持大多数流行的网络地图库。这可以非常方便地进行快速、实际的比较。如果您喜欢的地图库缺失,请提交一个问题,或者更好的是,一个拉取请求

贡献

请使用GitHub问题跟踪器报告错误和功能请求。

如果您想为TileCloud做出贡献,请安装开发需求

$ pip install -r dev-requirements.txt

TileCloud在tilecloud/tests目录中包含单元测试。您可以使用以下命令运行这些测试

$ make test

这相当于

$ python setup.py nosetests

对于拉取请求,如果您的代码在通过prospector时没有警告,我们将非常感激。您可以使用以下命令在代码库上运行prospector

$ make prospector

许可

版权(c)2012,汤姆·佩恩 twpayne@gmail.com 版权所有。版权(c)2012,Camptocamp 版权所有。

允许以源代码和二进制形式重新分发和使用,无论是否修改,前提是满足以下条件

  • 源代码重新分发必须保留上述版权声明、本条件列表和以下免责声明。
  • 二进制形式的重新分发必须在文档和/或其他随分发提供的材料中重新产生上述版权声明、本条件列表和以下免责声明。

本软件由版权所有者和贡献者“按原样”提供,并且任何明示或暗示的保证,包括但不限于适销性和适用于特定目的的暗示保证,均被放弃。在任何情况下,版权所有者或贡献者均不对任何直接、间接、偶然、特殊、示范性或后续损害(包括但不限于替代货物或服务的采购;使用、数据或利润的损失;或业务中断)承担责任,无论其产生原因和责任理论如何,即使被告知此类损害的可能性。

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

贡献

安装预提交钩子

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

项目详情


发布历史 发布通知 | RSS 源

下载文件

下载适用于您平台的文件。如果您不确定选择哪一个,请了解有关安装包的更多信息。

源分发

tilecloud-1.12.3.tar.gz (61.2 kB 查看哈希值)

上传时间

构建分发

tilecloud-1.12.3-py3-none-any.whl (84.5 kB 查看哈希值)

上传时间 Python 3

由以下机构支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面