跳转到主要内容

Landez是一个用于操作地图瓦片的Python工具箱。

项目描述

Landez 处理瓦片,构建MBTiles,进行瓦片合成,并将瓦片组合成单个图像。

瓦片可以从远程瓦片服务URL、本地Mapnik样式表、WMS服务器或MBTiles文件中获取。

为了构建MBTiles,Landez在最终阶段嵌入来自Mapbox的mbutil,链接为https://github.com/mapbox/mbutil。土地覆盖使用一系列边界框和缩放级别进行指定。

https://pypip.in/v/landez/badge.png https://pypip.in/d/landez/badge.png https://travis-ci.org/makinacorpus/landez.png https://coveralls.io/repos/makinacorpus/landez/badge.png

安装

Landez是纯Python编写,没有外部依赖。

sudo easy_install landez

但是,如果要在本地渲染瓦片,则需要mapnik

sudo aptitude install python-mapnik

并且需要来混合瓦片或将排列好的瓦片导出为图像。

sudo aptitude install python-imaging

用法

构建MBTiles文件

远程瓦片

使用远程瓦片服务(默认为OpenStreetMap.org)

import logging
from landez import MBTilesBuilder

logging.basicConfig(level=logging.DEBUG)

mb = MBTilesBuilder(cache=False)
mb.add_coverage(bbox=(-180.0, -90.0, 180.0, 90.0),
                zoomlevels=[0, 1])
mb.run()

请尊重< cite>瓦片使用政策 <http://wiki.openstreetmap.org/wiki/Tile_usage_policy>

本地渲染

使用mapnik渲染瓦片

import logging
from landez import MBTilesBuilder

logging.basicConfig(level=logging.DEBUG)

mb = MBTilesBuilder(stylefile="yourstyle.xml", filepath="dest.mbtiles")
mb.add_coverage(bbox=(-180.0, -90.0, 180.0, 90.0),
                zoomlevels=[0, 1])
mb.run()

以及UTFGrids

import logging
from landez import MBTilesBuilder

logging.basicConfig(level=logging.DEBUG)

mb = MBTilesBuilder(stylefile="yourstyle.xml",
                    grid_fields=["field1", "field2", "field3", ...] ,
                    filepath="dest.mbtiles")
mb.add_coverage(bbox=(-180, -90, 180, 90),
                zoomlevels=[0, 1, 2, 3])
mb.run()

从另一个MBTiles文件

import logging
from landez import MBTilesBuilder

logging.basicConfig(level=logging.DEBUG)

mb = MBTilesBuilder(mbtiles_file="yourfile.mbtiles", filepath="dest.mbtiles")
mb.add_coverage(bbox=(-180.0, -90.0, 180.0, 90.0),
                zoomlevels=[0, 1])
mb.run()

从WMS服务器

mb = MBTilesBuilder(wms_server="http://yourserver.com/geoserver/wms",
                    wms_layers=["ign:departements"],
                    wms_options=dict(format="image/png",
                                     transparent=True),
                    filepath="dest.mbtiles")
mb.add_coverage(bbox=([-0.9853,43.6435.1126,44.0639]))
mb.run()

混合瓦片

合并多个瓦片来源(URL、WMS、MBTiles、Mapnik样式表)。(需要Python PIL)

例如,通过混合OpenStreetMap瓦片和MBTiles瓦片来构建新的MBTiles

mb = MBTilesBuilder(filepath="merged.mbtiles")
overlay = TilesManager(mbtiles_file="carto.mbtiles")
mb.add_layer(overlay)
mb.run()

或使用40%的透明度将WMS图层与OpenStreetMap组合

mb = MBTilesBuilder(wms_server="http://yourserver.com/geoserver/wms",
                    wms_layers=["img:orthophoto"])
overlay = TilesManager(remote=True)
mb.add_layer(overlay, 0.4)
mb.run()

导出图像

将瓦片组装在一起形成一个单独的图像。(需要Python PIL)

指定瓦片源的方式与构建MBTiles文件时完全相同。

import logging
from landez import ImageExporter

logging.basicConfig(level=logging.DEBUG)

ie = ImageExporter(mbtiles_file="yourfile.mbtiles")
ie.export_image(bbox=(-180.0, -90.0, 180.0, 90.0), zoomlevel=3, imagepath="image.png")

添加后处理过滤器

将地图瓦片转换为灰度,更适合信息叠加

from landez.filters import GrayScale

ie = ImageExporter()
ie.add_filter(GrayScale())

用透明像素替换特定颜色(即颜色到alpha,类似Gimp

from landez.filters import ColorToAlpha

overlay = TileManager()
overlay.add_filter(ColorToAlpha('#ffffff'))  # white will be transparent

ie = ImageExporter()
ie.add_layer(overlay)
...

提取MBTiles内容

from landez.sources import MBTilesReader

mbreader = MBTilesReader("yourfile.mbtiles")

# Metadata
print mbreader.metadata()

# Zoom levels
print mbreader.zoomlevels()

# Image tile
with open('tile.png', 'wb') as out:
    out.write(mbreader.tile(z, x, y))

# UTF-Grid tile
print mbreader.grid(z, x, y, 'callback')

操纵瓦片

from landez import MBTilesBuilder

# From a TMS tile server
# tm = TilesManager(tiles_url="http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png")

# From a MBTiles file
tm = TilesManager(mbtiles_file="yourfile.mbtiles")

tiles = tm.tileslist(bbox=(-180.0, -90.0, 180.0, 90.0),
                     zoomlevels=[0, 1])
for tile in tiles:
    tilecontent = tm.tile(tile)  # download, extract or take from cache
    ...

默认情况下,使用TMS方案存储缓存瓦片(y值反转)。它可以更改为WMTS(又称xyz)

tm = TilesManager(your_sources_options, cache=True, cache_scheme="wmts")

运行测试

使用nosetests运行测试(如果您在一个虚拟环境中工作,请记住在虚拟环境中安装nose!)

cd landez
nosetests

关于网格内容的测试Mapnik样式表来自 <https://github.com/springmeyer/gridsforkids>

作者

http://depot.makina-corpus.org/public/logo.gif

许可证

  • Lesser GNU公共许可证

变更日志

2.5.0 (2019-04-16)

  • 添加Python 3的支持。

2.4.1 (2019-03-13)

  • 如果瓦片不存在,则不要再次尝试获取瓦片。

2.4.0 (2017-03-02)

  • 当叠加瓦片数据不是有效图像时,不要崩溃

  • 正确生成缩放级别的元数据

  • 添加对tms mbtiles的支持

  • 在浮点值是整数的情况下,正确计算瓦片框

  • 正确生成缩放级别的元数据

  • 使用完整路径构建缓存目录,否则同一服务器上的不同瓦片集被视为同一个

  • 添加名称元数据以防止Maptiler崩溃

2.3.0 (2014-11-18)

  • 如果指定,则向WMS源添加标题(感谢@sempixel!)

2.2.0 (2014-09-22)

  • 添加瓦片下载重试之间的延迟(感谢@kiorky)

  • 添加在MBTiles创建期间忽略错误(例如,下载错误)的选项

2.1.1 (2013-08-27)

  • 不要在JSONP回调中硬编码grid();

2.1.0 (2013-08-27)

  • 添加TMS支持(ebrehault)

  • 为TileSource添加默认子域参数

  • 添加设置瓦片HTTP标题的选项

  • 修复Windows上的文件损坏(感谢@osuchw)

2.0.3 (2013-05-03)

  • 修复render()上的Mapnik签名

2.0.2 (2012-06-21)

  • 防止整个图像被转换为灰度

  • 在瓦片下载时显式检查HTTP状态代码

2.0.1 (2012-05-29)

  • 修复混合图层上的无限循环

2.0.0 (2012-05-25)

  • 重构缓存机制

  • 支持Jpeg瓦片(#14)

  • 删除使用临时文件

  • 图像后处理(#11)

2.0.0-alpha (2012-05-23)

  • 整个堆栈的重构

1.8.2 (2012-03-27)

  • 修复Mapnik渲染

1.8.1 (2012-02-24)

  • 修复MBTiles缓存清理

1.8 (2012-02-24)

  • WMS支持

  • 瓦片合成

1.7 (2012-02-17)

  • 捕获Sqlite异常

1.6 (2012-02-08)

  • MBTiles文件对UTF-Grid的支持

1.5 (2011-12-07)

  • 支持瓦片服务器的子域

  • 低级瓦片操作

  • 使用i18n

1.4 (2011-10-17)

  • 删除mbutil的额外日志消息

1.3 (2011-09-23)

  • 将一组瓦片导出为单个图像

1.2 (2011-06-21)

  • 如果覆盖中没有瓦片则抛出异常

1.1 (2012-04-18)

  • 将内部组件移至landez模块

  • 将投影拆分为单独的模块

1.0 (2011-04-18)

  • 初始工作版本

项目详情


下载文件

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

源分发

landez-2.5.0.tar.gz (22.1 kB 查看散列值)

上传时间

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