Example #1
0
def test_bounding_box():
    with pytest.raises(ValueError):  # west > east
        SoilGrids().get_coverage_data('phh2o', 'phh2o_0-5cm_mean', crs='urn:ogc:def:crs:EPSG::152160',
                                      west=1784000, south=1356000, east=-1140000, north=1863000, output='test.tif')

    with pytest.raises(ValueError):  # south>north
        SoilGrids().get_coverage_data('phh2o', 'phh2o_0-5cm_mean', crs='urn:ogc:def:crs:EPSG::152160',
                                      west=-1784000, south=1356000, east=-1140000, north=-1863000, output='test.tif')
Example #2
0
def main(service_id, coverage_id, crs, bbox, resx, resy, width, height, response_crs, output):
    west, south, east, north = list(map(float, bbox.split(',')))
    SoilGrids().get_coverage_data(service_id=service_id, coverage_id=coverage_id, crs=crs,
                                  west=west, south=south, east=east, north=north, output=output,
                                  resx=resx, resy=resy, width=width, height=height, response_crs=response_crs)
    if os.path.isfile(output):
        print('Done')
Example #3
0
def test_data_download(tmpdir):
    data = SoilGrids().get_coverage_data('phh2o', 'phh2o_0-5cm_mean', crs='urn:ogc:def:crs:EPSG::152160',
                                         west=-1784000, south=1356000, east=-1140000, north=1863000,
                                         output=os.path.join(tmpdir, 'test.tif'))

    assert isinstance(data, xarray.core.dataarray.DataArray)
    assert len(os.listdir(tmpdir)) == 1

    data2 = SoilGrids().get_coverage_data('phh2o', 'phh2o_0-5cm_mean', crs='urn:ogc:def:crs:EPSG::4326',
                                          west=-105.38, south=39.45, east=-104.5, north=40.07,
                                          width=316, height=275, output=os.path.join(tmpdir, 'test2.tif'))

    assert isinstance(data2, xarray.core.dataarray.DataArray)
    assert len(os.listdir(tmpdir)) == 2

    data3 = SoilGrids().get_coverage_data('phh2o', 'phh2o_0-5cm_mean', crs='urn:ogc:def:crs:EPSG::4326',
                                          west=-105.38, south=39.45, east=-104.5, north=40.07,
                                          response_crs='urn:ogc:def:crs:EPSG::152160',
                                          width=316, height=275, output=os.path.join(tmpdir, 'test3.tif'))

    assert isinstance(data3, xarray.core.dataarray.DataArray)
    assert len(os.listdir(tmpdir)) == 3
Example #4
0
def test_get_coverage_list():
    with pytest.raises(ValueError):
        SoilGrids().get_coverage_list('wrong_service_id')
Example #5
0
def test_response_crs():
    with pytest.raises(ValueError):
        SoilGrids().get_coverage_data('phh2o', 'phh2o_0-5cm_mean', crs='urn:ogc:def:crs:EPSG::4326',
                                      west=-1784000, south=1356000, east=-1140000, north=1863000,
                                      response_crs='error', output='test.tif')
Example #6
0
def test_width_height():
    with pytest.raises(ValueError):
        SoilGrids().get_coverage_data('phh2o', 'phh2o_0-5cm_mean', crs='urn:ogc:def:crs:EPSG::4326',
                                      west=-105.38, south=39.45, east=-104.5, north=40.07, output='test.tif')
Example #7
0
def test_output():
    with pytest.raises(ValueError):
        SoilGrids().get_coverage_data('phh2o', 'phh2o_0-5cm_mean', crs='urn:ogc:def:crs:EPSG::152160',
                                      west=-1784000, south=1356000, east=-1140000, north=1863000, output='wrong file')
Example #8
0
def test_crs():
    with pytest.raises(ValueError):
        SoilGrids().get_coverage_data('phh2o', 'phh2o_0-5cm_mean', crs='wrong code',
                                      west=-1784000, south=1356000, east=-1140000, north=1863000, output='test.tif')
Example #9
0
def test_coverage_id():
    with pytest.raises(ValueError):
        SoilGrids().get_coverage_data('phh2o', 'wrong id', crs='urn:ogc:def:crs:EPSG::152160',
                                      west=-1784000, south=1356000, east=-1140000, north=1863000, output='test.tif')
Example #10
0
def test_get_coverage_info():
    with pytest.raises(ValueError):
        SoilGrids().get_coverage_info('wrong_service_id', 'wrong_coverage_id')

    with pytest.raises(ValueError):
        SoilGrids().get_coverage_info('bdod', 'wrong_coverage_id')
Example #11
0
    def initialize(self, config_file: str) -> None:
        """Perform startup tasks for the model.
        Perform all tasks that take place before entering the model's time
        loop, including opening files and initializing the model state. Model
        inputs are read from a text-based configuration file, specified by
        `filename`.
        Parameters
        ----------
        config_file : str, optional
            The path to the model configuration file.
        Notes
        -----
        Models should be refactored, if necessary, to use a
        configuration file. CSDMS does not impose any constraint on
        how configuration files are formatted, although YAML is
        recommended. A template of a model's configuration file
        with placeholder values is used by the BMI.
        """
        if config_file:
            with open(config_file, "r") as fp:
                conf = yaml.safe_load(fp).get('bmi-soilgrids', {})
        else:
            conf = {
                'service_id': 'phh2o',
                'coverage_id': 'phh2o_0-5cm_mean',
                'crs': 'urn:ogc:def:crs:EPSG::152160',
                'west': -1784000,
                'south': 1356000,
                'east': -1140000,
                'north': 1863000,
                'output': 'test.tif'
            }

        soilgrids = SoilGrids()
        self._dataset = soilgrids.get_coverage_data(**conf)

        self._output_var_names = tuple([soilgrids.metadata['variable_name']])

        array = self._dataset[0].values
        self._grid = {
            0:
            BmiGridUniformRectilinear(
                shape=[int(dim) for dim in array.shape],
                yx_spacing=(
                    self._dataset.attrs['res'][1],
                    self._dataset.attrs['res'][0]),  # original res is (x,y)
                yx_of_lower_left=(self._dataset.coords['y'].values[-1],
                                  self._dataset.coords['x'].values[0]),
            ),
        }

        self._var[self._output_var_names[0]] = BmiVar(
            dtype=str(array.dtype),
            itemsize=array.itemsize,
            nbytes=array.nbytes,  # nbytes for current time step value
            units=soilgrids.metadata[
                "variable_units"],  # TODO: translate var name into CSDMS standard name
            location=
            "node",  # scalar value has no location on a grid (node, face, edge)
            grid=0,  # grid id number
        )