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)
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)