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)

  • 初始工作版本

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
如何在javaswing中使用进度条,同时函数在繁重的进程中工作   SWIG(Java):如何调用带有void*out参数的函数?   java帮助解决算法问题   java,但我不想用try/catch块来包围语句!   可以从java类调用安卓类吗?   java流拆分器实现细节   java组织。莫基托。例外情况。滥用。无效使用MatcherException   java如何显示接收到的字符串?   java为什么这段代码不像JSR133建议的那样进入无限循环?   java BufferedReader readLine()从socket获取数据时冻结   java如何使用html表单发送的XML?   java RxJava与观察者代码的并行执行   我想使用CoreJava基于文本输入动态创建一个jpg图像   java如何在Mockito中模拟注入的bean?   java我的程序突然停止工作,我没有改变我记得的任何东西,现在它给出了第二个错误:javafx。fxml。加载异常   java树集排序错误   java RSA加密解密AES密钥并存储在文件中   Java将变量字符串[]与字符串混合在一个字符串数组中   如何在鼠标移动时重新绘制Java SWT应用程序?