Пример #1
0
def test_from_scene_et_fraction_monthly_values(tol=0.0001):
    output_coll = interpolate.from_scene_et_fraction(
        scene_coll(['et_fraction', 'ndvi', 'time', 'mask']),
        start_date='2017-07-01',
        end_date='2017-08-01',
        variables=['et', 'et_reference', 'et_fraction', 'ndvi', 'count'],
        interp_args={
            'interp_method': 'linear',
            'interp_days': 32
        },
        model_args={
            'et_reference_source': 'IDAHO_EPSCOR/GRIDMET',
            'et_reference_band': 'etr',
            'et_reference_factor': 1.0,
            'et_reference_resample': 'nearest'
        },
        t_interval='monthly')

    TEST_POINT = (-121.5265, 38.7399)
    output = utils.point_coll_value(output_coll, TEST_POINT, scale=10)
    assert abs(output['ndvi']['2017-07-01'] - 0.6) <= tol
    assert abs(output['et_fraction']['2017-07-01'] - 0.4) <= tol
    assert abs(output['et_reference']['2017-07-01'] - 310.3) <= tol
    assert abs(output['et']['2017-07-01'] - (310.3 * 0.4)) <= tol
    # assert abs(output['et_reference']['2017-07-01'] - 303.622559) <= tol
    # assert abs(output['et']['2017-07-01'] - (303.622559 * 0.4)) <= tol
    assert output['count']['2017-07-01'] == 3
Пример #2
0
def test_from_scene_et_fraction_daily_et_reference_date_type_doy(tol=0.01):
    """Test interpolating a daily collection using a reference ET climatology"""
    output_coll = interpolate.from_scene_et_fraction(
        scene_coll(['et_fraction', 'ndvi', 'time', 'mask']),
        start_date='2017-07-01',
        end_date='2017-08-01',
        variables=['et_reference'],
        interp_args={
            'interp_method': 'linear',
            'interp_days': 32
        },
        model_args={
            'et_reference_source':
            'projects/usgs-ssebop/pet/gridmet_median_v1',
            'et_reference_band': 'etr',
            'et_reference_factor': 1.0,
            'et_reference_resample': 'nearest',
            'et_reference_date_type': 'doy'
        },
        t_interval='daily')

    TEST_POINT = (-121.5265, 38.7399)
    output = utils.point_coll_value(output_coll, TEST_POINT, scale=10)
    # pprint.pprint(output)
    assert abs(output['et_reference']['2017-07-01'] - 8.75) <= tol
Пример #3
0
def test_from_scene_et_fraction_values():
    img = ee.Image('LANDSAT/LC08/C01/T1_TOA/LC08_044033_20170716') \
        .select(['B2']).double().multiply(0)
    mask = img.add(1).updateMask(1).uint8()

    time1 = ee.Number(ee.Date.fromYMD(2017, 7, 8).millis())
    time2 = ee.Number(ee.Date.fromYMD(2017, 7, 16).millis())
    time3 = ee.Number(ee.Date.fromYMD(2017, 7, 24).millis())

    # Mask and time bands currently get added on to the scene collection
    #   and images are unscaled just before interpolating
    scene_coll = ee.ImageCollection([
        ee.Image([img.add(0.4), img.add(0.5), img.add(time1), mask]) \
            .rename(['et_fraction', 'ndvi', 'time', 'mask']) \
            .set({'system:index': 'LE07_044033_20170708',
                  'system:time_start': time1}),
        ee.Image([img.add(0.4), img.add(0.5), img.add(time2), mask]) \
            .rename(['et_fraction', 'ndvi', 'time', 'mask']) \
            .set({'system:index': 'LC08_044033_20170716',
                  'system:time_start': time2}),
        ee.Image([img.add(0.4), img.add(0.5), img.add(time3), mask]) \
            .rename(['et_fraction', 'ndvi', 'time', 'mask']) \
            .set({'system:index': 'LE07_044033_20170724',
                  'system:time_start': time3}),
        ])
    # pprint.pprint(utils.getinfo(scene_coll))

    etf_coll = interpolate.from_scene_et_fraction(
        scene_coll,
        start_date='2017-07-01',
        end_date='2017-07-31',
        variables=['et', 'et_reference', 'et_fraction', 'ndvi', 'count'],
        model_args={
            'et_reference_source': 'IDAHO_EPSCOR/GRIDMET',
            'et_reference_band': 'etr',
            'et_reference_resample': 'nearest'
        },
        t_interval='monthly',
        interp_method='linear',
        interp_days=32)

    TEST_POINT = (-121.5265, 38.7399)
    output = utils.point_coll_value(etf_coll, TEST_POINT, scale=10)
    # pprint.pprint(output)

    tol = 0.0001
    # print(output)
    assert abs(output['ndvi']['2017-07-01'] - 0.5) <= tol
    assert abs(output['et_fraction']['2017-07-01'] - 0.4) <= tol
    assert abs(output['et_reference']['2017-07-01'] - 303.622559) <= tol
    assert abs(output['et']['2017-07-01'] - (303.622559 * 0.4)) <= tol
    assert output['count']['2017-07-01'] == 3
Пример #4
0
def test_from_scene_et_fraction_t_interval_no_value():
    # Function should raise an Exception if t_interval is not set
    with pytest.raises(TypeError):
        output_coll = interpolate.from_scene_et_fraction(
            scene_coll(['et', 'time', 'mask']),
            start_date='2017-07-01',
            end_date='2017-08-01',
            variables=['et', 'et_reference', 'et_fraction', 'count'],
            interp_args={
                'interp_method': 'linear',
                'interp_days': 32
            },
            model_args={
                'et_reference_source': 'IDAHO_EPSCOR/GRIDMET',
                'et_reference_band': 'etr',
                'et_reference_factor': 0.5,
                'et_reference_resample': 'nearest'
            })