def test_raster_math_mean(self): for is_3d in [True, False]: rM = processing.RasterMath(raster, return_3d=is_3d, verbose=is_3d, in_image_mask=mask, n_jobs=is_3d + 1) if is_3d is False: # test without compression with reading/writing pixel per pixel, very slow... rM.custom_block_size(10, 10) # to have full masked block rM.add_function(np.mean, '/tmp/mean.tif', axis=is_3d + 1, dtype=np.int16) rM.run() else: # test using default block size and high compressio of raster rM.add_function(np.mean, '/tmp/mean.tif', axis=is_3d + 1, dtype=np.int16, compress='high') rM.run() assert (gdal.Open('/tmp/mean.tif').RasterCount == 1) assert (gdal.Open('/tmp/mean.tif').RasterXSize == rM.n_columns) assert (gdal.Open('/tmp/mean.tif').RasterYSize == rM.n_lines) os.remove('/tmp/mean.tif')
def test_mask(self): for is_3d in [True, False]: mask = '/tmp/mask.tif' processing.image_mask_from_vector(vector, raster, mask) mask_src = gdal.Open(mask) raster_src = gdal.Open(raster) mask_proj = osr.SpatialReference(wkt=mask_src.GetProjection()) raster_proj = osr.SpatialReference(wkt=raster_src.GetProjection()) assert (raster_proj.GetAttrValue('projcs') == mask_proj.GetAttrValue('projcs')) assert (mask_src.RasterCount == 1) assert (mask_src.RasterXSize == raster_src.RasterXSize) assert (mask_src.RasterYSize == raster_src.RasterYSize) rM_band = processing.RasterMath(raster, return_3d=is_3d) for idx, band in enumerate(rM_band.read_band_per_band()): pass rM_band.add_function(np.mean, axis=is_3d + 1, out_image='/tmp/mean.tif') rM_band.run() self.assertRaises(MemoryError, rM_band.run, '1K') assert (idx + 1 == rM_band.n_bands) x = rM_band.get_random_block() assert (x.ndim == is_3d + 2) os.remove('/tmp/mean.tif')
def test_3d(self): rM_3d = processing.RasterMath(raster, return_3d=True) self.assertRaises(ValueError, rM_3d.get_block, 100) assert (rM_3d.get_random_block().ndim == 3) for block in rM.read_block_per_block(): pass for band in rM.read_band_per_band(): pass rM.custom_block_size(128, 256) assert (rM.y_block_size == 256) assert (rM.x_block_size == 128) rM.custom_block_size(-1, -1) assert (rM.x_block_size == rM.n_columns) assert (rM.y_block_size == rM.n_lines) rM.custom_block_size(1 / 2, 1 / 3) assert (rM.x_block_size == np.ceil(1 / 2 * rM.n_columns)) assert (rM.y_block_size == np.ceil(1 / 3 * rM.n_lines)) rM.add_image(raster) self.assertRaises(ValueError, rM.add_image, '/tmp/100x100size.tif') return_x = lambda x: x[0].astype(np.int16) rM.add_function(return_x, '/tmp/test_double.tif') rM.run() os.remove('/tmp/test_double.tif') assert (np.all(rM.get_random_block(random_state=12)) == np.all( rM.get_random_block(random_state=12)))
def test_readPerBand(self): for is_3d in [True,False]: rM_band = processing.RasterMath(raster,return_3d=is_3d,in_image_mask=mask) for idx,band in enumerate(rM_band.read_band_per_band()): print(band.ndim) if is_3d is True: assert(band.ndim == 2) else: assert(band.ndim == 2) del rM_band
def test_mask(self) : for is_3d in [True, False]: mask = '/tmp/mask.tif' processing.image_mask_from_vector(vector,raster,mask) mask_src = gdal.Open(mask) raster_src = gdal.Open(raster) assert(mask_src.GetProjection() == raster_src.GetProjection()) assert(mask_src.RasterCount == 1) assert(mask_src.RasterXSize == raster_src.RasterXSize) assert(mask_src.RasterYSize == raster_src.RasterYSize) rM_band = processing.RasterMath(raster,return_3d=is_3d) for idx,band in enumerate(rM_band.read_band_per_band()): pass rM_band.add_function(np.mean,axis=1,out_image='/tmp/mean.tif') rM_band.run() assert(idx+1 == rM_band.n_bands) x = rM_band.get_random_block() assert(x.ndim == is_3d+2) os.remove('/tmp/mean.tif')
def test_3d(self) : rM_3d = processing.RasterMath(raster,return_3d=True) self.assertRaises(ValueError,rM_3d.get_block,100) assert(rM_3d.get_random_block().ndim == 3) for block in rM.read_block_per_block(): pass for band in rM.read_band_per_band(): pass rM.custom_block_size(128,256) assert(rM.y_block_size==256) assert(rM.x_block_size==128) rM.custom_block_size(-1,-1) assert(rM.x_block_size == rM.n_columns) assert(rM.y_block_size == rM.n_lines) rM.custom_block_size(1/2,1/3) assert(rM.x_block_size == np.ceil(1/2*rM.n_columns)) assert(rM.y_block_size == np.ceil(1/3*rM.n_lines)) rM.add_image(raster) assert(np.all(rM.get_random_block(random_state=12))== np.all(rM.get_random_block(random_state=12)))
# -*- coding: utf-8 -*- import unittest from shutil import copyfile import numpy as np from museotoolbox import processing from museotoolbox.datasets import load_historical_data from osgeo import gdal import os raster,vector = load_historical_data() rM = processing.RasterMath(raster) mask = processing.image_mask_from_vector(vector,raster,'/tmp/mask.tif') class TestRaster(unittest.TestCase): def test_convert_datatype(self): self._assert_np_gdt(np.dtype('uint8').name,gdal.GDT_Byte) self._assert_np_gdt(np.dtype('int16').name,gdal.GDT_Int16) self._assert_np_gdt(np.dtype('uint16').name,gdal.GDT_UInt16) self._assert_np_gdt(np.dtype('int32').name,gdal.GDT_Int32) self._assert_np_gdt(np.dtype('uint32').name,gdal.GDT_UInt32) self._assert_np_gdt(np.dtype('int64').name,gdal.GDT_Int32) self._assert_np_gdt(np.dtype('uint64').name,gdal.GDT_Int32) self._assert_np_gdt(np.dtype('uint16').name,gdal.GDT_UInt16) self._assert_np_gdt(np.dtype('float32').name,gdal.GDT_Float32) self._assert_np_gdt(np.dtype('float64').name,gdal.GDT_Float64) self._assert_np_gdt(gdal.GDT_Byte,np.uint8)
def test_get_parameter(self): rM = processing.RasterMath(raster) assert (isinstance(rM.get_raster_parameters(), dict)) rM.custom_raster_parameters(['TILED=NO']) assert (rM.get_raster_parameters() == ['TILED=NO'])