Upload files to ''

Extract 0.7 m contour from processed LiDAR data for use in DSAS
chrisd 5 years ago
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…
Cancel
Save