Source code for bmi_geotiff.io
"""Access GeoTIFF files."""
import rioxarray
from rasterio.crs import CRS
[docs]
class GeoTiff:
"""Access data and metadata in a GeoTIFF file."""
def __init__(self, filename=None):
"""Make a GeoTiff object.
Parameters
----------
filename : str, optional
Path or URL to the file to open.
"""
self._filename = None
self._da = None
if filename is not None:
self.open(filename)
@property
def filename(self):
return self._filename
@property
def da(self):
return self._da
[docs]
def open(self, filename):
"""Load a GeoTIFF file into an xarray DataArray.
Parameters
----------
filename : str
Path or URL to the file to open.
"""
self._filename = filename
self._da = rioxarray.open_rasterio(self._filename)
try:
band = self._da.squeeze("band")
except ValueError:
pass
else:
self._da = band
crs = CRS.from_wkt(self._da.spatial_ref.crs_wkt)
if crs.is_projected:
self._da.attrs["units"] = crs.linear_units
else:
self._da.attrs["units"] = "degrees"