Package: umilandez
Landezmanipulates tiles, builds MBTiles, does tiles compositing and arrange tiles together into single images.Tiles can either be obtained from a remote tile service URL, from a local Mapnik stylesheet,
a WMS server or from MBTiles files.For building MBTiles, Landez embedsmbutilfrom Mapboxhttps://github.com/mapbox/mbutilat the final stage.
The land covered is specified using a list of bounding boxes and zoom levels.INSTALLLandezis pure python and has no external dependency.However, it requiresmapnikif the tiles are rendered locally.sudo aptitude install python-mapnikAndPILto blend tiles together or export arranged tiles into images.sudo aptitude install python-imagingUSAGEBuilding MBTiles filesRemote tilesUsing a remote tile service (OpenStreetMap.org by default):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()Please respectTile usage policies <http://wiki.openstreetmap.org/wiki/Tile_usage_policy>Local renderingUsing mapnik to render tiles: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()From an other MBTiles fileimport 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()From a WMS servermb = 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()Blend tiles togetherMerge multiple sources of tiles (URL, WMS, MBTiles, Mapnik stylesheet) together.(requires python PIL)For example, build a new MBTiles by blending tiles of a MBTiles on top of OpenStreetMap tiles :mb = MBTilesBuilder(filepath="merged.mbtiles")
overlay = TilesManager(mbtiles_file="carto.mbtiles")
mb.add_layer(overlay)
mb.run()Or composite a WMS layer with OpenStreetMap using transparency (40%):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()Export ImagesAssemble and arrange tiles together into a single image.(requires python PIL)Specify tiles sources in the exact same way as for building MBTiles files.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")Add post-processing filtersConvert map tiles to gray scale, more suitable for information overlay :from landez.filters import GrayScale

ie = ImageExporter()
ie.add_filter(GrayScale())Replace a specific color by transparent pixels (i.e. color to 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)
...Extract MBTiles contentfrom 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')Manipulate tilesfrom 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
    ...AUTHORSMathieu Leplatre <mathieu.leplatre@makina-corpus.com>Sergej TatarincevThanks to mbutil authors <https://github.com/mapbox/mbutil>LICENSELesser GNU Public LicenseCHANGELOG2.0.3 (unreleased)Nothing changed yet.2.0.2 (2012-06-21)Prevent the whole image to be converted to grayscaleExplicitly check http status code at tiles download2.0.1 (2012-05-29)Fix infinite loop on blending layers2.0.0 (2012-05-25)Rework cache mechanismJpeg tiles support (#14)Remove use of temporary filesImage post-processing (#11)2.0.0-alpha (2012-05-23)Refactoring of whole stack1.8.2 (2012-03-27)Fix Mapnik rendering1.8.1 (2012-02-24)Fix MBTiles cache cleaning1.8 (2012-02-24)WMS supportTiles compositing1.7 (2012-02-17)Catch Sqlite exceptions1.6 (2012-02-08)UTF-Grid support for MBTiles files1.5 (2011-12-07)Subdomain support for tiles serversLow level tiles manipulationUse i18n1.4 (2011-10-17)Remove extra logging message of mbutil1.3 (2011-09-23)Export set of tiles into single image1.2 (2011-06-21)Raise exception if no tiles in coverages1.1 (2012-04-18)Move internals to landez moduleSplit projection into separate module1.0 (2011-04-18)Initial working version