Beispiel #1
0
    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
Beispiel #2
0
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)
Beispiel #3
0
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)
Beispiel #4
0
    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))
Beispiel #5
0
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))
Beispiel #6
0
    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))
Beispiel #7
0
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
Beispiel #8
0
    # 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))
Beispiel #9
0
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",
Beispiel #10
0
    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,
Beispiel #11
0
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))
Beispiel #12
0
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))
Beispiel #14
0
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)