Upload files to ''
Extract 0.7 m contour from processed LiDAR data for use in DSAS
parent
3220cf60ad
commit
6f2ece81bc
@ -0,0 +1,56 @@
|
|||||||
|
import os
|
||||||
|
import re
|
||||||
|
import fiona
|
||||||
|
from tqdm import tqdm
|
||||||
|
import numpy as np
|
||||||
|
import pandas as pd
|
||||||
|
import geopandas as gpd
|
||||||
|
from shapely.geometry import MultiLineString
|
||||||
|
from survey_tools import call_lastools
|
||||||
|
|
||||||
|
mga56 = fiona.crs.from_epsg(28356)
|
||||||
|
|
||||||
|
input_dir = 'output/01-las-classified'
|
||||||
|
output_dir = 'output/11-shp-shorelines'
|
||||||
|
|
||||||
|
contour = 0.7
|
||||||
|
smoothing = 2
|
||||||
|
clean = 5 # any lines shorted that this are automatically removed
|
||||||
|
|
||||||
|
las_names = os.listdir(input_dir)
|
||||||
|
for las_name in tqdm(las_names):
|
||||||
|
shp_name = las_name.replace('.las', '_0_7_contour.shp')
|
||||||
|
call_lastools(
|
||||||
|
'blast2iso',
|
||||||
|
input=os.path.join(input_dir, las_name),
|
||||||
|
output=os.path.join(output_dir, shp_name),
|
||||||
|
args=['-iso', contour, '-smooth', smoothing, '-clean', clean])
|
||||||
|
|
||||||
|
# Consolidate all surveys for each beach
|
||||||
|
shp_names = [f for f in os.listdir(output_dir) if f.endswith('contour.shp')]
|
||||||
|
|
||||||
|
master = gpd.GeoDataFrame({'shp_name': shp_names})
|
||||||
|
master.geometry = [[] for s in shp_names]
|
||||||
|
|
||||||
|
# Get date information
|
||||||
|
master['beach'] = master['shp_name'].str.extract('(.*)_\d{8}')
|
||||||
|
yyyy = master['shp_name'].str.extract('(\d{4})')
|
||||||
|
mm = master['shp_name'].str.extract('\d{4}(\d{2})')
|
||||||
|
dd = master['shp_name'].str.extract('\d{6}(\d{2})')
|
||||||
|
|
||||||
|
# Use US date format (required by DSAS)
|
||||||
|
master['date'] = mm + '/' + dd + '/' + yyyy
|
||||||
|
|
||||||
|
# Read shapefiles
|
||||||
|
for i, row in master.iterrows():
|
||||||
|
geom = gpd.read_file(os.path.join(output_dir, row['shp_name'])).geometry
|
||||||
|
# Combine all lines into mulit line string
|
||||||
|
row.geometry = MultiLineString(list(geom))
|
||||||
|
|
||||||
|
# Update fields
|
||||||
|
master.loc[i, 'uncertainty'] = 0
|
||||||
|
|
||||||
|
# Export summary
|
||||||
|
master.crs = {'init': 'epsg:28356'}
|
||||||
|
master.to_file(os.path.join(output_dir, 'all_beaches.shp'),
|
||||||
|
driver='ESRI Shapefile')
|
Loading…
Reference in New Issue