Fix nodata results.
authorPhilipp Spitzer <philipp@spitzer.priv.at>
Tue, 26 Jan 2021 21:59:23 +0000 (22:59 +0100)
committerPhilipp Spitzer <philipp@spitzer.priv.at>
Tue, 26 Jan 2021 21:59:23 +0000 (22:59 +0100)
wrpylib/wrdem.py

index 8e33ab0e3f65072161c9d5b5e6ef79b16809c561..ead79e1e4c2a65b86914ec8a81bba5957a383078 100644 (file)
@@ -1,4 +1,5 @@
 import math
+from typing import Optional
 
 import fiona.crs
 import fiona.transform
@@ -10,7 +11,7 @@ from wrpylib.wrvalidators import LonLat
 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'
@@ -21,8 +22,8 @@ def get_ele_from_raster(filename: str, lon_lat: LonLat, band: int = 1) -> float:
     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: