From b00902c204bd2695629c5149e32b394fd16157a9 Mon Sep 17 00:00:00 2001 From: Chris Drummond Date: Wed, 19 Feb 2020 08:27:24 +1100 Subject: [PATCH] Changed gridding from 1 m to 0.1 m in blast2dem --- las_manipulation.py | 6 +++--- las_outputs.py | 32 +++++++++++++++++--------------- param-files/survey-1.xlsx | Bin 17698 -> 0 bytes 3 files changed, 20 insertions(+), 18 deletions(-) delete mode 100644 param-files/survey-1.xlsx diff --git a/las_manipulation.py b/las_manipulation.py index 8b75b74..56ae694 100644 --- a/las_manipulation.py +++ b/las_manipulation.py @@ -353,7 +353,7 @@ def polygon_wave_runup(xyz_1m, direction, shp_name, set_check_value, distance_ch # Simplify polygon to remove invalid geometry #geom = Polygon(for_shape).simplify(10) geom = Polygon(for_shape) - + # Export polygon as shapefile df = gpd.GeoDataFrame(geometry=[geom]) df.crs = {'init': 'epsg:283{}'.format(zone), 'no_defs': True} @@ -406,8 +406,8 @@ def process(yaml_file): # Interpolate point cloud onto a grid print('Interpolating to grid...') xyz_name = os.path.join(tmp_dir, las_basename + '.xyz') - call_lastools('las2dem', input=las_classified_name, output=xyz_name, - args=['-step', 1], verbose=False) + call_lastools('blast2dem', input=las_classified_name, output=xyz_name, + args=['-step', 0.1], verbose=False) # Make runup clipping mask from gridded point cloud print('Calculating runup clipping mask...') diff --git a/las_outputs.py b/las_outputs.py index fb62c7a..ad59e53 100644 --- a/las_outputs.py +++ b/las_outputs.py @@ -87,14 +87,14 @@ def plot_profiles(profile_name, csv_output_dir, graph_loc, ch_limits, delta_vol, fig_h = profiles.dropna().values.max() / m_per_inch * vertical_exag fig_w = (profiles.index.max() - ch_min) / m_per_inch except ValueError: - fig_h = 5 + fig_h = 2.3 fig_w = 10 if scale_figures: fig, ax = plt.subplots(figsize=(fig_w, fig_h)) ax.set_aspect(vertical_exag) else: - fig, ax = plt.subplots(figsize=(10, 5)) + fig, ax = plt.subplots(figsize=(10, 2.3)) for col in profiles.columns: @@ -190,14 +190,15 @@ def calculate_volumes(profile_name, current_survey_date, previous_survey_date, volumes = volumes.sort_index() volumes.to_csv(csv_vol) - # Get most recent volume difference for current profile - current_date_idx = volumes.columns.get_loc('Volume_' + current_survey_date) - previous_date_idx = volumes.columns.get_loc('Volume_' + previous_survey_date) - if previous_date_idx < 0: + + if previous_survey_date=="nan": # Return None if there is only one survey delta_vol = None else: + # Get most recent volume difference for current profile + current_date_idx = volumes.columns.get_loc('Volume_' + current_survey_date) + previous_date_idx = volumes.columns.get_loc('Volume_' + previous_survey_date) previous_vol = volumes.loc[profile_name][previous_date_idx] current_vol = volumes.loc[profile_name][current_date_idx] delta_vol = current_vol - previous_vol @@ -240,18 +241,19 @@ def process(yaml_file): crop_swash_poly = os.path.join(shp_swash_dir, las_basename + '.shp') # Crop point cloud to swash boundary - print('Cropping swash...') - las_data = call_lastools('lasclip', input=input_las, output='-stdout', - args=['-poly', crop_swash_poly], verbose=False) + #print('Cropping swash...') + #las_data = call_lastools('lasclip', input=input_las, output='-stdout', + # args=['-poly', crop_swash_poly], verbose=False) # Export classified, clipped las for delivery to client - las_name = os.path.join(output_las_dir, las_basename + '.las') - with open (las_name, 'wb') as f: - f.write(las_data) + #las_name = os.path.join(output_las_dir, las_basename + '.las') + #with open (las_name, 'wb') as f: + # f.write(las_data) # Apply sea-side clipping polygon print('Cropping back of beach...') - las_data = call_lastools('lasclip', input=las_data, output='-stdout', + #las_data = call_lastools('lasclip', input=las_data, output='-stdout', + las_data = call_lastools('lasclip', input=input_las, output='-stdout', args=['-poly', crop_heatmap_poly], verbose=False) @@ -263,8 +265,8 @@ def process(yaml_file): # Make a raster from point cloud print('Creating heat map raster...') tif_name = os.path.join(output_tif_dir, las_basename + '.tif') - call_lastools('las2dem', input=las_data, output=tif_name, - args=['-step', 1, '-keep_class', 2], verbose=False) + call_lastools('blast2dem', input=las_data, output=tif_name, + args=['-step', 0.1, '-keep_class', 2], verbose=False) # IF THIS STEP ISN'T WORKING: # might mean there are no data lines # trying running with args=['-step', 1, '-keep_class', 2, '-rescale', 0.001,0.001,0.001] diff --git a/param-files/survey-1.xlsx b/param-files/survey-1.xlsx deleted file mode 100644 index b43b56a376db4085b95e435d4e666bb76c468d00..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17698 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 BnV|px