def test_multi_tile_policy(): srs = '+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs' lyr = mapnik.Layer('raster') if 'raster' in mapnik.DatasourceCache.plugin_names(): lyr.datasource = mapnik.Raster( file = '../data/raster_tiles/${x}/${y}.tif', lox = -180, loy = -90, hix = 180, hiy = 90, multi = 1, tile_size = 256, x_width = 2, y_width = 2 ) lyr.srs = srs _map = mapnik.Map(256, 256, srs) style = mapnik.Style() rule = mapnik.Rule() sym = mapnik.RasterSymbolizer() rule.symbols.append(sym) style.rules.append(rule) _map.append_style('foo', style) lyr.styles.append('foo') _map.layers.append(lyr) _map.zoom_to_box(lyr.envelope()) im = mapnik.Image(_map.width, _map.height) mapnik.render(_map, im) save_data('test_multi_tile_policy.png', im.tostring('png')) # test green chunk eq_(im.view(0,64,1,1).tostring(), '\x00\xff\x00\xff') eq_(im.view(127,64,1,1).tostring(), '\x00\xff\x00\xff') eq_(im.view(0,127,1,1).tostring(), '\x00\xff\x00\xff') eq_(im.view(127,127,1,1).tostring(), '\x00\xff\x00\xff') # test blue chunk eq_(im.view(128,64,1,1).tostring(), '\x00\x00\xff\xff') eq_(im.view(255,64,1,1).tostring(), '\x00\x00\xff\xff') eq_(im.view(128,127,1,1).tostring(), '\x00\x00\xff\xff') eq_(im.view(255,127,1,1).tostring(), '\x00\x00\xff\xff') # test red chunk eq_(im.view(0,128,1,1).tostring(), '\xff\x00\x00\xff') eq_(im.view(127,128,1,1).tostring(), '\xff\x00\x00\xff') eq_(im.view(0,191,1,1).tostring(), '\xff\x00\x00\xff') eq_(im.view(127,191,1,1).tostring(), '\xff\x00\x00\xff') # test magenta chunk eq_(im.view(128,128,1,1).tostring(), '\xff\x00\xff\xff') eq_(im.view(255,128,1,1).tostring(), '\xff\x00\xff\xff') eq_(im.view(128,191,1,1).tostring(), '\xff\x00\xff\xff') eq_(im.view(255,191,1,1).tostring(), '\xff\x00\xff\xff')
def render(parameters): if not parameters.verbose: mapnik.logger.set_severity(getattr(mapnik.severity_type, 'None')) merc = mapnik.Projection('+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +no_defs +over') longlat = mapnik.Projection('+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs') imgwidth = math.trunc(parameters.pagewidth / inch * parameters.dpi) imgheight = math.trunc(parameters.pageheight / inch * parameters.dpi) m = mapnik.Map(imgwidth, imgheight) #mapnik.load_map(m, parameters.mapstyle) mapnik.load_map(m, parameters.hikingmapstyle) m.srs = merc.params() if hasattr(mapnik, 'Box2d'): bbox = mapnik.Box2d(parameters.minlon, parameters.minlat, parameters.maxlon, parameters.maxlat) else: bbox = mapnik.Envelope(parameters.minlon, parameters.minlat, parameters.maxlon, parameters.maxlat) transform = mapnik.ProjTransform(longlat, merc) merc_bbox = transform.forward(bbox) m.zoom_to_box(merc_bbox) # create raster symbolizer / rule / style rastersymbolizer = mapnik.RasterSymbolizer() rastersymbolizer.opacity = 1.0 rasterrule = mapnik.Rule() rasterrule.symbols.append(rastersymbolizer) rasterstyle = mapnik.Style() rasterstyle.rules.append(rasterrule) m.append_style('RasterStyle', rasterstyle) # fetch tiles using the landez TileManager tm = create_tiles_manager(parameters) zoomlevel = calc_zoomlevel(parameters.pagewidth, parameters.pageheight, parameters.dpi, \ parameters.scale_factor, parameters.tile_size, \ parameters.minlon, parameters.minlat, \ parameters.maxlon, parameters.maxlat) if parameters.verbose: print("Calculated zoomlevel = %d" % zoomlevel[0]) for tile in tm.tileslist(bbox = (parameters.minlon, parameters.minlat, \ parameters.maxlon, parameters.maxlat), \ zoomlevels = zoomlevel): # calc tile metadata tile_path = tm.cache.tile_fullpath(tile) proj = GoogleProjection(tm.tile_size, zoomlevel, tm.tile_scheme) (tile_lox, tile_loy, tile_hix, tile_hiy) = proj.tile_bbox(tile) try: # make sure the tile is on disk; tiledata is not needed tiledata = tm.tile(tile) # add to mapnik layer rasterlayer = mapnik.Layer("RasterLayer-%d-%d-%d" % tile) rasterlayer.datasource = mapnik.Raster(file = tile_path, \ lox = tile_lox, loy = tile_loy, \ hix = tile_hix, hiy = tile_hiy) rasterlayer.styles.append('RasterStyle') m.layers.append(rasterlayer) except ExtractionError: print("warning: missing tile zoom=%d x=%d y=%d" % tile) for gpxfile in parameters.gpxfiles: gpxlayer = mapnik.Layer('GPXLayer') gpxlayer.datasource = mapnik.Ogr(file = gpxfile, layer = 'tracks') gpxlayer.styles.append('GPXStyle') m.layers.append(gpxlayer) if parameters.temptrackfile: overviewlayer = mapnik.Layer('OverviewLayer') overviewlayer.datasource = mapnik.Ogr(file = parameters.temptrackfile, layer = 'tracks') overviewlayer.styles.append('GPXStyle') m.layers.append(overviewlayer) if parameters.tempwaypointfile: waypointlayer = mapnik.Layer('WaypointLayer') waypointlayer.datasource = mapnik.Ogr(file = parameters.tempwaypointfile, layer = 'waypoints') waypointlayer.styles.append('WaypointStyle') m.layers.append(waypointlayer) mapnik.render_to_file(m, parameters.basefilename + "." + parameters.output_format, parameters.output_format, parameters.scale_factor)