def test_numpy_equals_dask(): attrs = {'res': (10.0, 10.0)} small_numpy_based_data_array = xr.DataArray(elevation, attrs=attrs) dask_data = da.from_array(elevation, chunks=(3, 3)) small_das_based_data_array = xr.DataArray(dask_data, attrs=attrs) numpy_result = hillshade(small_numpy_based_data_array, name='numpy') dask_result = hillshade(small_das_based_data_array, name='dask') dask_result.data = dask_result.data.compute() assert np.isclose(numpy_result, dask_result, equal_nan=True).all()
def test_hillshade_gpu_equals_cpu(): import cupy small_da = xr.DataArray(elevation, attrs={'res': (10.0, 10.0)}) cpu = hillshade(small_da, name='numpy_result') small_da_cupy = xr.DataArray(cupy.asarray(elevation), attrs={'res': (10.0, 10.0)}) gpu = hillshade(small_da_cupy, name='cupy_result') general_output_checks(small_da_cupy, gpu) assert np.isclose(cpu.data, gpu.data.get(), equal_nan=True).all()
def test_hillshade_gpu_equals_cpu(): import cupy small_da = xr.DataArray(elevation, attrs={'res': (10.0, 10.0)}) cpu = hillshade(small_da, name='numpy_result') small_da_cupy = xr.DataArray(cupy.asarray(elevation), attrs={'res': (10.0, 10.0)}) gpu = hillshade(small_da_cupy, name='cupy_result') assert isinstance(gpu.data, cupy.ndarray) assert np.isclose(cpu, gpu, equal_nan=True).all()
def test_hillshade_cpu(): attrs = {'res': (10.0, 10.0)} small_numpy_based_data_array = xr.DataArray(elevation, attrs=attrs) numpy_result = hillshade(small_numpy_based_data_array, name='numpy') dask_data = da.from_array(elevation, chunks=(3, 3)) small_das_based_data_array = xr.DataArray(dask_data, attrs=attrs) dask_result = hillshade(small_das_based_data_array, name='dask') general_output_checks(small_das_based_data_array, dask_result) np.testing.assert_allclose(numpy_result.data, dask_result.data.compute(), equal_nan=True)
def create_map2(): global cvs global terrain global water global trees img = stack(shade(terrain, cmap=['black', 'white'], how='linear')) yield img.to_pil() img = stack(shade(terrain, cmap=Elevation, how='linear')) yield img.to_pil() img = stack( shade(terrain, cmap=Elevation, how='linear'), shade(hillshade(terrain, azimuth=210), cmap=['black', 'white'], how='linear', alpha=128), ) yield img.to_pil() img = stack( shade(terrain, cmap=Elevation, how='linear'), shade(water, cmap=['aqua', 'white']), shade(hillshade(terrain, azimuth=210), cmap=['black', 'white'], how='linear', alpha=128), ) yield img.to_pil() img = stack( shade(terrain, cmap=Elevation, how='linear'), shade(water, cmap=['aqua', 'white']), shade(hillshade(terrain + trees, azimuth=210), cmap=['black', 'white'], how='linear', alpha=128), shade(tree_colorize, cmap='limegreen', how='linear')) yield img.to_pil() yield img.to_pil() yield img.to_pil() yield img.to_pil()
def test_hillshade(): """ Assert Simple Hillshade transfer function """ da_gaussian = xr.DataArray(data_gaussian) da_gaussian_shade = hillshade(da_gaussian, name='hillshade_agg') general_output_checks(da_gaussian, da_gaussian_shade) assert da_gaussian_shade.name == 'hillshade_agg' assert da_gaussian_shade.mean() > 0 assert da_gaussian_shade[60, 60] > 0
def test_hillshade(): """ Assert Simple Hillshade transfer function """ da_gaussian = xr.DataArray(data_gaussian) da_gaussian_shade = hillshade(da_gaussian) assert da_gaussian_shade.dims == da_gaussian.dims assert da_gaussian_shade.coords == da_gaussian.coords assert da_gaussian_shade.attrs == da_gaussian.attrs assert da_gaussian_shade.mean() > 0 assert da_gaussian_shade[60, 60] > 0
def test_hillshade(): """ Assert Simple Hillshade transfer function """ da_gaussian = xr.DataArray(data_gaussian) da_gaussian_shade = hillshade(da_gaussian, name='hillshade_agg') assert da_gaussian_shade.dims == da_gaussian.dims assert da_gaussian_shade.attrs == da_gaussian.attrs assert da_gaussian_shade.name == 'hillshade_agg' for coord in da_gaussian.coords: assert np.all(da_gaussian_shade[coord] == da_gaussian[coord]) assert da_gaussian_shade.mean() > 0 assert da_gaussian_shade[60, 60] > 0
def test_hillshade_rtx_with_shadows(data_gaussian): import cupy tall_gaussian = 400 * data_gaussian cpu = hillshade(xr.DataArray(tall_gaussian)) tall_gaussian = cupy.asarray(tall_gaussian) rtx = hillshade(xr.DataArray(tall_gaussian)) rtx.data = cupy.asnumpy(rtx.data) assert cpu.shape == rtx.shape nhalf = cpu.shape[0] // 2 # Quadrant nearest sun direction should be almost identical. quad_cpu = cpu.data[nhalf::, ::nhalf] quad_rtx = cpu.data[nhalf::, ::nhalf] assert_allclose(quad_cpu, quad_rtx, atol=0.03) # Opposite diagonal should be in shadow. diag_cpu = np.diagonal(cpu.data[::-1])[nhalf:] diag_rtx = np.diagonal(rtx.data[::-1])[nhalf:] assert_array_less(diag_rtx, diag_cpu + 1e-3)
def hillshade(ds, groupby=None, elev_var='topography__elevation', **kwargs): elev = ds[elev_var] if groupby is not None: # TODO: use shortcut=True # https://github.com/holoviz/datashader/issues/871 hshade = elev.groupby(groupby).apply(xrspatial.hillshade, shortcut=False, **kwargs) else: hshade = xrspatial.hillshade(elev, **kwargs) return hshade
def test_numpy_equals_dask(): # input data data = np.asarray( [[1432.6542, 1432.4764, 1432.4764, 1432.1207, 1431.9429, np.nan], [1432.6542, 1432.6542, 1432.4764, 1432.2986, 1432.1207, np.nan], [1432.832, 1432.6542, 1432.4764, 1432.2986, 1432.1207, np.nan], [1432.832, 1432.6542, 1432.4764, 1432.4764, 1432.1207, np.nan], [1432.832, 1432.6542, 1432.6542, 1432.4764, 1432.2986, np.nan], [1432.832, 1432.6542, 1432.6542, 1432.4764, 1432.2986, np.nan], [1432.832, 1432.832, 1432.6542, 1432.4764, 1432.4764, np.nan]], dtype=np.float32) attrs = {'res': (10.0, 10.0)} small_numpy_based_data_array = xr.DataArray(data, attrs=attrs) dask_data = da.from_array(data, chunks=(3, 3)) small_das_based_data_array = xr.DataArray(dask_data, attrs=attrs) numpy_result = hillshade(small_numpy_based_data_array, name='numpy') dask_result = hillshade(small_das_based_data_array, name='dask') dask_result.data = dask_result.data.compute() assert np.isclose(numpy_result, dask_result, equal_nan=True).all()
def create_map(azimuth): global cvs global terrain global water global trees img = stack( shade(terrain, cmap=Elevation, how='linear'), shade(water, cmap=['aqua', 'white']), shade(hillshade(terrain + trees, azimuth=azimuth), cmap=['black', 'white'], how='linear', alpha=128), shade(tree_colorize, cmap='limegreen', how='linear')) print('image created') return img.to_pil()
def test_hillshade(): """ Assert Simple Hillshade transfer function """ da_gaussian = xr.DataArray(data_gaussian) # add crs for tests da_gaussian = _add_EPSG4326_crs_to_da(da_gaussian) da_gaussian_shade = hillshade(da_gaussian, name='hillshade_agg') # test preservation of attrs and coords, including crs assert da_gaussian_shade.dims == da_gaussian.dims assert da_gaussian_shade.attrs == da_gaussian.attrs assert da_gaussian_shade.name == 'hillshade_agg' for coord in da_gaussian.coords: assert np.all(da_gaussian_shade[coord] == da_gaussian[coord]) assert da_gaussian_shade.mean() > 0 assert da_gaussian_shade[60, 60] > 0
def time_hillshade(self, nx, type): shadows = (type == "rtxpy") hillshade(self.xr, shadows=shadows)