Source code for buzzard._gdal_mem_raster

import contextlib

from buzzard._a_emissary_raster import AEmissaryRaster, ABackEmissaryRaster
from buzzard._a_gdal_raster import ABackGDALRaster
from buzzard._tools import conv
from buzzard._footprint import Footprint

[docs]class GDALMemRaster(AEmissaryRaster): """Concrete class defining the behavior of a GDAL raster using the "MEM" driver. >>> help(Dataset.create_raster) Features Defined ---------------- None """ def __init__(self, ds, fp, dtype, channel_count, channels_schema, open_options, sr): back = BackGDALMemRaster( ds._back, fp, dtype, channel_count, channels_schema, open_options, sr, ) super(GDALMemRaster, self).__init__(ds=ds, back=back)
class BackGDALMemRaster(ABackEmissaryRaster, ABackGDALRaster): """Implementation of GDALMemRaster""" def __init__(self, back_ds, fp, dtype, channel_count, channels_schema, open_options, sr): gdal_ds = self.create_file( '', fp, dtype, channel_count, channels_schema, 'MEM', open_options, sr, False ) self._gdal_ds = gdal_ds path = gdal_ds.GetDescription() driver = gdal_ds.GetDriver().ShortName fp_stored = Footprint( gt=gdal_ds.GetGeoTransform(), rsize=(gdal_ds.RasterXSize, gdal_ds.RasterYSize), ) channels_schema = self._channels_schema_of_gdal_ds(gdal_ds) dtype = conv.dtype_of_gdt_downcast(gdal_ds.GetRasterBand(1).DataType) sr = gdal_ds.GetProjection() if sr == '': wkt_stored = None else: wkt_stored = sr super(BackGDALMemRaster, self).__init__( back_ds=back_ds, wkt_stored=wkt_stored, channels_schema=channels_schema, dtype=dtype, fp_stored=fp_stored, mode='w', driver=driver, open_options=open_options, path=path, ) @contextlib.contextmanager def acquire_driver_object(self): yield self._gdal_ds def delete(self): # pragma: no cover raise NotImplementedError('GDAL MEM driver does no allow deletion, use `close`') def close(self): super(BackGDALMemRaster, self).close() del self._gdal_ds