Пример #1
0
    def from_data_with_legend(
            cls, slug, data, legend, extent=None, geotransform=None):
        """
        Create GeoImage from slug and data.

        Data is numpy array.

        Extent is list/tuple of the form (west, south, east, north).
        """
        geoimage = cls.check_existence(slug)
        if geoimage:
            return geoimage

        tmp_base = tempfile.mktemp()
        colormap = mpl.colors.ListedColormap(legend, 'indexed')
        rgba = colormap(data, bytes=True)
        Image.fromarray(rgba).save(tmp_base + '.png', 'PNG')
        if extent is not None:
            results.write_extent_pgw(tmp_base + '.pgw', extent)
        if geotransform is not None:
            write_geotransform_pgw(tmp_base + '.pgw', geotransform)

        return cls._from_rd_png(tmp_base, slug, extent)
Пример #2
0
    def from_data_with_min_max(
            cls, slug, data, extent, min_value, max_value, cdict=None):
        """
        Create GeoImage from slug and data.
        """
        geoimage = cls.check_existence(slug)
        if geoimage:
            return geoimage

        tmp_base = tempfile.mktemp()
        if cdict is None:
            cdict = {
                'red': ((0.0, 51. / 256, 51. / 256),
                        (0.5, 237. / 256, 237. / 256),
                        (1.0, 83. / 256, 83. / 256)),
                'green': ((0.0, 114. / 256, 114. / 256),
                          (0.5, 245. / 256, 245. / 256),
                          (1.0, 83. / 256, 83. / 256)),
                'blue': ((0.0, 54. / 256, 54. / 256),
                         (0.5, 170. / 256, 170. / 256),
                         (1.0, 83. / 256, 83. / 256)),
                }
        colormap = mpl.colors.LinearSegmentedColormap(
            'something', cdict, N=1024)
        normalize = mpl.colors.Normalize(vmin=min_value, vmax=max_value)
        rgba = colormap(normalize(data), bytes=True)

        if 'depth' in slug:
            # Make transparent where depth is zero or less
            rgba[:, :, 3] = np.where(np.greater(data, 0), 255, 0)

        Image.fromarray(rgba).save(tmp_base + '.png', 'PNG')

        results.write_extent_pgw(tmp_base + '.pgw', extent)

        return cls._from_rd_png(tmp_base, slug, extent)