Пример #1
0
def test_transformer_group__unavailable():
    trans_group = TransformerGroup(4326, 2964)
    for transformer in trans_group.transformers:
        assert transformer.is_network_enabled == (
            os.environ.get("PROJ_NETWORK") == "ON")

    if grids_available("us_noaa_alaska.tif",
                       "ca_nrc_ntv2_0.tif",
                       check_all=True):
        assert len(trans_group.unavailable_operations) == 0
        assert len(trans_group.transformers) == 10
        assert (trans_group.transformers[0].description ==
                "Inverse of NAD27 to WGS 84 (85) + Alaska Albers")
        assert trans_group.best_available
    elif grids_available("us_noaa_alaska.tif"):
        assert len(trans_group.unavailable_operations) == 1
        assert (trans_group.transformers[0].description ==
                "Inverse of NAD27 to WGS 84 (85) + Alaska Albers")
        assert len(trans_group.transformers) == 9
        assert trans_group.best_available
    elif grids_available("ca_nrc_ntv2_0.tif"):
        assert len(trans_group.unavailable_operations) == 1
        assert (trans_group.transformers[0].description ==
                "Inverse of NAD27 to WGS 84 (7) + Alaska Albers")
        assert len(trans_group.transformers) == 9
        assert not trans_group.best_available
    else:
        assert len(trans_group.unavailable_operations) == 2
        assert (trans_group.unavailable_operations[0].name ==
                "Inverse of NAD27 to WGS 84 (85) + Alaska Albers")
        assert len(trans_group.transformers) == 8
        assert not trans_group.best_available
Пример #2
0
def test_transformer_group__download_grids__directory(
    get_user_data_dir_mock,
    download_mock,
    tmp_path,
    capsys,
):
    with proj_network_env():
        if pyproj._datadir._USE_GLOBAL_CONTEXT:
            pyproj.set_global_context_network(active=False)
        trans_group = TransformerGroup(4326, 2964, network=False)
        trans_group.download_grids(directory=tmp_path)
        get_user_data_dir_mock.assert_not_called()
        captured = capsys.readouterr()
        assert captured.out == ""
        if grids_available(
                "us_noaa_alaska.tif",
                "ca_nrc_ntv2_0.tif",
                check_network=False,
                check_all=True,
        ):
            download_mock.assert_not_called()
        elif grids_available("us_noaa_alaska.tif", check_network=False):
            download_mock.assert_called_with(
                file_url="https://cdn.proj.org/ca_nrc_ntv2_0.tif",
                short_name="ca_nrc_ntv2_0.tif",
                directory=tmp_path,
                verbose=False,
            )
        elif grids_available("ca_nrc_ntv2_0.tif", check_network=False):
            download_mock.assert_called_with(
                file_url="https://cdn.proj.org/us_noaa_alaska.tif",
                short_name="us_noaa_alaska.tif",
                directory=tmp_path,
                verbose=False,
            )
        else:
            download_mock.assert_has_calls(
                [
                    call(
                        file_url="https://cdn.proj.org/us_noaa_alaska.tif",
                        short_name="us_noaa_alaska.tif",
                        directory=tmp_path,
                        verbose=False,
                    ),
                    call(
                        file_url="https://cdn.proj.org/ca_nrc_ntv2_0.tif",
                        short_name="ca_nrc_ntv2_0.tif",
                        directory=tmp_path,
                        verbose=False,
                    ),
                ],
                any_order=True,
            )
Пример #3
0
def test_datum(proj_class):
    p1 = proj_class(proj="latlong", datum="WGS84")
    s_1 = -111.5
    s_2 = 45.25919444444
    p2 = proj_class(proj="utm", zone=10, datum="NAD27")
    with pytest.warns(DeprecationWarning):
        x2, y2 = transform(p1, p2, s_1, s_2)
    if grids_available("us_noaa_emhpgn.tif"):
        assert_almost_equal((x2, y2), (1402286.33, 5076292.30), decimal=2)
    elif grids_available("us_noaa_conus.tif"):
        assert_almost_equal((x2, y2), (1402285.98, 5076292.42), decimal=2)
    else:
        # https://github.com/OSGeo/PROJ/issues/1808
        assert_almost_equal((x2, y2), (1402288.54, 5076296.64), decimal=2)
Пример #4
0
def test_repr__conditional():
    trans_repr = repr(Transformer.from_crs(4326, 26917))
    if grids_available(
            "ca_nrc_NA83SCRS.tif",
            "us_noaa_FL.tif",
            "us_noaa_MD.tif",
            "us_noaa_TN.tif",
            "us_noaa_gahpgn.tif",
            "us_noaa_kyhpgn.tif",
            "us_noaa_mihpgn.tif",
            "us_noaa_nchpgn.tif",
            "us_noaa_nyhpgn.tif",
            "us_noaa_ohhpgn.tif",
            "us_noaa_pahpgn.tif",
            "us_noaa_schpgn.tif",
            "us_noaa_vahpgn.tif",
            "us_noaa_wvhpgn.tif",
    ):
        assert trans_repr == (
            "<Unknown Transformer: unknown>\n"
            "Description: unavailable until proj_trans is called\n"
            "Area of Use:\n- undefined")
    else:
        assert trans_repr == (
            "<Concatenated Operation Transformer: pipeline>\n"
            "Description: Inverse of NAD83 to WGS 84 (1) + UTM zone 17N\n"
            "Area of Use:\n"
            "- name: North America - Canada and USA (CONUS, Alaska mainland)\n"
            "- bounds: (-172.54, 23.81, -47.74, 86.46)")
Пример #5
0
def test_sync__download_grids(parse_args_mock, tmp_path, capsys):
    parse_args_mock.return_value = argparse.Namespace(
        bbox=None,
        list_files=False,
        file="us_noaa_alaska",
        all=False,
        source_id=None,
        area_of_use=None,
        verbose=True,
        target_directory=str(tmp_path),
        system_directory=False,
        spatial_test="intersects",
        exclude_world_coverage=False,
        include_already_downloaded=False,
    )
    main()
    captured = capsys.readouterr()
    paths = sorted(Path(path).name for path in glob(str(tmp_path.joinpath("*"))))
    if grids_available("us_noaa_alaska.tif", check_network=False):
        assert paths == ["files.geojson"]
        assert captured.out == ""
    else:
        assert paths == ["files.geojson", "us_noaa_alaska.tif"]
        assert captured.out == "Downloading: https://cdn.proj.org/us_noaa_alaska.tif\n"
    # make sure not downloaded again
    with proj_env():
        append_data_dir(str(tmp_path))
        main()
        captured = capsys.readouterr()
        assert captured.out == ""
Пример #6
0
def test_transform_group__area_of_interest():
    if not grids_available("ca_nrc_ntv2_0.tif"):
        with pytest.warns(
                UserWarning,
                match=
                "Best transformation is not available due to missing Grid",
        ):
            trans_group = pyproj.transformer.TransformerGroup(
                4326,
                2964,
                area_of_interest=pyproj.transformer.AreaOfInterest(
                    -136.46, 49.0, -60.72, 83.17),
            )
        assert (trans_group.transformers[0].description ==
                "Inverse of NAD27 to WGS 84 (13) + Alaska Albers")
    else:
        trans_group = pyproj.transformer.TransformerGroup(
            4326,
            2964,
            area_of_interest=pyproj.transformer.AreaOfInterest(
                -136.46, 49.0, -60.72, 83.17),
        )
        assert trans_group.best_available
        assert (trans_group.transformers[0].description ==
                "Inverse of NAD27 to WGS 84 (33) + Alaska Albers")
Пример #7
0
def test_transformer_group__network_disabled():
    with proj_network_env():
        if pyproj._datadir._USE_GLOBAL_CONTEXT:
            pyproj.network.set_network_enabled(active=False)
        trans_group = TransformerGroup(4326, 2964, network=False)
        for transformer in trans_group.transformers:
            assert transformer.is_network_enabled is False

        if grids_available(
            "us_noaa_alaska.tif",
            "ca_nrc_ntv2_0.tif",
            check_network=False,
            check_all=True,
        ):
            assert len(trans_group.unavailable_operations) == 0
            assert len(trans_group.transformers) == 10
            assert (
                trans_group.transformers[0].description
                == "Inverse of NAD27 to WGS 84 (85) + Alaska Albers"
            )
            assert trans_group.best_available
        elif grids_available("us_noaa_alaska.tif", check_network=False):
            assert len(trans_group.unavailable_operations) == 1
            assert (
                trans_group.transformers[0].description
                == "Inverse of NAD27 to WGS 84 (85) + Alaska Albers"
            )
            assert len(trans_group.transformers) == 9
            assert trans_group.best_available
        elif grids_available("ca_nrc_ntv2_0.tif", check_network=False):
            assert len(trans_group.unavailable_operations) == 1
            assert (
                trans_group.transformers[0].description
                == "Inverse of NAD27 to WGS 84 (7) + Alaska Albers"
            )
            assert len(trans_group.transformers) == 9
            assert not trans_group.best_available
        else:
            assert len(trans_group.unavailable_operations) == 2
            assert (
                trans_group.unavailable_operations[0].name
                == "Inverse of NAD27 to WGS 84 (85) + Alaska Albers"
            )
            assert len(trans_group.transformers) == 8
            assert not trans_group.best_available
Пример #8
0
def test_transformer_group__get_transform_crs():
    tg = TransformerGroup("epsg:4258", "epsg:7415")
    if LooseVersion(pyproj.__proj_version__) >= LooseVersion("6.3.1"):
        if not grids_available("nl_nsgi_rdtrans2018.tif"):
            assert len(tg.transformers) == 1
        else:
            assert len(tg.transformers) == 2
    else:
        assert len(tg.transformers) == 4
Пример #9
0
def test_transformer_group__download_grids(get_user_data_dir_mock, tmp_path, capsys):
    get_user_data_dir_mock.return_value = str(tmp_path)
    with proj_network_env():
        if pyproj._datadir._USE_GLOBAL_CONTEXT:
            pyproj.network.set_network_enabled(active=False)
        trans_group = TransformerGroup(4326, 2964, network=False)
        trans_group.download_grids(verbose=True)
        captured = capsys.readouterr()
        get_user_data_dir_mock.assert_called_with(True)
        paths = sorted(Path(path).name for path in glob(str(tmp_path.joinpath("*"))))
        if grids_available(
            "us_noaa_alaska.tif",
            "ca_nrc_ntv2_0.tif",
            check_network=False,
            check_all=True,
        ):
            assert paths == []
            assert captured.out == ""
        elif grids_available("us_noaa_alaska.tif", check_network=False):
            assert paths == ["ca_nrc_ntv2_0.tif"]
            assert (
                captured.out == "Downloading: https://cdn.proj.org/ca_nrc_ntv2_0.tif\n"
            )
        elif grids_available("ca_nrc_ntv2_0.tif", check_network=False):
            assert paths == ["us_noaa_alaska.tif"]
            assert captured.out == (
                "Downloading: https://cdn.proj.org/us_noaa_alaska.tif\n"
            )
        else:
            assert paths == ["ca_nrc_ntv2_0.tif", "us_noaa_alaska.tif"]
            assert captured.out == (
                "Downloading: https://cdn.proj.org/us_noaa_alaska.tif\n"
                "Downloading: https://cdn.proj.org/ca_nrc_ntv2_0.tif\n"
            )
        # make sure not downloaded again
        with proj_env(), patch(
            "pyproj.transformer._download_resource_file"
        ) as download_mock:
            append_data_dir(str(tmp_path))
            trans_group = TransformerGroup(4326, 2964, network=False)
            trans_group.download_grids()
            get_user_data_dir_mock.assert_called_with(True)
            download_mock.assert_not_called()
Пример #10
0
def test_transformer_proj__area_of_interest():
    transformer = Transformer.from_proj(4326,
                                        2964,
                                        area_of_interest=AreaOfInterest(
                                            -136.46, 49.0, -60.72, 83.17))
    if not grids_available("ca_nrc_ntv2_0.tif"):
        assert (transformer.description ==
                "Inverse of NAD27 to WGS 84 (13) + Alaska Albers")
    else:
        assert (transformer.description ==
                "Inverse of NAD27 to WGS 84 (33) + Alaska Albers")
Пример #11
0
def test_transform_wgs84_to_alaska():
    with pytest.warns(FutureWarning):
        lat_lon_proj = pyproj.Proj(init="epsg:4326", preserve_units=False)
        alaska_aea_proj = pyproj.Proj(init="epsg:2964", preserve_units=False)
    test = (-179.72638, 49.752533)
    with pytest.warns(DeprecationWarning):
        xx, yy = pyproj.transform(lat_lon_proj, alaska_aea_proj, *test)
    if grids_available("us_noaa_alaska.tif"):
        assert f"{xx:.3f} {yy:.3f}" == "-1824924.495 330822.800"
    else:
        assert f"{xx:.3f} {yy:.3f}" == "-1825155.697 330730.391"
Пример #12
0
def test_transformer_group__unavailable():
    trans_group = TransformerGroup(4326, 2964)
    if not grids_available("ntv2_0.gsb", "ca_nrc_ntv2_0.tif"):
        assert len(trans_group.unavailable_operations) == 1
        assert (trans_group.unavailable_operations[0].name ==
                "Inverse of NAD27 to WGS 84 (33) + Alaska Albers")
        assert len(trans_group.transformers) == 8
        assert trans_group.best_available
    else:
        assert len(trans_group.unavailable_operations) == 0
        assert len(trans_group.transformers) == 9
        assert trans_group.best_available
Пример #13
0
def test_coordinate_operation_grids__alternative_grid_name():
    cc = CoordinateOperation.from_epsg(1312, True)
    assert len(cc.grids) == 1
    grid = cc.grids[0]
    assert grid.direct_download is True
    assert grid.open_license is True
    assert grid.short_name == "ca_nrc_ntv1_can.tif"
    if grids_available(grid.short_name):
        assert grid.available is True
        assert grid.full_name.endswith(grid.short_name)
    else:
        assert grid.available is False
        assert grid.full_name == ""
    assert grid.package_name == ""
    assert grid.url == "https://cdn.proj.org/ca_nrc_ntv1_can.tif"
Пример #14
0
def test_datum(proj_class):
    p1 = proj_class(proj="latlong", datum="WGS84")
    s_1 = -111.5
    s_2 = 45.25919444444
    p2 = proj_class(proj="utm", zone=10, datum="NAD27")
    with pytest.warns(DeprecationWarning):
        x2, y2 = transform(p1, p2, s_1, s_2)
    if LooseVersion(__proj_version__) < LooseVersion("6.3.0"):
        assert_almost_equal(
            (x2, y2), (1402291.0833290431, 5076289.591846835), decimal=2
        )
    else:
        if grids_available("ca_nrc_ntv2_0.tif"):
            assert_almost_equal((x2, y2), (1402286.3333203, 5076292.2955777), decimal=2)
        else:
            # https://github.com/OSGeo/PROJ/issues/1808
            assert_almost_equal((x2, y2), (1402285.9829252, 5076292.4212746), decimal=2)
Пример #15
0
def test_repr__conditional():
    trans_repr = repr(Transformer.from_crs(4326, 26917))
    if grids_available(
        "ca_nrc_NA83SCRS.tif",
        "us_noaa_FL.tif",
        "us_noaa_MD.tif",
        "us_noaa_TN.tif",
        "us_noaa_gahpgn.tif",
        "us_noaa_kyhpgn.tif",
        "us_noaa_mihpgn.tif",
        "us_noaa_nchpgn.tif",
        "us_noaa_nyhpgn.tif",
        "us_noaa_ohhpgn.tif",
        "us_noaa_pahpgn.tif",
        "us_noaa_schpgn.tif",
        "us_noaa_vahpgn.tif",
        "us_noaa_wvhpgn.tif",
    ):
        assert trans_repr == (
            "<Unknown Transformer: unknown>\n"
            "Description: unavailable until proj_trans is called\n"
            "Area of Use:\n- undefined"
        )
    else:
        assert trans_repr == (
            "<Concatenated Operation Transformer: pipeline>\n"
            "Description: Inverse of NAD83 to WGS 84 (1) + UTM zone 17N\n"
            "Area of Use:\n"
            "- name: North America - onshore and offshore: Canada - Alberta;"
            " British Columbia; Manitoba; New Brunswick; "
            "Newfoundland and Labrador; Northwest Territories; "
            "Nova Scotia; Nunavut; Ontario; Prince Edward Island; Quebec; "
            "Saskatchewan; Yukon. United States (USA) - Alabama; "
            "Alaska (mainland); Arizona; Arkansas; California; Colorado; "
            "Connecticut; Delaware; Florida; Georgia; Idaho; Illinois; "
            "Indiana; Iowa; Kansas; Kentucky; Louisiana; Maine; Maryland; "
            "Massachusetts; Michigan; Minnesota; Mississippi; Missouri; "
            "Montana; Nebraska; Nevada; New Hampshire; New Jersey; "
            "New Mexico; New York; North Carolina; North Dakota; Ohio; "
            "Oklahoma; Oregon; Pennsylvania; Rhode Island; South Carolina; "
            "South Dakota; Tennessee; Texas; Utah; Vermont; Virginia; "
            "Washington; West Virginia; Wisconsin; Wyoming.\n"
            "- bounds: (-172.54, 23.81, -47.74, 86.46)"
        )
Пример #16
0
def test_transform_group__missing_best():
    with pytest.warns(FutureWarning):
        lat_lon_proj = pyproj.Proj(init="epsg:4326", preserve_units=False)
        alaska_aea_proj = pyproj.Proj(init="epsg:2964", preserve_units=False)

    if not grids_available("ca_nrc_ntv2_0.tif"):
        with pytest.warns(
                UserWarning,
                match=
                "Best transformation is not available due to missing Grid",
        ):
            trans_group = pyproj.transformer.TransformerGroup(
                lat_lon_proj.crs, alaska_aea_proj.crs)

        assert not trans_group.best_available
        assert "ntv2_0" not in trans_group.transformers[0].definition
        assert "ntv2_0" in trans_group.unavailable_operations[0].to_proj4()
    else:
        # assuming all grids avaiable or PROJ_NETWORK=ON
        trans_group = pyproj.transformer.TransformerGroup(
            lat_lon_proj.crs, alaska_aea_proj.crs)
        assert trans_group.best_available
        assert "ntv2_0" in trans_group.transformers[0].definition
Пример #17
0
def test_transformer_group__get_transform_crs():
    tg = TransformerGroup("epsg:4258", "epsg:7415")
    if not grids_available("nl_nsgi_rdtrans2018.tif"):
        assert len(tg.transformers) == 1
    else:
        assert len(tg.transformers) == 2