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
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, )
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)
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)")
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 == ""
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")
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
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
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()
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")
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"
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
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"
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)
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)" )
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
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