import math
+from typing import Optional
import fiona.crs
import fiona.transform
LON_LAT_CRS = fiona.crs.from_epsg(4326)
-def get_ele_from_raster(filename: str, lon_lat: LonLat, band: int = 1) -> float:
+def get_ele_from_raster(filename: str, lon_lat: LonLat, band: int = 1) -> Optional[float]:
"""
Examples of filenames:
* '/path/to/file.tif'
with rasterio.open(filename) as dataset:
xs, ys = fiona.transform.transform(LON_LAT_CRS, dataset.crs.to_proj4(), [lon_lat.lon], [lon_lat.lat])
xy_list = [(x, y) for x, y in zip(xs, ys)]
- ele = list(rasterio.sample.sample_gen(dataset, xy_list, band))
- return None if ele is None else float(ele[0])
+ ele = list(rasterio.sample.sample_gen(dataset, xy_list, band))[0]
+ return None if ele == dataset.nodata else float(ele)
class DemBase: