def render(self, config, renderer_name, output_formats, file_prefix): """Renders a job with the given rendering configuration, using the provided renderer, to the given output formats. Args: config (RenderingConfiguration): the rendering configuration object. renderer_name (string): the layout renderer to use for this rendering. output_formats (list): a list of output formats to render to, from the list of supported output formats (pdf, svgz, etc.). file_prefix (string): filename prefix for all output files. """ assert config.osmid or config.bounding_box, \ 'At least an OSM ID or a bounding box must be provided!' output_formats = map(lambda x: x.lower(), output_formats) config.i18n = i18n.install_translation(config.language, self._locale_path) LOG.info('Rendering with renderer %s in language: %s (rtl: %s).' % (renderer_name, config.i18n.language_code(), config.i18n.isrtl())) # Determine bounding box and WKT of interest if config.osmid: osmid_bbox, osmid_area \ = self.get_geographic_info(config.osmid) # Define the bbox if not already defined if not config.bounding_box: config.bounding_box \ = coords.BoundingBox.parse_wkt(osmid_bbox) # Update the polygon WKT of interest config.polygon_wkt = osmid_area else: # No OSM ID provided => use specified bbox config.polygon_wkt = config.bounding_box.as_wkt() # Make sure we have a bounding box assert config.bounding_box is not None assert config.polygon_wkt is not None # Prepare the index try: street_index = EQNZIndex(self._db, config.polygon_wkt, config.i18n, ush_url='http://eq.org.nz', ush_category_ids=config.ush_category_ids) except IndexEmptyError: LOG.warning("Designated area leads to an empty index") street_index = None # Create a temporary directory for all our shape files tmpdir = tempfile.mkdtemp(prefix='ocitysmap') try: LOG.debug('Rendering in temporary directory %s' % tmpdir) # Prepare the generic renderer renderer_cls = renderers.get_renderer_class_by_name(renderer_name) renderer = renderer_cls(config, tmpdir, street_index) # Update the street_index to reflect the grid's actual position if renderer.grid and street_index: street_index.apply_grid(renderer.grid) # Perform the actual rendering to the Cairo devices for output_format in output_formats: output_filename = '%s.%s' % (file_prefix, output_format) try: self._render_one(renderer, output_format, output_filename) except IndexDoesNotFitError: LOG.exception("The actual font metrics probably don't " "match those pre-computed by the renderer's" "constructor. Backtrace follows...") # Also dump the CSV street index if street_index: street_index.write_to_csv(config.title, '%s.csv' % file_prefix) finally: self._cleanup_tempdir(tmpdir)
def render(self, config, renderer_name, output_formats, file_prefix): """Renders a job with the given rendering configuration, using the provided renderer, to the given output formats. Args: config (RenderingConfiguration): the rendering configuration object. renderer_name (string): the layout renderer to use for this rendering. output_formats (list): a list of output formats to render to, from the list of supported output formats (pdf, svgz, etc.). file_prefix (string): filename prefix for all output files. """ assert config.osmid or config.bounding_box, \ 'At least an OSM ID or a bounding box must be provided!' output_formats = map(lambda x: x.lower(), output_formats) config.i18n = i18n.install_translation(config.language, self._locale_path) LOG.info('Rendering with renderer %s in language: %s (rtl: %s).' % (renderer_name, config.i18n.language_code(), config.i18n.isrtl())) # Determine bounding box and WKT of interest if config.osmid: osmid_bbox, osmid_area \ = self.get_geographic_info(config.osmid) # Define the bbox if not already defined if not config.bounding_box: config.bounding_box \ = coords.BoundingBox.parse_wkt(osmid_bbox) # Update the polygon WKT of interest config.polygon_wkt = osmid_area else: # No OSM ID provided => use specified bbox config.polygon_wkt = config.bounding_box.as_wkt() # Make sure we have a bounding box assert config.bounding_box is not None assert config.polygon_wkt is not None osm_date = self.get_osm_database_last_update() # Create a temporary directory for all our shape files tmpdir = tempfile.mkdtemp(prefix='ocitysmap') try: LOG.debug('Rendering in temporary directory %s' % tmpdir) # Prepare the generic renderer renderer_cls = renderers.get_renderer_class_by_name(renderer_name) # Perform the actual rendering to the Cairo devices for output_format in output_formats: output_filename = '%s.%s' % (file_prefix, output_format) try: self._render_one(config, tmpdir, renderer_cls, output_format, output_filename, osm_date, file_prefix) except IndexDoesNotFitError: LOG.exception("The actual font metrics probably don't " "match those pre-computed by the renderer's" "constructor. Backtrace follows...") finally: self._cleanup_tempdir(tmpdir)
def render(self, config, renderer_name, output_formats, file_prefix): """Renders a job with the given rendering configuration, using the provided renderer, to the given output formats. Args: config (RenderingConfiguration): the rendering configuration object. renderer_name (string): the layout renderer to use for this rendering. output_formats (list): a list of output formats to render to, from the list of supported output formats (pdf, svgz, etc.). file_prefix (string): filename prefix for all output files. """ assert config.osmid or config.bounding_box, \ 'At least an OSM ID or a bounding box must be provided!' output_formats = map(lambda x: x.lower(), output_formats) config.i18n = i18n.install_translation(config.language, self._locale_path) LOG.info( 'Rendering with renderer %s in language: %s (rtl: %s).' % (renderer_name, config.i18n.language_code(), config.i18n.isrtl())) # Determine bounding box and WKT of interest if config.osmid: osmid_bbox, osmid_area \ = self.get_geographic_info(config.osmid) # Define the bbox if not already defined if not config.bounding_box: config.bounding_box \ = coords.BoundingBox.parse_wkt(osmid_bbox) # Update the polygon WKT of interest config.polygon_wkt = osmid_area else: # No OSM ID provided => use specified bbox config.polygon_wkt = config.bounding_box.as_wkt() # Make sure we have a bounding box assert config.bounding_box is not None assert config.polygon_wkt is not None osm_date = self.get_osm_database_last_update() # Create a temporary directory for all our shape files tmpdir = tempfile.mkdtemp(prefix='ocitysmap') try: LOG.debug('Rendering in temporary directory %s' % tmpdir) # Prepare the generic renderer renderer_cls = renderers.get_renderer_class_by_name(renderer_name) # Perform the actual rendering to the Cairo devices for output_format in output_formats: output_filename = '%s.%s' % (file_prefix, output_format) try: self._render_one(config, tmpdir, renderer_cls, output_format, output_filename, osm_date, file_prefix) except IndexDoesNotFitError: LOG.exception("The actual font metrics probably don't " "match those pre-computed by the renderer's" "constructor. Backtrace follows...") finally: self._cleanup_tempdir(tmpdir)