''

def renderArea(self, width, height, srs, xmin, ymin, xmax, ymax, zoom):

    start_time = time()
    if global_mapnik_lock.acquire():
        try:
            if (self.mapnik is None):
                self.mapnik = get_mapnikMap(self.mapfile)
                logging.debug('TileStache.Mapnik.GridProvider.renderArea()    %.3f    to    load    %s', (time() - start_time), self.mapfile)
            self.mapnik.width = width
            self.mapnik.height = height
            self.mapnik.zoom_to_box(Box2d(xmin, ymin, xmax, ymax))
            if (self.layer_id_key is not None):
                grids = []
                for (index, fields) in self.layers:
                    datasource = self.mapnik.layers[index].datasource
                    fields = (((type(fields) is list) and map(str, fields)) or datasource.fields())
                    grid = mapnik.Grid(width, height)
                    mapnik.render_layer(self.mapnik, grid, layer=index, fields=fields)
                    grid = grid.encode('utf', resolution=self.scale, features=True)
                    for key in grid['data']:
                        grid['data'][key][self.layer_id_key] = self.mapnik.layers[index].name
                    grids.append(grid)
                outgrid = reduce(merge_grids, grids)
            else:
                grid = mapnik.Grid(width, height)
                for (index, fields) in self.layers:
                    datasource = self.mapnik.layers[index].datasource
                    fields = (((type(fields) is list) and map(str, fields)) or datasource.fields())
                    mapnik.render_layer(self.mapnik, grid, layer=index, fields=fields)
                outgrid = grid.encode('utf', resolution=self.scale, features=True)
        except:
            self.mapnik = None
            raise
        finally:
            global_mapnik_lock.release()
    logging.debug('TileStache.Mapnik.GridProvider.renderArea()    %dx%d    at    %d    in    %.3f    from    %s', width, height, self.scale, (time() - start_time), self.mapfile)
    return SaveableResponse(outgrid, self.scale)
