Exemplo n.º 1
0
    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)
Exemplo n.º 2
0
    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())
Exemplo n.º 3
0
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']