def fp(size1, scale1, offset1, offset_factor2): tl = TIF_FP.tl + [offset1, offset1] * np.asarray(offset_factor2) size = [size1, size1] rsize = (size / np.asarray(scale1)).astype(int) assert (size == rsize * scale1).all() fp = Footprint(tl=tl, size=size, rsize=np.abs(rsize)) return fp
def rast(ds, driver, band_count, dtype, src_nodata): """Fixture for the datasource creation""" fp = Footprint( tl=(100, 110), size=(10, 10), rsize=(10, 10) ) if driver == 'numpy': rast = ds.awrap_numpy_raster( fp, np.empty(np.r_[fp.shape, band_count], dtype=dtype), band_schema=dict(nodata=src_nodata), sr=None, mode='w', ) elif driver == 'MEM': rast = ds.acreate_raster( '', fp, dtype, band_count, band_schema=dict(nodata=src_nodata), driver='MEM', ) else: path = '{}/{}.tif'.format(tempfile.gettempdir(), uuid.uuid4()) rast = ds.acreate_raster( path, fp, dtype, band_count, band_schema=dict(nodata=src_nodata), driver=driver ) yield rast if driver in {'numpy', 'MEM'}: rast.close() else: rast.delete()
def _footprint_of_letters(letters): tl = tl_of_letter[letters[0]] br = br_of_letter[letters[-1]] diagvec = br - tl fp = Footprint( tl=tl, size=np.abs(diagvec), rsize=(diagvec / reso) ) return fp
'cv_nearest': 0, 'cv_cubic': 1, # Massive spikes near borders. Nodata holes near topleft borders. 'cv_lanczos4': 3, # Nodata holes near topleft borders. } INTERPOLATIONS_OUTSIDE_UNCERTAINTY_BORDER = { 'cv_area': 1, 'cv_linear': 1, 'cv_nearest': 2, 'cv_cubic': 2, 'cv_lanczos4': 2, } # CONSTANTS - TIF GENERATION ******************************************************************** ** TIF_NODATA = 200 TIF_FP = Footprint( tl=(100, 110), size=(10, 10), rsize=(10, 10) ) TIF_VALUES = np.add(*TIF_FP.meshgrid_raster).astype('float32') TIF_VALUES[:1] = TIF_NODATA TIF_VALUES[:, :2] = TIF_NODATA XS, YS = TIF_FP.meshgrid_spatial TIF_DATAMASK = TIF_VALUES != TIF_NODATA TIF_DATA_MAXY = YS[TIF_DATAMASK].max() TIF_DATA_MINY = YS[TIF_DATAMASK].min() TIF_DATA_MAXX = XS[TIF_DATAMASK].max() TIF_DATA_MINX = XS[TIF_DATAMASK].min() TIF_MAXY = YS.max() TIF_MINY = YS.min() TIF_MAXX = XS.max() TIF_MINX = XS.min()
'MEM': True, } TESTS = [ dict( # Classic dsm subtests=[ dict(driver='GTiff', ext='.tif', options=[]), dict(driver='MEM', options=[]), dict(driver='numpy'), ], dtype='float32', band_count=1, band_schema= {'nodata': [-32767]}, sr=SR1['wkt'], fp=Footprint(tl=(0, 10), size=(10, 10), rsize=(30, 30)), ), dict( # Classic rgb subtests=[ dict(driver='GTiff', ext='.tif', options=[]), dict(driver='MEM', options=[]), dict(driver='numpy'), ], dtype='uint8', band_count=3, band_schema= {}, sr=SR1['wkt'], fp=Footprint(tl=(0, 10), size=(10, 10), rsize=(30, 30)), ),
def queryfp(tl, size, reso): rsize = (size / reso).astype(int) assert (size == rsize * reso).all() fp = Footprint(tl=tl, size=size, rsize=np.abs(rsize)) return fp
from buzzard.test import tools LOGGER = logging.getLogger('buzzard') # CONSTANTS - TEST ********************************************************** ** READ_TOL = 0.032 # Tolerance in adjacent differences differences WRITE_TOL = 0.7 # Tolerance in adjacent differences differences PRECISION = 6 # CONSTANTS - TIF GENERATION ************************************************ ** TIF_NODATA = -99 TIF_SIDE = 10 TIF_NODATA_BORDER_SIZE = (2, 0, 1, 0) TIF_FP = (Footprint(tl=(100 + 0, 100 + TIF_SIDE), size=(TIF_SIDE, TIF_SIDE), rsize=(TIF_SIDE, TIF_SIDE))) TIF_DATA_START_LEFT = np.around( TIF_FP.lx + TIF_NODATA_BORDER_SIZE[0] * TIF_FP.pxvec[0], PRECISION) TIF_DATA_LAST_RIGHT = (np.around( TIF_FP.rx - (TIF_NODATA_BORDER_SIZE[1] + 1.) * TIF_FP.pxvec[0], PRECISION)) TIF_DATA_START_TOP = (np.around( TIF_FP.ty + TIF_NODATA_BORDER_SIZE[2] * TIF_FP.pxvec[1], PRECISION)) TIF_DATA_LAST_BOTTOM = (np.around( TIF_FP.by - (TIF_NODATA_BORDER_SIZE[3] + 1.) * TIF_FP.pxvec[1], PRECISION)) # CONSTANTS - CORNERS DEFINITION ******************************************** ** Corner = collections.namedtuple('Corner', ['name', 'x', 'y', 'offset_sign']) TL_CORNER = Corner('tl', TIF_FP.tlx, TIF_FP.tly, np.array([1., -1.])) ALL_CORNERS = [ TL_CORNER,