diff --git a/herbie/accessors.py b/herbie/accessors.py index 64a98f97..a77b0614 100644 --- a/herbie/accessors.py +++ b/herbie/accessors.py @@ -107,6 +107,19 @@ def center(self): self._center = (float(lon.mean()), float(lat.mean())) return self._center + def to_180(self): + """Wrap longitude coordinates as range [-180,180].""" + ds = self._obj + ds["longitude"] = (ds["longitude"] + 180) % 360 - 180 + return ds + + def to_360(self): + """Wrap longitude coordinates as range [0,360].""" + ds = self._obj + ds["longitude"] = (ds["longitude"] - 360) % 360 + return ds + + @functools.cached_property def crs(self): """ diff --git a/tests/test_accessors.py b/tests/test_accessors.py index 7b424e13..f375dd71 100644 --- a/tests/test_accessors.py +++ b/tests/test_accessors.py @@ -4,7 +4,7 @@ """ from herbie import Herbie - +import xarray as xr def test_crs(): H = Herbie( @@ -16,6 +16,15 @@ def test_crs(): crs = ds.herbie.crs assert crs +def test_to_180(): + z = xr.Dataset({"longitude": [0, 90, 180, 270, 360]}) + z = z.herbie.to_180() + assert all(z["longitude"] == [0, 90, -180, -90, 0]) + +def test_to_360(): + z = xr.Dataset({"longitude": [-90, -180, 0, 90, 180]}) + z = z.herbie.to_360() + assert all(z["longitude"] == [270, 180, 0, 90, 180]) def test_polygon(): H = Herbie(