landez是一个python工具箱,用于操作地图块。
umilandez的Python项目详细描述
landez操作平铺、构建mbtiles、进行平铺合成并将平铺排列为单个图像。
tiles可以从远程tile服务url、本地mapnik样式表获取, wms服务器或mbtiles文件。
对于构建mbtiles,landez在最后阶段嵌入mapboxhttps://github.com/mapbox/mbutil中的mbutil。 使用边界框列表和缩放级别指定覆盖的土地。
安装
landez是纯python,没有外部依赖关系。
但是,如果瓷砖是在本地渲染的,则需要mapnik。
sudo aptitude install python-mapnik
以及pil将瓷砖混合在一起或将排列好的瓷砖导出到图像中。
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()
请遵守磁贴使用政策<;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()
来自其他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()
将瓷砖混合在一起
合并多个tile源(url、wms、mbtiles、mapnik样式表)。(需要python pil)
例如,通过在openstreetmap tiles上混合mbtiles的tiles来构建新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文件完全相同的方式指定tiles源。
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,a-la-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.reader 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(reader.tile(z, x, y)) # UTF-Grid tile print reader.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 ...
许可证
- Lesser GNU Public License
更改日志
2.0.3(未发布)
- 什么都没变。
2.0.2(2012-06-21)
- 防止将整个图像转换为灰度
- 在tiles下载时显式检查http状态代码
2.0.1(2012-05-29)
- 在混合层上固定无限循环
2.0.0(2012-05-25)
- 重做缓存机制
- JPEG平铺支持(14)
- 删除临时文件的使用
- 图像后处理(11)
2.0.0-α(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网格支持
1.5(2011-12-07)
- 对tiles服务器的子域支持
- 低级平铺操作
- 使用I18N
1.4(2011-10-17)
- 删除mbutil的额外日志消息
1.3(2011-09-23)
- 将一组平铺导出为单个图像
1.2(2011年6月2日1)
- 如果覆盖范围中没有平铺,则引发异常
1.1(2012-04-18)
- 将内部构件移至Landez模块
- 将投影拆分为单独的模块
1.0(2011-04-18)
- 初始工作版本