示例#1
0
def test_correct_geometries_cli(tmpdir):

    from rgitools.cli import correct_geometries

    rgi_dir = os.path.join(str(tmpdir), 'RGIV60')
    rgi_reg_dir = os.path.join(str(tmpdir), 'RGIV60', '06_rgi60_Iceland')
    mkdir(rgi_reg_dir)
    for e in ['.shp', '.prj', '.dbf', '.shx']:
        shutil.copyfile(get_demo_file('RGI6_icecap' + e),
                        os.path.join(rgi_reg_dir, '06_rgi60_Iceland' + e))
    out_dir = os.path.join(str(tmpdir), 'RGIV61')

    def replace(s):
        return s.replace('rgi60', 'rgi61')

    correct_geometries.run(rgi_dir, out_dir, replace_str=replace)
    outf = os.path.join(out_dir, '06_rgi61_Iceland', '06_rgi61_Iceland.shp')
    assert os.path.exists(outf)

    # All
    df = get_iceland_df()
    out = gpd.read_file(outf)
    assert len(out) == len(df)
    assert np.all(g.is_valid for g in out.geometry)
    assert np.any(out.check_geom != '')
示例#2
0
def test_hypsometries_cli(tmpdir):

    from rgitools.cli import compute_hypsometries, correct_geometries

    rgi_dir = os.path.join(str(tmpdir), 'RGIV60')
    rgi_reg_dir = os.path.join(str(tmpdir), 'RGIV60', '11_rgi60_Europe')
    mkdir(rgi_reg_dir)
    for e in ['.shp', '.prj', '.dbf', '.shx']:
        shutil.copyfile(get_demo_file('rgi_oetztal' + e),
                        os.path.join(rgi_reg_dir, '11_rgi60_Europe' + e))
    tmp_dir = os.path.join(str(tmpdir), 'RGIV61')

    def replace(s):
        return s.replace('rgi60', 'rgi61')

    correct_geometries.run(rgi_dir, tmp_dir, replace_str=replace)
    outf = os.path.join(tmp_dir, '11_rgi61_Europe', '11_rgi61_Europe.shp')
    assert os.path.exists(outf)

    # All
    df = gpd.read_file(get_demo_file('rgi_oetztal.shp'))
    out = gpd.read_file(outf)
    assert len(out) == len(df)
    assert np.all(g.is_valid for g in out.geometry)
    assert np.any(out.check_geom != '')

    out_dir = os.path.join(str(tmpdir), 'RGIV62')

    def replace(s):
        return s.replace('rgi61', 'rgi62')

    compute_hypsometries.run(tmp_dir,
                             out_dir,
                             replace_str=replace,
                             set_oggm_params=set_oggm_params)
    outf = os.path.join(out_dir, '11_rgi62_Europe', '11_rgi62_Europe.shp')
    assert os.path.exists(outf)
    outf = os.path.join(out_dir, '11_rgi62_Europe',
                        '11_rgi62_Europe_hypso.csv')
    assert os.path.exists(outf)
    outf = os.path.join(out_dir, '11_rgi62_Europe',
                        '11_rgi62_Europe_hypso.csv')
    assert os.path.exists(outf)
示例#3
0
def test_intersects_cli(tmpdir):

    from rgitools.cli import compute_intersects

    rgi_dir = os.path.join(str(tmpdir), 'RGIV60')
    rgi_reg_dir = os.path.join(str(tmpdir), 'RGIV60', '06_rgi60_Iceland')
    mkdir(rgi_reg_dir)
    for e in ['.shp', '.prj', '.dbf', '.shx']:
        shutil.copyfile(get_demo_file('RGI6_icecap' + e),
                        os.path.join(rgi_reg_dir, '06_rgi60_Iceland' + e))
    out_dir = os.path.join(str(tmpdir), 'RGIV60_intersects')
    compute_intersects.run(rgi_dir, out_dir)
    assert os.path.exists(
        os.path.join(out_dir, '06_rgi60_Iceland',
                     'intersects_06_rgi60_Iceland.shp'))
示例#4
0
def test_zip_cli(tmpdir):

    from rgitools.cli import zip_rgi_dir

    rgi_dir = os.path.join(str(tmpdir), 'rgi_61')
    outf = os.path.join(str(tmpdir), 'rgi_61')

    regdirs = ['06_rgi61_Iceland', '07_rgi61_Scandinavia']
    for regdir in regdirs:
        rgi_reg_dir = os.path.join(rgi_dir, regdir)
        mkdir(rgi_reg_dir)
        for e in ['.shp', '.prj', '.dbf', '.shx']:
            shutil.copyfile(get_demo_file('RGI6_icecap' + e),
                            os.path.join(rgi_reg_dir, '01_rgi61_Iceland' + e))

    zip_rgi_dir.run(rgi_dir, outf)

    assert os.path.exists(outf)
示例#5
0
def set_oggm_params(cfg):
    cfg.PATHS['dem_file'] = get_demo_file('srtm_oetztal.tif')
示例#6
0
 def set_oggm_params(cfg):
     cfg.PATHS['dem_file'] = get_demo_file('srtm_oetztal.tif')
     cfg.PARAMS['use_multiprocessing'] = False
示例#7
0
def test_hypsometry(tmpdir):

    from oggm.utils import rmsd

    rgi_df = gpd.read_file(get_demo_file('rgi_oetztal.shp'))
    rgi_df = rgi_df.loc[['_d' not in rid for rid in rgi_df.RGIId]]

    outf = os.path.join(str(tmpdir), 'rgi_62')

    # Make if fail somewhere
    from shapely.affinity import translate
    geo = rgi_df.iloc[0, -1]
    rgi_df.iloc[0, -1] = translate(geo, xoff=10)
    rgi_df.loc[1, 'RGIFlag'] = '2909'

    def set_oggm_params(cfg):
        cfg.PATHS['dem_file'] = get_demo_file('srtm_oetztal.tif')
        cfg.PARAMS['use_multiprocessing'] = False

    df, gdf = funcs.hypsometries(rgi_df,
                                 set_oggm_params=set_oggm_params,
                                 to_file=outf)

    assert np.all(df.loc[0, df.columns[3:]] == -9)
    assert np.all(df.loc[1, df.columns[3:]] == -9)
    assert not np.isfinite(gdf.loc[0, 'Aspect'])
    assert gdf.loc[1, 'Aspect'] == rgi_df.loc[1, 'Aspect']
    df = df.iloc[2:]
    assert np.all(df[df.columns[3:]].sum(axis=1) == 1000)

    gdf = gdf.iloc[2:]
    rgi_df = rgi_df.iloc[2:]

    assert rmsd(gdf['Zmed'], rgi_df['Zmed']) < 25
    assert rmsd(gdf['Zmin'], rgi_df['Zmin']) < 25
    assert rmsd(gdf['Zmax'], rgi_df['Zmax']) < 25
    assert rmsd(gdf['Slope'], rgi_df['Slope']) < 1

    # For aspect test for cos / sin  because of 0 360 thing
    us = np.cos(np.deg2rad(gdf.Aspect))
    ref = np.cos(np.deg2rad(rgi_df.Aspect))
    assert rmsd(us, ref) < 0.3
    us = np.sin(np.deg2rad(gdf.Aspect))
    ref = np.sin(np.deg2rad(rgi_df.Aspect))
    assert rmsd(us, ref) < 0.3

    ##
    df = pd.read_csv(outf + '_hypso.csv')
    gdf = gpd.read_file(outf + '.shp')

    assert np.all(df.loc[0, df.columns[3:]] == -9)
    assert np.all(df.loc[1, df.columns[3:]] == -9)
    assert not np.isfinite(gdf.loc[0, 'Aspect'])
    df = df.iloc[2:]
    assert np.all(df[df.columns[3:]].sum(axis=1) == 1000)

    gdf = gdf.iloc[2:]

    assert rmsd(gdf['Zmed'], rgi_df['Zmed']) < 25
    assert rmsd(gdf['Zmin'], rgi_df['Zmin']) < 25
    assert rmsd(gdf['Zmax'], rgi_df['Zmax']) < 25
    assert rmsd(gdf['Slope'], rgi_df['Slope']) < 1

    # For aspect test for cos / sin  because of 0 360 thing
    us = np.cos(np.deg2rad(gdf.Aspect))
    ref = np.cos(np.deg2rad(rgi_df.Aspect))
    assert rmsd(us, ref) < 0.3
    us = np.sin(np.deg2rad(gdf.Aspect))
    ref = np.sin(np.deg2rad(rgi_df.Aspect))
    assert rmsd(us, ref) < 0.3
示例#8
0
def get_iceland_df(reduced=False):

    df = gpd.read_file(get_demo_file('RGI6_icecap.shp'))
    if reduced:
        df = df.loc[(df.CenLon < -19.45) & (df.CenLat < 63.7)]
    return df