def __init__(self,
                 image,
                 bounds,
                 origin='upper',
                 colormap=None,
                 mercator_project=False,
                 pixelated=True,
                 name=None,
                 overlay=True,
                 control=True,
                 show=True,
                 **kwargs):
        super(ImageOverlay, self).__init__(name=name,
                                           overlay=overlay,
                                           control=control,
                                           show=show)
        self._name = 'ImageOverlay'
        self.bounds = bounds
        self.options = parse_options(**kwargs)
        self.pixelated = pixelated
        if mercator_project:
            image = mercator_transform(image, [bounds[0][0], bounds[1][0]],
                                       origin=origin)

        self.url = image_to_url(image, origin=origin, colormap=colormap)
示例#2
0
    def __init__(self, image, bounds, origin='upper', colormap=None,
                 mercator_project=False, pixelated=True,
                 name=None, overlay=True, control=True, show=True, **kwargs):
        super(ImageOverlay, self).__init__(name=name, overlay=overlay,
                                           control=control, show=show)

        options = {
            'opacity': kwargs.pop('opacity', 1.),
            'alt': kwargs.pop('alt', ''),
            'interactive': kwargs.pop('interactive', False),
            'crossOrigin': kwargs.pop('cross_origin', False),
            'errorOverlayUrl': kwargs.pop('error_overlay_url', ''),
            'zIndex': kwargs.pop('zindex', 1),
            'className': kwargs.pop('class_name', ''),
        }
        self._name = 'ImageOverlay'
        self.pixelated = pixelated

        if mercator_project:
            image = mercator_transform(
                image,
                [bounds[0][0],
                 bounds[1][0]],
                origin=origin)

        self.url = image_to_url(image, origin=origin, colormap=colormap)

        self.bounds = json.loads(json.dumps(bounds))
        self.options = json.dumps(options, sort_keys=True, indent=2)
示例#3
0
    def __init__(self, image, bounds, origin='upper', colormap=None,
                 mercator_project=False, pixelated=True,
                 name=None, overlay=True, control=True, show=True, **kwargs):
        super(ImageOverlay, self).__init__(name=name, overlay=overlay,
                                           control=control, show=show)

        options = {
            'opacity': kwargs.pop('opacity', 1.),
            'alt': kwargs.pop('alt', ''),
            'interactive': kwargs.pop('interactive', False),
            'crossOrigin': kwargs.pop('cross_origin', False),
            'errorOverlayUrl': kwargs.pop('error_overlay_url', ''),
            'zIndex': kwargs.pop('zindex', 1),
            'className': kwargs.pop('class_name', ''),
        }
        self._name = 'ImageOverlay'
        self.pixelated = pixelated

        if mercator_project:
            image = mercator_transform(
                image,
                [bounds[0][0],
                 bounds[1][0]],
                origin=origin)

        self.url = image_to_url(image, origin=origin, colormap=colormap)

        self.bounds = json.loads(json.dumps(bounds))
        self.options = json.dumps(options, sort_keys=True, indent=2)
示例#4
0
def make_rgba(grid2D, levels, colorlist, mask=None,
              mercator=False):
    """
    Make an rgba (red, green, blue, alpha) grid out of raw data values and
    provide extent and limits needed to save as an image file
    
    Args:
        grid2D: Mapio Grid2D object of result to mape 
        levels (array): list of bin edges for each color, must be same length
        colorlist (array): list of colors for each bin, should be length one
            less than levels
        mask (float): mask all values below this value
        mercator (bool): project to web mercator (needed for leaflet, not
                 for kmz)

    Returns:
        tuple: (rgba_img, extent, lmin, lmax, cmap), where:
            * rgba_img: rgba (red green blue alpha) image
            * extent: list of outside corners of image,
                [minlat, maxlat, minlon, maxlon]
            * lmin: lowest bin edge
            * lmax: highest bin edge
            * cmap: colormap corresponding to image
    """

    data1 = grid2D.getData()
    if mask is not None:
        data1[data1 < mask] = float('nan')
    geodict = grid2D.getGeoDict()
    extent = [
        geodict.xmin - 0.5*geodict.dx,
        geodict.xmax + 0.5*geodict.dx,
        geodict.ymin - 0.5*geodict.dy,
        geodict.ymax + 0.5*geodict.dy,
    ]

    lmin = levels[0]
    lmax = levels[-1]
    data2 = np.clip(data1, lmin, lmax)
    cmap = mpl.colors.ListedColormap(colorlist)
    norm = mpl.colors.BoundaryNorm(levels, cmap.N)
    data2 = np.ma.array(data2, mask=np.isnan(data1))
    rgba_img = cmap(norm(data2))
    if mercator:
        rgba_img = mercator_transform(
            rgba_img, (extent[2], extent[3]), origin='upper')

    return rgba_img, extent, lmin, lmax, cmap
示例#5
0
    def __init__(self,
                 image,
                 bounds,
                 origin='upper',
                 colormap=None,
                 mercator_project=False,
                 pixelated=True,
                 name=None,
                 overlay=True,
                 control=True,
                 show=True,
                 **kwargs):
        super(ImageOverlay, self).__init__(name=name,
                                           overlay=overlay,
                                           control=control,
                                           show=show)

        options = {
            'opacity': kwargs.pop('opacity', 1.),
            'alt': kwargs.pop('alt', ''),
            'interactive': kwargs.pop('interactive', False),
            'crossOrigin': kwargs.pop('cross_origin', False),
            'errorOverlayUrl': kwargs.pop('error_overlay_url', ''),
            'zIndex': kwargs.pop('zindex', 1),
            'className': kwargs.pop('class_name', ''),
        }
        self._name = 'ImageOverlay'
        self.pixelated = pixelated

        if mercator_project:
            image = mercator_transform(image, [bounds[0][0], bounds[1][0]],
                                       origin=origin)

        self.url = image_to_url(image, origin=origin, colormap=colormap)

        self.bounds = json.loads(json.dumps(bounds))
        self.options = json.dumps(options, sort_keys=True, indent=2)
        self._template = Template(u"""
            {% macro script(this, kwargs) %}
                var {{this.get_name()}} = L.imageOverlay(
                    '{{ this.url }}',
                    {{ this.bounds }},
                    {{ this.options }}
                    ).addTo({{this._parent.get_name()}});
            {% endmacro %}
            """)
示例#6
0
    def __init__(self, image, bounds, origin='upper', colormap=None,
                 mercator_project=False, pixelated=True,
                 name=None, overlay=True, control=True, show=True, **kwargs):
        super(ImageOverlay, self).__init__(name=name, overlay=overlay,
                                           control=control, show=show)
        self._name = 'ImageOverlay'
        self.bounds = bounds
        self.options = parse_options(**kwargs)
        self.pixelated = pixelated
        if mercator_project:
            image = mercator_transform(
                image,
                [bounds[0][0], bounds[1][0]],
                origin=origin
            )

        self.url = image_to_url(image, origin=origin, colormap=colormap)
示例#7
0
    def __init__(self, image, bounds, origin='upper', colormap=None,
                 mercator_project=False, pixelated=True,
                 name=None, overlay=True, control=True, show=True, **kwargs):
        super(ImageOverlay, self).__init__(name=name, overlay=overlay,
                                           control=control, show=show)

        options = {
            'opacity': kwargs.pop('opacity', 1.),
            'alt': kwargs.pop('alt', ''),
            'interactive': kwargs.pop('interactive', False),
            'crossOrigin': kwargs.pop('cross_origin', False),
            'errorOverlayUrl': kwargs.pop('error_overlay_url', ''),
            'zIndex': kwargs.pop('zindex', 1),
            'className': kwargs.pop('class_name', ''),
        }
        self._name = 'ImageOverlay'
        self.pixelated = pixelated

        if mercator_project:
            image = mercator_transform(
                image,
                [bounds[0][0],
                 bounds[1][0]],
                origin=origin)

        self.url = image_to_url(image, origin=origin, colormap=colormap)

        self.bounds = json.loads(json.dumps(bounds))
        self.options = json.dumps(options, sort_keys=True, indent=2)
        self._template = Template(u"""
            {% macro script(this, kwargs) %}
                var {{this.get_name()}} = L.imageOverlay(
                    '{{ this.url }}',
                    {{ this.bounds }},
                    {{ this.options }}
                    ).addTo({{this._parent.get_name()}});
            {% endmacro %}
            """)
示例#8
0
def create_png(event_dir, lsmodels=None, lqmodels=None, mercator=True,
               lsmask=0.002, lqmask=0.005, legends=False):
    """
    Creates transparent PNG file for website.

    Args:
        event_dir (srt): Directory containing ground failure results.
        lsmodels (list): List of dictionaries of model summary info compiled
            by the hazdev function. If not specified, code will search for
            the hdf5 files for the preferred model and will create this
            dictionary and will apply default colorbars and bins.
        lqmodels (list): Same as above for liquefaction.
        mercator (bool): Project raster to web mercator
        lsmask (float): Mask all landslide cells with probabilities below this
            threshold
        lqmask (float): Mask all liquefaction cells with probabilities below this
            threshold
        legends (bool): if True, will produce png files of legends for each
            preferred model

    Returns:
        .png map overlays and .json files specifying their mapped extents
    """
    filenames = []
    files = os.listdir(event_dir)
    if lsmodels is None:
        # Read in the "preferred" model for landslides
        ls_mod_file = [f for f in files if 'jessee_2017.hdf5' in f]
        if len(ls_mod_file) == 1:
            ls_file = os.path.join(event_dir, ls_mod_file[0])
            ls_mod = loadlayers(ls_file)
            levels = DFBINS
            colors1 = DFCOLORS
            filesnippet = 'jessee_2017'
            ls_grid = ls_mod['model']['grid']
            ls_data = ls_grid.getData()
            if lsmask:
                ls_data[ls_data < lsmask] = float('nan')
            ls_geodict = ls_grid.getGeoDict()
            ls_extent = [
                ls_geodict.xmin - 0.5*ls_geodict.dx,
                ls_geodict.xmax + 0.5*ls_geodict.dx,
                ls_geodict.ymin - 0.5*ls_geodict.dy,
                ls_geodict.ymax + 0.5*ls_geodict.dy,
            ]
            filen = os.path.join(event_dir, '%s_extent.json' % filesnippet)
            filenames.append(filen)
            with open(filen, 'w') as f:
                json.dump(ls_extent, f)

            lmin = levels[0]
            lmax = levels[-1]
            ls_data2 = np.clip(ls_data, lmin, lmax)
            cmap = mpl.colors.ListedColormap(colors1)
            norm = mpl.colors.BoundaryNorm(levels, cmap.N)
            ls_data2 = np.ma.array(ls_data2, mask=np.isnan(ls_data))
            #scalarMap = cm.ScalarMappable(norm=norm, cmap=cmap)
            #rgba_img = scalarMap.to_rgba_array(ls_data2, alpha=alpha)
            rgba_img = cmap(norm(ls_data2))
            if mercator:
                rgba_img = mercator_transform(
                    rgba_img, (ls_extent[2], ls_extent[3]), origin='upper')

            filen = os.path.join(event_dir, '%s.png' % filesnippet)
            plt.imsave(filen,
                       rgba_img,
                       vmin=lmin,
                       vmax=lmax,
                       cmap=cmap
                       )
        else:
            raise OSError(
                "Preferred landslide model result (%s) not found." % ls_mod_file)
    else:
        for lsm in lsmodels:
            #if lsm['preferred']:
            levels = lsm['bin_edges']
            colors1 = lsm['bin_colors']
            filesnippet = lsm['id']

            fsh = '%s.hdf5' % filesnippet
            ls_mod_file = [f for f in files if fsh in f]
            if len(ls_mod_file) == 1:
                ls_file = os.path.join(event_dir, ls_mod_file[0])
                ls_mod = loadlayers(ls_file)
            else:
                raise OSError(
                    "Specified landslide model result (%s) not found." % fsh)

            ls_grid = ls_mod['model']['grid']
            ls_data = ls_grid.getData()
            if lsmask:
                ls_data[ls_data < lsmask] = float('nan')
            ls_geodict = ls_grid.getGeoDict()
            ls_extent = [
                ls_geodict.xmin - 0.5*ls_geodict.dx,
                ls_geodict.xmax + 0.5*ls_geodict.dx,
                ls_geodict.ymin - 0.5*ls_geodict.dy,
                ls_geodict.ymax + 0.5*ls_geodict.dy,
            ]
            filen = os.path.join(event_dir, '%s_extent.json' % filesnippet)
            filenames.append(filen)
            with open(filen, 'w') as f:
                json.dump(ls_extent, f)

            lmin = levels[0]
            lmax = levels[-1]
            ls_data2 = np.clip(ls_data, lmin, lmax)
            cmap = mpl.colors.ListedColormap(colors1)
            norm = mpl.colors.BoundaryNorm(levels, cmap.N)
            ls_data2 = np.ma.array(ls_data2, mask=np.isnan(ls_data))
            #scalarMap = cm.ScalarMappable(norm=norm, cmap=cmap)
            #rgba_img = scalarMap.to_rgba_array(ls_data2, alpha=alpha)
            rgba_img = cmap(norm(ls_data2))
            if mercator:
                rgba_img = mercator_transform(
                    rgba_img, (ls_extent[2], ls_extent[3]), origin='upper')

            filen = os.path.join(event_dir, '%s.png' % filesnippet)
            plt.imsave(filen,
                       rgba_img,
                       vmin=lmin,
                       vmax=lmax,
                       cmap=cmap
                       )

    if lqmodels is None:
        # read in preferred model for liquefaction if none specified
        lq_mod_file = [f2 for f2 in files if 'zhu_2017_general.hdf5' in f2]
        if len(lq_mod_file) == 1:
            lq_file = os.path.join(event_dir, lq_mod_file[0])
            lq_mod = loadlayers(lq_file)
            levels = DFBINS
            colors1 = DFCOLORS
            filesnippet = 'zhu_2017_general'
            lq_grid = lq_mod['model']['grid']
            lq_data = lq_grid.getData()
            if lqmask:
                lq_data[lq_data < lqmask] = float('nan')
            lq_geodict = lq_grid.getGeoDict()
            lq_extent = [
                lq_geodict.xmin - 0.5*lq_geodict.dx,
                lq_geodict.xmax + 0.5*lq_geodict.dx,
                lq_geodict.ymin - 0.5*lq_geodict.dy,
                lq_geodict.ymax + 0.5*lq_geodict.dy,
            ]
            filen = os.path.join(event_dir, '%s_extent.json' % filesnippet)
            filenames.append(filen)
            with open(filen, 'w') as f:
                json.dump(lq_extent, f)

            lmin = levels[0]
            lmax = levels[-1]
            lq_data2 = np.clip(lq_data, lmin, lmax)
            cmap = mpl.colors.ListedColormap(colors1)
            norm = mpl.colors.BoundaryNorm(levels, cmap.N)
            lq_data2 = np.ma.array(lq_data2, mask=np.isnan(lq_data))
            rgba_img = cmap(norm(lq_data2))
            if mercator:
                rgba_img = mercator_transform(
                    rgba_img, (lq_extent[2], lq_extent[3]), origin='upper')
            filen = os.path.join(event_dir, '%s.png' % filesnippet)
            plt.imsave(filen,
                       rgba_img,
                       vmin=lmin,
                       vmax=lmax,
                       cmap=cmap
                       )
            filenames.append(filen)
        else:
            raise OSError(
                "Preferred liquefaction model result (%s) not found." % lq_mod_file)
    else:
        for lqm in lqmodels:
            if lqm['preferred']:
                levels = lqm['bin_edges']
                colors1 = lqm['bin_colors']
                filesnippet = lqm['id']

            fsh = '%s.hdf5' % filesnippet
            lq_mod_file = [f2 for f2 in files if fsh in f2]
            if len(lq_mod_file) == 1:
                lq_file = os.path.join(event_dir, lq_mod_file[0])
                lq_mod = loadlayers(lq_file)
            else:
                raise OSError(
                    "Specified liquefaction model result (%s) not found." % fsh)

            lq_grid = lq_mod['model']['grid']
            lq_data = lq_grid.getData()
            if lqmask:
                lq_data[lq_data < lqmask] = float('nan')
            lq_geodict = lq_grid.getGeoDict()
            lq_extent = [
                lq_geodict.xmin - 0.5*lq_geodict.dx,
                lq_geodict.xmax + 0.5*lq_geodict.dx,
                lq_geodict.ymin - 0.5*lq_geodict.dy,
                lq_geodict.ymax + 0.5*lq_geodict.dy,
            ]
            filen = os.path.join(event_dir, '%s_extent.json' % filesnippet)
            filenames.append(filen)
            with open(filen, 'w') as f:
                json.dump(lq_extent, f)

            lmin = levels[0]
            lmax = levels[-1]
            lq_data2 = np.clip(lq_data, lmin, lmax)
            cmap = mpl.colors.ListedColormap(colors1)
            norm = mpl.colors.BoundaryNorm(levels, cmap.N)
            lq_data2 = np.ma.array(lq_data2, mask=np.isnan(lq_data))
            rgba_img = cmap(norm(lq_data2))
            if mercator:
                rgba_img = mercator_transform(
                    rgba_img, (lq_extent[2], lq_extent[3]), origin='upper')
            filen = os.path.join(event_dir, '%s.png' % filesnippet)
            plt.imsave(filen,
                       rgba_img,
                       vmin=lmin,
                       vmax=lmax,
                       cmap=cmap
                       )
            filenames.append(filen)

    if legends:
        lsname, lqname = make_legend(lqmin=lqmask, lsmin=lsmask, outfolder=event_dir)
        filenames.append(lsname)
        filenames.append(lqname)

    return filenames