Пример #1
0
    def grib_styles(self, field, grib, path, index):
        with LOCK:
            try:
                styles = macro.wmsstyles(macro.mgrib(grib_input_file_name=path,
                                                     grib_field_position=index + 1))
                # Looks like they are provided in reverse order
            except Exception as e:
                self.log.exception('grib_styles: Error: %s', e)
                styles = {}

        return [MagicsWebStyle(**s) for s in styles.get('styles', [])]
Пример #2
0
def as_plottable(field, position=0, metadata=None, preproc=None):

    # print('as_plottable', preproc)

    if isinstance(field, str):
        grib = macro.mgrib(grib_input_file_name=field,
                           grib_file_address_mode='byte_offset',
                           grib_field_position=position)
        return grib, None, metadata, 'path'

    if hasattr(field, 'path') and hasattr(field, 'offset') and hasattr(
            field, 'area'):
        grib = macro.mgrib(grib_input_file_name=field.path,
                           grib_file_address_mode='byte_offset',
                           grib_field_position=int(field.offset))
        return grib, field.area, metadata, 'gridfield'

    if isinstance(field, xr.DataArray):
        if metadata is None:
            metadata = {}
            grib = {}
            for k, v in field.attrs.items():
                if k.startswith('GRIB_'):
                    grib[k[5:]] = str(v)
                else:
                    metadata[k] = str(v)

            # Only key GRIB
            if grib:
                metadata = grib

        n, w, s, e = float(field.latitude[0]), float(
            field.longitude[0]), float(field.latitude[-1]), float(
                field.longitude[-1])
        ns = float(field.latitude[1]) - float(field.latitude[0])
        ew = float(field.longitude[1]) - float(field.longitude[0])

        grib = macro.minput(
            input_field=field.values,
            input_field_initial_latitude=n,
            input_field_latitude_step=ns,
            input_field_initial_longitude=w,
            input_field_longitude_step=ew,
            input_metadata=metadata,
        )
        return grib, (n, w, s, e), metadata, 'xarray'

    if hasattr(field, 'array'):
        ew, ns = field.grid
        n, w, s, e = field.area
        if metadata is None:
            metadata = field.metadata

        if preproc:
            f = preproc
        else:
            f = identity

        grib = macro.minput(
            input_field=f(field.array),
            input_field_initial_latitude=float(n),
            input_field_latitude_step=-float(ns),
            input_field_initial_longitude=float(w),
            input_field_longitude_step=float(ew),
            input_metadata=metadata,
        )
        return grib, (n, w, s, e), metadata, 'bespoke'

    if isinstance(field, np.ndarray):

        class F:
            def __init__(self, f):
                self.array = f
                self.grid = metadata['grid']
                self.area = metadata['area']

        return as_plottable(F(field), metadata=metadata, preproc=preproc)

    if isinstance(field, list):
        if isinstance(position, list):
            return [
                as_plottable(f, p, metadata)
                for (f, p) in zip(field, position)
            ]
        else:
            return [as_plottable(f, 0, metadata) for f in field]

    raise ValueError("Cannot plot %s" % (type(field), ))
Пример #3
0
    os.environ["MAGPLUS_QUIET"] = "true"
    
    area = mm.mmap(**mm_coasts["mmap"])
    bg = mm.mcoast(**mm_coasts["background"])
    fg = mm.mcoast(**mm_coasts["foreground"])

    mm_coasts["mlegend"]["legend_title_text"] = units
    legend = mm.mlegend(**mm_coasts["mlegend"])
    
    for k, v in gb_met.iteritems():
        print("processing: " + args.product + " +" + str(k).zfill(2))
        
        input_data = mm.mgrib(
            grib_input_file_name = args.grib,
            grib_field_position = v,
            grib_automatic_scaling = 'off',
            grib_scaling_factor = scaling_factor,
            grib_scaling_offset = scaling_offset,
            grib_automatic_derived_scaling = 'off',
        )

        #TODO: fileout handling
        fileout=str(args.product) + '+' + str(k).zfill(2)
        out = mm.output(
            output_name = args.outdir + "/" + fileout,
            output_formats=['png'],
            output_name_first_page_number = "off",
            output_width = 1280
        )

        title = mm.mtext(
            text_lines  = ["<grib_info key='nameECMF'/> -  <grib_info key='valid-date'/>"],