def lonlat_to_xy(longitude: xr.DataArray, latitude: xr.DataArray, epsg: int = 3031) -> (xr.DataArray, xr.DataArray): """ Reprojects longitude/latitude EPSG:4326 coordinates to x/y coordinates. Default conversion is to Antarctic Stereographic Projection EPSG:3031. """ if hasattr(longitude, "__array__") and callable(longitude.__array__): # TODO upgrade to PyProj 3.0 to remove this workaround for passing in # dask.dataframe.core.Series or xarray.DataArray objects # Based on https://github.com/pyproj4/pyproj/pull/625 _longitude = longitude.__array__() _latitude = latitude.__array__() x, y = pyproj.Proj(projparams=epsg)(_longitude, _latitude) if hasattr(longitude, "coords"): return ( xr.DataArray(data=x, coords=longitude.coords), xr.DataArray(data=y, coords=latitude.coords), ) else: return x, y