def get_slope(self): """ TODO """ beau = rd.rdarray(np.load('imgs/beauford.npz')['beauford'], no_data=-9999) slope = rd.TerrainAttribute(beau, attrib='slope_riserun') rd.rdShow(slope, axes=False, cmap='jet', figsize=(8,5.5)) pass
def RdInfo(): parser = argparse.ArgumentParser(formatter_class=RawTextHelpFormatter, description="""RichDEM Dataset Information Parameters: rda -- A dataset """) parser.add_argument('rda', type=str, help='Elevation model') parser.add_argument('-s', '--show', action='store_true', help='Show the model') parser.add_argument('--cmap', type=str, default='jet', help='Colormap (Default: jet)') args = parser.parse_args() rda = rd.LoadGDAL(args.rda) print('File = {0} '.format(args.rda)) print('Data type = {0} '.format(rda.dtype)) print('Width = {0} '.format(rda.shape[1])) print('Height = {0} '.format(rda.shape[0])) print('Shape = {0}x{1}'.format(rda.shape[1], rda.shape[0])) print('Metadata:') for k, v in rda.metadata.items(): if k == 'PROCESSING_HISTORY': continue print('\t{0} = {1}'.format(k, v)) print('Processing History:') print('-------------------') if 'PROCESSING_HISTORY' in rda.metadata: for ph in rda.metadata['PROCESSING_HISTORY'].split('\n'): ph = ph.strip() if len(ph) == 0: continue print(ph) print('-------------------') if args.show: rd.rdShow(rda, cmap=args.cmap)
def RdInfo(): parser = argparse.ArgumentParser(formatter_class=RawTextHelpFormatter, description="""RichDEM Dataset Information Parameters: rda -- A dataset """) parser.add_argument('rda', type=str, help='Elevation model') parser.add_argument('-s','--show', action='store_true', help='Show the model') parser.add_argument('--cmap', type=str, default='jet', help='Colormap (Default: jet)') parser.add_argument('--vmin', type=float, default=None, help='Colormap (Default: jet)') parser.add_argument('--vmax', type=float, default=None, help='Colormap (Default: jet)') args = parser.parse_args() rda = rd.LoadGDAL(args.rda) print('File = {0} '.format(args.rda )) print('Data type = {0} '.format(rda.dtype )) print('Width = {0} '.format(rda.shape[1] )) print('Height = {0} '.format(rda.shape[0] )) print('Shape = {0}x{1}'.format(rda.shape[1],rda.shape[0])) print('Metadata:') for k,v in rda.metadata.items(): if k=='PROCESSING_HISTORY': continue print('\t{0} = {1}'.format(k,v)) print('Processing History:') print('-------------------') if 'PROCESSING_HISTORY' in rda.metadata: for ph in rda.metadata['PROCESSING_HISTORY'].split('\n'): ph = ph.strip() if len(ph)==0: continue print(ph) print('-------------------') if args.show: rd.rdShow(rda, cmap=args.cmap, vmin=args.vmin, vmax=args.vmax)
del obj_image end_time = time.time() print("Total run time:\t\t\t {:.4f} s".format(end_time - init_time)) return out_obj_file, out_level_file # ##################################### main script if __name__ == '__main__': # ************************ change the following parameters if needed ******************************** # # set input files in_dem = os.path.join(os.getcwd(), "lidar/data/dem.tif") in_sink = os.path.join(os.getcwd(), "lidar/data/sink.tif") # parameters for level set method min_size = 1000 # minimum number of pixels as a depression min_depth = 0.3 # minimum depression depth interval = 0.3 # slicing interval, top-down approach bool_level_shp = True # whether or not to extract polygons for each individual level # set output directory out_dir = os.path.join(os.path.expanduser("~"), "temp") # create a temp folder under user home directory # **************************************************************************************************# dep_id_path, dep_level_path = DelineateDepressions(in_sink, min_size, min_depth, interval, out_dir, bool_level_shp) print("Results are saved in: {}".format(out_dir)) dep_id = rd.LoadGDAL(dep_id_path) dep_id_fig = rd.rdShow(dep_id, ignore_colours=[0], axes=False, cmap='jet', figsize=(6, 5.5)) dep_level = rd.LoadGDAL(dep_level_path) dep_level_fig = rd.rdShow(dep_level, ignore_colours=[0], axes=False, cmap='jet', figsize=(6, 5.5))
def gui(): """An interactive Graphical User Interface (GUI) for the lidar package.""" # identify the sample data directory of the package package_name = "lidar" data_dir = pkg_resources.resource_filename(package_name, "data/") # use the sample dem. Change it to your own dem if needed in_dem = os.path.join(data_dir, "dem.tif") # set output directory. By default, use the temp directory under user's home directory out_dir = os.path.join(os.path.expanduser("~"), "temp") if not os.path.exists(out_dir): os.mkdir(out_dir) with sg.FlexForm("lidar package GUI") as form: form_rows = [ [ sg.Text( "Level-set Method for Delineating Topographic Hierarchy", size=(50, 1), font=("Arial", 14), text_color="black", ) ], [sg.Text("Select DEM:", font=("Arial", 14))], [sg.InputText(in_dem, size=(60, 1)), sg.FileBrowse()], [sg.Text("Delineation Mode:", font=("Arial", 14))], [ sg.Radio("Depressions", "RADIO1", default=True), sg.Radio("Mounts", "RADIO1"), ], [sg.Text("DEM Filtering:", font=("Arial", 14))], [ sg.Text("Select Filter:"), sg.InputCombo([ "None", "Mean Filter", "Median Filter", "Gaussian Filter" ]), sg.Text("Kernel Size: "), sg.InputText(default_text="3", size=(10, 1)), ], [sg.Text("Level-set Parameters:", font=("Arial", 14))], [ sg.Text("Minimum size:"), sg.InputText(default_text="1000", size=(10, 1)), sg.Text("Minimum depth:"), sg.InputText(default_text="1.0", size=(10, 1)), ], [ sg.Text("Slicing interval:"), sg.InputText(default_text="0.5", size=(10, 1)), sg.Text("Output shapefiles:"), sg.InputCombo(["Yes", "No"], default_value="No"), ], [sg.Text("Display Results:", font=("Arial", 14))], [sg.InputCombo(["Yes", "No"], default_value="No")], [sg.Text("Select Output Directory:", font=("Arial", 14))], [sg.InputText(out_dir, size=(60, 1)), sg.FolderBrowse()], [sg.Submit(), sg.Cancel()], ] button, ( in_dem, mode_dep, mode_mnt, filter_type, kernel_szie, min_size, min_depth, interval, bool_shp, display, out_dir, ) = form.LayoutAndRead(form_rows) if button == "Submit": kernel_szie = int(kernel_szie) min_size = int(min_size) min_depth = float(min_depth) interval = float(interval) if bool_shp == "Yes": bool_shp = True else: bool_shp = False if display == "Yes": display = True else: display = False if mode_mnt and in_dem == os.path.join(data_dir, "dem.tif"): in_dem = os.path.join(data_dir, "dsm.tif") out_dem_name = filter_type.split(" ")[0].lower() + ".tif" out_dem = os.path.join(out_dir, out_dem_name) sg.Popup( "Please Wait!", "The program is running! You will receive another message when it is done!", ) if filter_type == "Mean Filter": in_dem = MeanFilter(in_dem, kernel_size=kernel_szie, out_file=out_dem) elif filter_type == "Median Filter": in_dem = MedianFilter(in_dem, kernel_size=kernel_szie, out_file=out_dem) elif filter_type == "Gaussian Filter": in_dem = GaussianFilter(in_dem, sigma=kernel_szie, out_file=out_dem) if mode_dep: sink_path = ExtractSinks(in_dem, min_size, out_dir) dep_id_path, dep_level_path = DelineateDepressions( sink_path, min_size, min_depth, interval, out_dir, bool_shp) else: sink_path = os.path.join(out_dir, "sink.tif") dep_id_path, dep_level_path = DelineateMounts( in_dem, min_size, min_depth, interval, out_dir, bool_shp) if display: # loading data and results dem = rd.LoadGDAL(in_dem) sink = rd.LoadGDAL(sink_path) dep_id = rd.LoadGDAL(dep_id_path) dep_level = rd.LoadGDAL(dep_level_path) # plotting results dem_fig = rd.rdShow(dem, ignore_colours=[0], axes=False, cmap="jet", figsize=(6, 5.5)) sink_fig = rd.rdShow(sink, ignore_colours=[0], axes=False, cmap="jet", figsize=(6, 5.5)) dep_id_fig = rd.rdShow(dep_id, ignore_colours=[0], axes=False, cmap="jet", figsize=(6, 5.5)) dep_level_path = rd.rdShow( dep_level, ignore_colours=[0], axes=False, cmap="jet", figsize=(6, 5.5), ) del ( dem, sink, dep_id, dep_level, dem_fig, sink_fig, dep_id_fig, dep_id_path, ) sg.Popup("Success!", "The results are saved in: {}".format(out_dir))
polygonize(out_region, out_vec_file) # # plot dems # demfig = rd.rdShow(dem, ignore_colours=[0], axes=False, cmap='jet', figsize=(8, 5.5)) # demfig_filled = rd.rdShow(dem_filled, ignore_colours=[0], axes=False, cmap='jet', vmin=demfig['vmin'], # vmax=demfig['vmax'], figsize=(8, 5.5)) # demfig_diff = rd.rdShow(dem_diff, ignore_colours=[0], axes=False, cmap='jet', figsize=(8, 5.5)) end_time = time.time() print("Total run time:\t\t\t {:.4f} s".format(end_time - start_time)) return sink if __name__ == '__main__': # ************************ change the following parameters if needed ******************************** # # set input files in_dem = "../data/dem.tif" # parameters for depression filling min_size = 1000 # minimum number of pixels as a depression min_depth = 0.3 # minimum depression depth # set output directory out_dir = "/home/qiusheng/temp" # ************************************************************************************************** # sink = ExtractSinks(in_dem, min_size=min_size, out_dir=out_dir) dem = rd.LoadGDAL(in_dem) demfig = rd.rdShow(dem, ignore_colours=[0], axes=False, cmap='jet', figsize=(6, 5.5)) sinkfig = rd.rdShow(sink, ignore_colours=[0], axes=False, cmap='jet', figsize=(6, 5.5))
import richdem as rd import numpy as np import matplotlib.pyplot as plt dem = rd.LoadGDAL("/media/jayanthmouli/54EC-046F/elevation/the_better_one.tif", no_data=0) slope = rd.TerrainAttribute(dem, attrib='slope_riserun') # rd.rdShow(slope, axes=False, cmap='magma', figsize=(8, 5.5)) # plt.show() aspect = rd.TerrainAttribute(dem, attrib='aspect') rd.rdShow(aspect, axes=False, cmap='jet', figsize=(8, 5.5)) plt.show() print aspect.shape
# parameters for identifying sinks and delineating nested depressions min_size = 1000 # minimum number of pixels as a depression min_height = 0.3 # minimum depth as a depression interval = 0.3 # slicing interval for the level-set method bool_shp = False # output shapefiles for each individual level mount_id_path, mount_level_path = DelineateMounts(in_dem, min_size, min_height, interval, out_dir, bool_shp) print("Results are saved in: {}".format(out_dir)) dem = rd.LoadGDAL(in_dem) dem_fig = rd.rdShow(dem, ignore_colours=[0], axes=False, cmap='jet', figsize=(6, 5.5)) mount_id = rd.LoadGDAL(mount_id_path) mount_id_fig = rd.rdShow(mount_id, ignore_colours=[0], axes=False, cmap='jet', figsize=(6, 5.5)) mount_level = rd.LoadGDAL(mount_level_path) mount_level_fig = rd.rdShow(mount_level, ignore_colours=[0], axes=False, cmap='jet', figsize=(6, 5.5))
out_tif = "data/ASTERGDEM3/Processed/Elevation_5min.tif" with rasterio.open(out_tif, "w", **out_meta) as dest: dest.write(elevation_low) # ============================= # 3. Calculate slope and aspect # 3.1. 30`` resolution # Read elevarion with rd.LoadGDAL elevation_raw = rd.LoadGDAL("data/ASTERGDEM3/Processed/Elevation_30s.tif", no_data=-9999) # Calculate slope slope = rd.TerrainAttribute(elevation_raw, attrib='slope_riserun') rd.rdShow(slope, axes=False, cmap='magma', figsize=(8, 5.5)) # Export as tif rd.SaveGDAL("data/ASTERGDEM3/Processed/Slope_30s.tif", slope) # Calculate aspect aspect = rd.TerrainAttribute(elevation_raw, attrib='aspect') rd.rdShow(aspect, axes=False, cmap='jet', figsize=(8, 5.5)) # Export as tif rd.SaveGDAL("data/ASTERGDEM3/Processed/Aspect_30s.tif", aspect) # 3.2. 2.5` resolution # Read elevarion with rd.LoadGDAL elevation_raw = rd.LoadGDAL("data/ASTERGDEM3/Processed/Elevation_2p5min.tif",
gaussian_dem = os.path.join(out_dir, "gaussian.tif") mean_dem = os.path.join(out_dir, "mean.tif") dem = rd.LoadGDAL(in_dem) # original dem mean = MeanFilter(in_dem, kernel_size=3) mean_diff = mean - dem med = MedianFilter(in_dem, kernel_size=3) med_diff = med - dem gau = GaussianFilter(in_dem, sigma=1) gau_diff = gau - dem # plotting data dem_fig = rd.rdShow(dem, ignore_colours=[0], axes=False, cmap="jet", figsize=(6, 5.5)) mean_fig = rd.rdShow(mean, ignore_colours=[0], axes=False, cmap="jet", figsize=(6, 5.5)) med_fig = rd.rdShow(med, ignore_colours=[0], axes=False, cmap="jet", figsize=(6, 5.5)) gau_fig = rd.rdShow(gau, ignore_colours=[0], axes=False,
def main(): # identify the sample data directory of the package package_name = 'lidar' data_dir = pkg_resources.resource_filename(package_name, 'data/') # use the sample dem. Change it to your own dem if needed in_dem = os.path.join(data_dir, 'dem.tif') # set output directory. By default, use the temp directory under user's home directory out_dir = os.path.join(os.path.expanduser("~"), "temp") if not os.path.exists(out_dir): os.mkdir(out_dir) with sg.FlexForm('lidar package GUI') as form: form_rows = [[ sg.Text('Level-set Method for Delineating Topographic Hierarchy', size=(50, 1), font=("Arial", 14), text_color='black') ], [sg.Text('Select DEM:', font=("Arial", 14))], [sg.InputText(in_dem, size=(60, 1)), sg.FileBrowse()], [sg.Text('Delineation Mode:', font=("Arial", 14))], [ sg.Radio('Depressions', "RADIO1", default=True), sg.Radio('Mounts', "RADIO1") ], [sg.Text('DEM Filtering:', font=("Arial", 14))], [ sg.Text('Select Filter:'), sg.InputCombo([ 'None', 'Mean Filter', 'Median Filter', 'Gaussian Filter' ]), sg.Text('Kernel Size: '), sg.InputText(default_text='3', size=(10, 1)) ], [sg.Text('Level-set Parameters:', font=("Arial", 14))], [ sg.Text('Minimum size:'), sg.InputText(default_text='1000', size=(10, 1)), sg.Text('Minimum depth:'), sg.InputText(default_text='1.0', size=(10, 1)) ], [ sg.Text('Slicing interval:'), sg.InputText(default_text='0.5', size=(10, 1)), sg.Text('Output shapefiles:'), sg.InputCombo(['Yes', 'No'], default_value='No') ], [sg.Text('Display Results:', font=("Arial", 14))], [sg.InputCombo(['Yes', 'No'], default_value='No')], [sg.Text('Select Output Directory:', font=("Arial", 14))], [sg.InputText(out_dir, size=(60, 1)), sg.FolderBrowse()], [sg.Submit(), sg.Cancel()]] button, (in_dem, mode_dep, mode_mnt, filter_type, kernel_szie, min_size, min_depth, interval, bool_shp, display, out_dir) = form.LayoutAndRead(form_rows) # sg.Popup(button, source_filename) if button == 'Submit': kernel_szie = int(kernel_szie) min_size = int(min_size) min_depth = float(min_depth) interval = float(interval) if bool_shp == 'Yes': bool_shp = True else: bool_shp = False if display == 'Yes': display = True else: display = False if mode_mnt and in_dem == os.path.join(data_dir, 'dem.tif'): in_dem = os.path.join(data_dir, 'dsm.tif') out_dem_name = filter_type.split(" ")[0].lower() + '.tif' out_dem = os.path.join(out_dir, out_dem_name) sg.Popup( 'Please Wait!', 'The program is running! You will receive another message when it is done!' ) if filter_type == 'Mean Filter': in_dem = MeanFilter(in_dem, kernel_size=kernel_szie, out_file=out_dem) elif filter_type == 'Median Filter': in_dem = MedianFilter(in_dem, kernel_size=kernel_szie, out_file=out_dem) elif filter_type == 'Gaussian Filter': in_dem = GaussianFilter(in_dem, sigma=kernel_szie, out_file=out_dem) if mode_dep: sink_path = ExtractSinks(in_dem, min_size, out_dir) dep_id_path, dep_level_path = DelineateDepressions( sink_path, min_size, min_depth, interval, out_dir, bool_shp) else: sink_path = os.path.join(out_dir, 'sink.tif') dep_id_path, dep_level_path = DelineateMounts( in_dem, min_size, min_depth, interval, out_dir, bool_shp) if display: # loading data and results dem = rd.LoadGDAL(in_dem) sink = rd.LoadGDAL(sink_path) dep_id = rd.LoadGDAL(dep_id_path) dep_level = rd.LoadGDAL(dep_level_path) # plotting results dem_fig = rd.rdShow(dem, ignore_colours=[0], axes=False, cmap='jet', figsize=(6, 5.5)) sink_fig = rd.rdShow(sink, ignore_colours=[0], axes=False, cmap='jet', figsize=(6, 5.5)) dep_id_fig = rd.rdShow(dep_id, ignore_colours=[0], axes=False, cmap='jet', figsize=(6, 5.5)) dep_level_path = rd.rdShow(dep_level, ignore_colours=[0], axes=False, cmap='jet', figsize=(6, 5.5)) del dem, sink, dep_id, dep_level, dem_fig, sink_fig, dep_id_fig, dep_id_path sg.Popup('Success!', 'The results are saved in: {}'.format(out_dir))
min_size = 1000 # minimum number of pixels as a depression min_depth = 0.3 # minimum depth as a depression interval = 0.3 # slicing interval for the level-set method bool_shp = False # output shapefiles for each individual level # extracting sinks based on user-defined minimum depression size out_dem = os.path.join(out_dir, "median.tif") in_dem = MedianFilter(in_dem, kernel_size=3, out_file=out_dem) sink_path = ExtractSinks(in_dem, min_size, out_dir) dep_id_path, dep_level_path = DelineateDepressions( sink_path, min_size, min_depth, interval, out_dir, bool_shp ) print("Results are saved in: {}".format(out_dir)) # loading data and results dem = rd.LoadGDAL(in_dem) sink = rd.LoadGDAL(sink_path) dep_id = rd.LoadGDAL(dep_id_path) dep_level = rd.LoadGDAL(dep_level_path) # plotting results dem_fig = rd.rdShow(dem, ignore_colours=[0], axes=False, cmap="jet", figsize=(6, 5.5)) sink_fig = rd.rdShow(sink, ignore_colours=[0], axes=False, cmap="jet", figsize=(6, 5.5)) dep_id_fig = rd.rdShow( dep_id, ignore_colours=[0], axes=False, cmap="jet", figsize=(6, 5.5) ) dep_level_path = rd.rdShow( dep_level, ignore_colours=[0], axes=False, cmap="jet", figsize=(6, 5.5) )
def display_slope(self): self.dem_data = rd.rdarray(self.dem_data, no_data=-9999) rd.rdShow(self.dem_data, axes=False, cmap='magma', figsize=(8, 5.5))
import richdem as rd import matplotlib import matplotlib.pyplot as plt import os import time import PIL start = time.time() # Na początku trzeba raster przekonwertować do układu metrycznego, tutaj jest zrobione do UTM34 (gdalwarp) path = 'C:\\Users\\wojo1\\Desktop\\Doktorat\\Microrelief\\Data\\LIDAR\\NMT' dem_path = path + '\\nmt_lidar.tif' dem_plot = path + '\\L_NMT_N-34-138-B-b_utm.tif' os.chdir("C:\\Users\\wojo1\\Desktop\\Doktorat\\Microrelief\\Data\\TIF") # string = os.popen("gdalinfo " + dem_plot).read().rstrip() # min_value = string.splitlines() # min_float_value = float(min_value[-2][23:]) # print(os.popen('gdalinfo L_NMT_N-34-138-B-b_utm.tif').read().rstrip()) dem = rd.LoadGDAL(dem_plot) # plt.imshow(dem, interpolation='bilinear') # plt.clim(vmin=0, vmax=None) # plt.colorbar(mappable=None, cax=None) # plt.show() slope = rd.TerrainAttribute(dem, attrib='slope_degrees') rd.rdShow(slope, axes=False, cmap='jet', figsize=(10, 8)) plt.show() # rd.SaveGDAL("nmt_python.tif", slope) end = time.time() print('process time: ', end - start)