def test_bilinear_interpolation(self): lats = [89.6] lons = [-179.7] z = backend._get_elevation_from_path(lats, lons, ETOPO1_GEOTIFF_PATH, "bilinear") assert pytest.approx(z[0]) == self._interp_bilinear( 0.4, 0.3, self.geotiff_z[:2, :2])
def test_nodata_is_nan(self): # EU-dem has NODATA over water. lat = [44.969186] lon = [-3.152424] z = backend._get_elevation_from_path([lat], [lon], EUDEM_TILE_PATH, interpolation="nearest") assert np.isnan(z)
def test_error_outside_dataset(self): lats = [0, 0, -90.1, 90.1] lons = [-180.1, 180.1, 0, 0] for lat, lon in zip(lats, lons): with pytest.raises(backend.InputError): z = backend._get_elevation_from_path([lat], [lon], ETOPO1_GEOTIFF_PATH, interpolation="lanczos")
def test_none_outside_dataset(self): lats = [0, 0, -90.1, 90.1] lons = [-180.1, 180.1, 0, 0] for lat, lon in zip(lats, lons): z = backend._get_elevation_from_path([lat], [lon], ETOPO1_GEOTIFF_PATH, interpolation="lanczos")[0] assert z is None
def test_single_file_dataset(self): lats = [0.1, -9] lons = [-50.5, 12.11] interpolation = "cubic" dataset = config.load_datasets()[ETOPO1_DATASET_NAME] elevations_by_dataset = backend.get_elevation(lats, lons, dataset, interpolation) elevations_by_path = backend._get_elevation_from_path( lats, lons, ETOPO1_GEOTIFF_PATH, interpolation) assert elevations_by_dataset == elevations_by_path
def test_valid_read_from_dataset_with_nans(self): """ Array looks like [[ 2, 1, 0], [ 3, 9999, 9999], [ 4, 9999, 9999] with NODATA=9999 set on the GEOTIFF, bounds from 0-2 lat and lon. """ lat = 0 lon = 0 z = backend._get_elevation_from_path([lat], [lon], NODATA_DATASET_PATH, "bilinear") assert z[0] == 4
def test_invalid_cubic_nodata(self): lat = 0 lon = 2 z = backend._get_elevation_from_path([lat], [lon], NODATA_DATASET_PATH, "cubic") assert np.isnan(z[0])
def test_invalid_bilinear_next_to_nodata(self): lat = 1 lon = 0.5 z = backend._get_elevation_from_path([lat], [lon], NODATA_DATASET_PATH, "bilinear") assert np.isnan(z[0])
def test_valid_nearest_next_to_nodata(self): lat = 1 lon = 0.49 z = backend._get_elevation_from_path([lat], [lon], NODATA_DATASET_PATH, "nearest") assert z[0] == 3
def test_nodata_read_from_dataset_with_nans(self): lat = 0 lon = 2 z = backend._get_elevation_from_path([lat], [lon], NODATA_DATASET_PATH, "bilinear") assert np.isnan(z[0])
def test_nearest_interpolation(self): lats = [89.51] lons = [-179.51] z = backend._get_elevation_from_path(lats, lons, ETOPO1_GEOTIFF_PATH, "nearest") assert z[0] == self.geotiff_z[0, 0]
def test_read_lr_corner(self): lats = [-90] lons = [180] z = backend._get_elevation_from_path(lats, lons, ETOPO1_GEOTIFF_PATH, "bilinear") assert z[0] == self.geotiff_z[-1, -1]
def test_all_interpolation_methods(self): lats = [0.5] lons = [0.4] for method in backend.INTERPOLATION_METHODS.keys(): backend._get_elevation_from_path(lats, lons, ETOPO1_GEOTIFF_PATH, method)