Landez是一个用于操作地图瓦片的Python工具箱。
项目描述
Landez 处理瓦片,构建MBTiles,进行瓦片合成,并将瓦片组合成单个图像。
瓦片可以从远程瓦片服务URL、本地Mapnik样式表、WMS服务器或MBTiles文件中获取。
为了构建MBTiles,Landez在最终阶段嵌入来自Mapbox的mbutil,链接为https://github.com/mapbox/mbutil。土地覆盖使用一系列边界框和缩放级别进行指定。
安装
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>
许可证
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)
初始工作版本