|
| 1 | +# GIS4WRF (https://doi.org/10.5281/zenodo.1288569) |
| 2 | +# Copyright (c) 2019 D. Meyer and M. Riechert. Licensed under MIT. |
| 3 | + |
| 4 | +import pytest |
| 5 | + |
| 6 | +from gis4wrf.core import ( |
| 7 | + CRS, LonLat, Coordinate2D |
| 8 | +) |
| 9 | + |
| 10 | +@pytest.mark.parametrize('crs_name', ['lonlat', 'lambert', 'mercator', 'polar', 'albers_nad83']) |
| 11 | +def test_geo_roundtrip(crs_name: str): |
| 12 | + if crs_name == 'lonlat': |
| 13 | + crs = CRS.create_lonlat() |
| 14 | + elif crs_name == 'lambert': |
| 15 | + crs = CRS.create_lambert(truelat1=3.5, truelat2=7, origin=LonLat(lon=4, lat=0)) |
| 16 | + elif crs_name == 'mercator': |
| 17 | + crs = CRS.create_mercator(truelat1=3.5, origin_lon=4) |
| 18 | + elif crs_name == 'polar': |
| 19 | + crs = CRS.create_polar(truelat1=3.5, origin_lon=4) |
| 20 | + elif crs_name == 'albers_nad83': |
| 21 | + crs = CRS.create_albers_nad83(truelat1=3.5, truelat2=7, origin=LonLat(lon=4, lat=0)) |
| 22 | + lonlat = LonLat(lon=10, lat=30) |
| 23 | + xy = crs.to_xy(lonlat) |
| 24 | + lonlat2 = crs.to_lonlat(xy) |
| 25 | + assert lonlat.lon == pytest.approx(lonlat2.lon) |
| 26 | + assert lonlat.lat == pytest.approx(lonlat2.lat) |
| 27 | + |
| 28 | +@pytest.mark.parametrize('crs_name', ['lambert', 'mercator', 'polar', 'albers_nad83']) |
| 29 | +def test_projection_origin(crs_name: str): |
| 30 | + origin_lonlat = LonLat(lon=4, lat=0) |
| 31 | + if crs_name == 'lambert': |
| 32 | + crs = CRS.create_lambert(truelat1=3.5, truelat2=7, origin=origin_lonlat) |
| 33 | + elif crs_name == 'mercator': |
| 34 | + crs = CRS.create_mercator(truelat1=3.5, origin_lon=origin_lonlat.lon) |
| 35 | + elif crs_name == 'polar': |
| 36 | + origin_lonlat = LonLat(lon=origin_lonlat.lon, lat=90) |
| 37 | + crs = CRS.create_polar(truelat1=3.5, origin_lon=origin_lonlat.lon) |
| 38 | + elif crs_name == 'albers_nad83': |
| 39 | + crs = CRS.create_albers_nad83(truelat1=3.5, truelat2=7, origin=origin_lonlat) |
| 40 | + origin_xy = crs.to_xy(origin_lonlat) |
| 41 | + assert origin_xy.x == pytest.approx(0) |
| 42 | + assert origin_xy.y == pytest.approx(0, abs=1e-9) |
0 commit comments