def GetMap(self, params): if params["bbox"][0] >= params["bbox"][2]: raise OGCException("BBOX values don't make sense. minx is greater than maxx.") if params["bbox"][1] >= params["bbox"][3]: raise OGCException("BBOX values don't make sense. miny is greater than maxy.") if params.has_key("styles") and len(params["styles"]) != len(params["layers"]): raise OGCException("STYLES length does not match LAYERS length.") m = Map(params["width"], params["height"]) if params.has_key("transparent") and params["transparent"] == "FALSE": m.background = params["bgcolor"] else: m.background = Color(0, 0, 0, 0) maplayers = self.mapfactory.layers mapstyles = self.mapfactory.styles for layername in params["layers"]: try: layer = maplayers[layername] except KeyError: raise OGCException('Layer "%s" not defined.' % layername, "LayerNotDefined") for stylename in layer.styles: if stylename in mapstyles.keys(): m.append_style(stylename, mapstyles[stylename]) else: raise ServerConfigurationError( 'Layer "%s" refers to non-existent style "%s".' % (layername, stylename) ) m.layers.append(layer) m.zoom_to_box(Envelope(params["bbox"][0], params["bbox"][1], params["bbox"][2], params["bbox"][3])) im = Image(params["width"], params["height"]) render(m, im) im = fromstring("RGBA", (params["width"], params["height"]), rawdata(im)) fh = StringIO() im.save(fh, PIL_TYPE_MAPPING[params["format"]], quality=100) fh.seek(0) return Response(params["format"], fh.read())
def GetMap(self, params): m = self._buildMap(params) im = Image(params['width'], params['height']) render(m, im) im = fromstring('RGBA', (params['width'], params['height']), rawdata(im)) fh = StringIO() im.save(fh, PIL_TYPE_MAPPING[params['format']], quality=100) fh.seek(0) return Response(params['format'], fh.read())
def renderTile(self, tile): import mapnik, StringIO import PIL.Image if self.mapnik: m = self.mapnik else: if self.fonts: engine = mapnik.FontEngine.instance() for font in self.fonts: engine.register_font(font) # Init it as 0,0 m = mapnik.Map(0, 0) mapnik.load_map(m, self.mapfile) if self.projection: m.srs = self.projection # Restrict layer list, if requested if self.layers and self.layers != self.name: layers = self.layers.split(",") for layer_num in range(len(m.layers) - 1, -1, -1): l = m.layers[layer_num] if l.name not in layers: del m.layers[layer_num] if self.debug: print >> sys.stderr, "Removed layer %s loaded from %s, not in list: %s" % ( l.name, self.mapfile, layers) # this will insure that it gets cached in mod_python self.mapnik = m # Set the mapnik size to match the size of the current tile m.width = tile.size()[0] m.height = tile.size()[1] bbox = tile.bounds() bbox = mapnik.Envelope(bbox[0], bbox[1], bbox[2], bbox[3]) m.zoom_to_box(bbox) im = mapnik.Image(*tile.size()) mapnik.render(m, im) if hasattr(im, 'tostring'): data = im.tostring() elif hasattr(mapnik, 'rawdata'): data = mapnik.rawdata(im) else: raise Exception( "Something is wrong: your version of Mapnik can't create a string from an image." ) im = PIL.Image.fromstring('RGBA', tile.size(), data) buffer = StringIO.StringIO() im.save(buffer, self.extension) buffer.seek(0) tile.data = buffer.read() return tile.data
def renderTile(self, tile): import mapnik, StringIO import PIL.Image if self.mapnik: m = self.mapnik else: if self.fonts: engine = mapnik.FontEngine.instance() for font in self.fonts: engine.register_font(font) # Init it as 0,0 m = mapnik.Map( 0, 0 ) mapnik.load_map(m,self.mapfile) if self.projection: m.srs = self.projection # Restrict layer list, if requested if self.layers and self.layers != self.name: layers = self.layers.split(",") for layer_num in range(len(m.layers)-1, -1, -1): l = m.layers[layer_num] if l.name not in layers: del m.layers[layer_num] if self.debug: print >>sys.stderr, "Removed layer %s loaded from %s, not in list: %s" % (l.name, self.mapfile, layers) # this will insure that it gets cached in mod_python self.mapnik = m # Set the mapnik size to match the size of the current tile m.width = tile.size()[0] m.height = tile.size()[1] bbox = tile.bounds() bbox = mapnik.Envelope(bbox[0], bbox[1], bbox[2], bbox[3]) m.zoom_to_box(bbox) im = mapnik.Image( *tile.size() ) mapnik.render(m, im) if hasattr(im, 'tostring'): data = im.tostring() elif hasattr(mapnik, 'rawdata'): data = mapnik.rawdata(im) else: raise Exception("Something is wrong: your version of Mapnik can't create a string from an image.") im = PIL.Image.fromstring('RGBA', tile.size(), data) buffer = StringIO.StringIO() im.save(buffer, self.extension) buffer.seek(0) tile.data = buffer.read() return tile.data
def GetMap(self, params): if params['bbox'][0] >= params['bbox'][2]: raise OGCException( "BBOX values don't make sense. minx is greater than maxx.") if params['bbox'][1] >= params['bbox'][3]: raise OGCException( "BBOX values don't make sense. miny is greater than maxy.") if params.has_key('styles') and len(params['styles']) != len( params['layers']): raise OGCException('STYLES length does not match LAYERS length.') m = Map(params['width'], params['height']) if params.has_key('transparent') and params['transparent'] == 'FALSE': m.background = params['bgcolor'] else: m.background = Color(0, 0, 0, 0) maplayers = self.mapfactory.layers mapstyles = self.mapfactory.styles for layername in params['layers']: try: layer = maplayers[layername] except KeyError: raise OGCException('Layer "%s" not defined.' % layername, 'LayerNotDefined') for stylename in layer.styles: if stylename in mapstyles.keys(): m.append_style(stylename, mapstyles[stylename]) else: raise ServerConfigurationError( 'Layer "%s" refers to non-existent style "%s".' % (layername, stylename)) m.layers.append(layer) m.zoom_to_box( Envelope(params['bbox'][0], params['bbox'][1], params['bbox'][2], params['bbox'][3])) im = Image(params['width'], params['height']) render(m, im) im = fromstring('RGBA', (params['width'], params['height']), rawdata(im)) fh = StringIO() im.save(fh, PIL_TYPE_MAPPING[params['format']], quality=100) fh.seek(0) return Response(params['format'], fh.read())