def legend(self, context, output, format, height, layer, style, version, width, transparent): try: magics_format = MAGICS_OUTPUT_TYPES[format] except KeyError: raise errors.InvalidFormat(format) output_fname = output.target(magics_format) path, _ = os.path.splitext(output_fname) with LOCK: # Magics is talking in cm. width_cm = float(width) / 40.0 height_cm = float(height) / 40.0 args = [ self.driver.output( output_formats=[magics_format], output_name_first_page_number="off", output_cairo_transparent_background=transparent, output_width=width, output_name=path, ), self.driver.mmap( subpage_frame="off", page_x_length=width_cm, page_y_length=height_cm, super_page_x_length=width_cm, super_page_y_length=height_cm, subpage_x_length=width_cm, subpage_y_length=height_cm, subpage_x_position=0.0, subpage_y_position=0.0, output_width=width, page_frame="off", page_id_line="off", ), ] contour = layer.style(style, ) args += layer.render( context, self.driver, contour, { "legend": "on", "contour_legend_only": True }, ) legend_font_size = "25%" if width_cm < height_cm: legend_font_size = "5%" legend_title = layer.title if hasattr(layer, legend_title): legend_title = layer.legend_title legend = self.driver.mlegend( legend_title="on", legend_title_text=legend_title, legend_display_type="continuous", legend_box_mode="positional", legend_only=True, legend_box_x_position=0.00, legend_box_y_position=0.00, legend_box_x_length=width_cm, legend_box_y_length=height_cm, legend_box_blanking=not transparent, legend_text_font_size=legend_font_size, legend_text_colour="white", ) # self.log.debug('plot(): Calling self.driver.plot(%s)', args) try: self.driver.plot(*args, legend) except Exception as e: self.log.exception("Magics error: %s", e) raise self.log.debug("plot(): Size of %s: %s", output_fname, os.stat(output_fname).st_size) return output_fname
def plot( self, context, output, bbox, crs, format, height, layers, styles, version, width, transparent, _macro=False, bgcolor=None, elevation=None, exceptions=None, time=None, ): lon_vertical = 0.0 if crs.startswith("EPSG:32661:"): crs_name = "polar_north" lon_vertical = float(crs.split(":")[2]) elif crs.startswith("EPSG:32761:"): crs_name = "polar_south" lon_vertical = float(crs.split(":")[2]) elif crs == "EPSG:32761": crs_name = "EPSG:32761" else: try: crs = _CRSS[crs] crs_name = crs.name except KeyError: raise ValueError("Unsupported CRS '{}'".format(crs)) try: magics_format = MAGICS_OUTPUT_TYPES[format] except KeyError: raise errors.InvalidFormat(format) output_fname = output.target(magics_format) path, _ = os.path.splitext(output_fname) with LOCK: min_x, min_y, max_x, max_y = bbox # Magics is talking in cm. width_cm = width / 40.0 height_cm = height / 40.0 macro.silent() coordinates_system = {"EPSG:4326": "latlon"} map_params = { "subpage_map_projection": crs_name, "subpage_lower_left_latitude": min_y, "subpage_lower_left_longitude": min_x, "subpage_upper_right_latitude": max_y, "subpage_upper_right_longitude": max_x, "subpage_coordinates_system": coordinates_system.get(crs_name, "projection"), "subpage_frame": "off", "page_x_length": width_cm, "page_y_length": height_cm, "super_page_x_length": width_cm, "super_page_y_length": height_cm, "subpage_x_length": width_cm, "subpage_y_length": height_cm, "subpage_x_position": 0.0, "subpage_y_position": 0.0, "output_width": width, "page_frame": "off", "skinny_mode": "on", "page_id_line": "off", } # add extra settings for polar stereographic projection when # vertical longitude is not 0 if crs_name in ["polar_north", "polar_south"]: map_params["subpage_map_vertical_longitude"] = lon_vertical if crs_name in ["polar_north"]: map_params["subpage_map_true_scale_north"] = 90 if crs_name in ["polar_south"]: map_params["subpage_map_true_scale_south"] = -90 args = [ macro.output( output_formats=[magics_format], output_name_first_page_number="off", output_cairo_transparent_background=transparent, output_width=width, output_name=path, ), macro.mmap(**map_params), ] for layer, style in zip(layers, styles): style = layer.style(style) args += layer.render(context, macro, style) if _macro: return ( "text/x-python", self.macro_text( args, output.target(".py"), getattr(context, "data_url", None), layers, styles, ), ) # self.log.debug('plot(): Calling macro.plot(%s)', args) try: macro.plot(*args) except Exception as e: self.log.exception("Magics error: %s", e) raise self.log.debug("plot(): Size of %s: %s", output_fname, os.stat(output_fname).st_size) return format, output_fname
def plot( self, context, output, bbox, crs, format, height, layers, styles, version, width, transparent, _macro=False, bgcolor=None, elevation=None, exceptions=None, time=None, ): lon_vertical = 0.0 if crs.startswith("EPSG:32661:"): crs_name = "polar_north" lon_vertical = float(crs.split(":")[2]) elif crs.startswith("EPSG:32761:"): crs_name = "polar_south" lon_vertical = float(crs.split(":")[2]) elif crs == "EPSG:32761": crs_name = "EPSG:32761" else: try: crs = self._CRSS[crs] crs_name = crs.name except KeyError: raise ValueError("Unsupported CRS '{}'".format(crs)) try: magics_format = MAGICS_OUTPUT_TYPES[format] except KeyError: raise errors.InvalidFormat(format) output_fname = output.target(magics_format) path, _ = os.path.splitext(output_fname) with LOCK: self.driver.silent() args = [ self.output( formats=magics_format, transparent=transparent, width=width, path=path, ), self.mmap( bbox=bbox, width=width, height=height, crs_name=crs_name, lon_vertical=lon_vertical, ), ] args += self.mlayers(context, layers, styles) if _macro: return ( "text/x-python", self.macro_text( args, output.target(".py"), getattr(context, "data_url", None), layers, styles, ), ) # self.log.debug('plot(): Calling self.driver.plot(%s)', args) try: self.driver.plot(*args) except Exception as e: self.log.exception("Magics error: %s", e) raise self.log.debug("plot(): Size of %s: %s", output_fname, os.stat(output_fname).st_size) return format, output_fname
def plot(self, context, output, bbox, crs, format, height, layers, styles, version, width, transparent, _macro=False, bgcolor=None, elevation=None, exceptions=None, time=None, ): try: crs = _CRSS[crs] except KeyError: raise ValueError("Unsupported CRS '{}'".format(crs)) try: magics_format = MAGICS_OUTPUT_TYPES[format] except KeyError: raise errors.InvalidFormat(format) output_fname = output.target(magics_format) print("OUTPUT", output_fname) path, _ = os.path.splitext(output_fname) with LOCK: min_x, min_y, max_x, max_y = bbox # Magics is talking in cm. width_cm = width / 40. height_cm = height / 40. macro.silent() args = [ macro.output(output_formats=[magics_format], output_name_first_page_number='off', output_cairo_transparent_background=transparent, output_width=width, output_name=path), macro.mmap(subpage_map_projection=crs.name, subpage_lower_left_latitude=min_x, subpage_lower_left_longitude=min_y, subpage_upper_right_latitude=max_x, subpage_upper_right_longitude=max_y, subpage_frame='off', page_x_length=width_cm, page_y_length=height_cm, super_page_x_length=width_cm, super_page_y_length=height_cm, subpage_x_length=width_cm, subpage_y_length=height_cm, subpage_x_position=0., subpage_y_position=0., output_width=width, page_frame='off', page_id_line='off',), ] for layer, style in zip(layers, styles): style = layer.style(style) args += layer.render(context, macro, style) if _macro: return self.macro_text(args, output.target('.py'), getattr(context, 'data_url', None), layers, styles) # self.log.debug('plot(): Calling macro.plot(%s)', args) try: macro.plot(*args) except Exception as e: self.log.exception('Magics error: %s', e) raise self.log.debug('plot(): Size of %s: %s', output_fname, os.stat(output_fname).st_size) return output_fname