def test_ggb_shape_from_h5_dataset(self): img, geobox = ut.create_test_image() with h5py.File('tmp.h5', driver='core', backing_store=False) as fid: ds = fid.create_dataset('test', data=img) ds.attrs['geotransform'] = geobox.transform.to_gdal() ds.attrs['crs_wkt'] = geobox.crs.ExportToWkt() new_geobox = GriddedGeoBox.from_h5_dataset(ds) self.assertTrue(new_geobox.shape == img.shape)
def test_ggb_crs_from_h5_dataset(self): img, geobox = ut.create_test_image() with h5py.File("tmp.h5", "w", driver="core", backing_store=False) as fid: ds = fid.create_dataset("test", data=img) ds.attrs["geotransform"] = geobox.transform.to_gdal() ds.attrs["crs_wkt"] = geobox.crs.ExportToWkt() new_geobox = GriddedGeoBox.from_h5_dataset(ds) self.assertTrue(new_geobox.crs.ExportToWkt() == geobox.crs.ExportToWkt())
def get_pixel(filename, dataset_name, lonlat): """Return a pixel from `filename` at the longitude and latitude given by the tuple `lonlat`. Optionally, the `band` can be specified.""" with h5py.File(filename, 'r') as fid: ds = fid[dataset_name] geobox = GriddedGeoBox.from_h5_dataset(ds) x, y = [int(v) for v in ~geobox.transform * lonlat] # TODO; read metadata yaml for uuid if ds.ndim == 3: data = ds[:, y, x] elif ds.ndim == 2: data = ds[y, x] else: raise NotImplementedError("Only 2 and 3 dimensional data is supported") # else: TODO; cater for the 4D data we pulled from ECMWF # for 4D [day, level, y, x] we need another input param `day` # data = ds[day, :, y, x] metadata = current_h5_metadata(fid, dataset_path=dataset_name) return data, metadata['id']