103 lines
3.4 KiB
Python
103 lines
3.4 KiB
Python
## Read, process, and merge bathymetry data
|
|
# Author: AJMR
|
|
# Date: 2022-02-10
|
|
|
|
#%% Import
|
|
import pandas as pd
|
|
import geopandas as gp
|
|
from mikeio import Mesh
|
|
import math
|
|
|
|
from scipy.spatial import cKDTree
|
|
from shapely.geometry import Point
|
|
|
|
import numpy as np
|
|
import cartopy.crs as ccrs
|
|
import contextily as ctx
|
|
import matplotlib.pyplot as plt
|
|
|
|
#%% Functions
|
|
def ckdnearest(gdA, gdB):
|
|
|
|
nA = np.array(list(gdA.geometry.apply(lambda x: (x.x, x.y))))
|
|
nB = np.array(list(gdB.geometry.apply(lambda x: (x.x, x.y))))
|
|
btree = cKDTree(nB)
|
|
dist, idx = btree.query(nA, k=1)
|
|
gdB_nearest = gdB.iloc[idx].drop(columns="geometry").reset_index(drop=True)
|
|
gdf = pd.concat(
|
|
[
|
|
gdA.reset_index(drop=True),
|
|
gdB_nearest,
|
|
pd.Series(dist, name='dist')
|
|
],
|
|
axis=1)
|
|
|
|
return gdf
|
|
#%% Setup Paths
|
|
dataPath = "C:/Users/arey/files/Projects/SouthShore/Bathy/"
|
|
mapbox = 'https://api.mapbox.com/styles/v1/alexander0042/ckemxgtk51fgp19nybfmdcb1e/tiles/256/{z}/{x}/{y}@2x?access_token=pk.eyJ1IjoiYWxleGFuZGVyMDA0MiIsImEiOiJjazVmdG4zbncwMHY4M2VrcThwZGUzZDFhIn0.w6oDHoo1eCeRlSBpwzwVtw'
|
|
|
|
#%% Read in Source 1
|
|
S1 = pd.read_csv(dataPath + '211102_05 South MLW Breakwall inner Breakwall SBES and Median MBES NAD83 NAVD88 1x1.xyz',
|
|
delimiter='\s+', header=None, names=['x', 'y', 'z'])
|
|
|
|
#%% Read in Source 2
|
|
S2 = pd.read_csv(dataPath + '211102_05 South MLW Breakwall sturcture Median MBES NAD83 NAVD88 1x1.xyz',
|
|
delimiter='\s+', header=None, names=['x', 'y', 'z'])
|
|
|
|
#%% Read in Source 3
|
|
S3 = pd.read_csv(dataPath + '211102_05 South MLW Breakwall outer Breakwall Median MBES NAD83 NAVD88 1x1.xyz',
|
|
delimiter='\s+', header=None, names=['x', 'y', 'z'])
|
|
|
|
#%% Merge Sources
|
|
bathy_merged = pd.concat([S1, S2, S3])
|
|
|
|
# Convert to GeoPandas
|
|
bathy_gdf = gp.GeoDataFrame(bathy_merged, crs='EPSG:2289',
|
|
geometry=gp.points_from_xy(bathy_merged.x, bathy_merged.y))
|
|
bathy_gdf.to_crs('EPSG:32616', inplace=True)
|
|
|
|
bathy_gdf.loc[:, 'z'] = bathy_gdf.loc[:, 'z'] * 0.3048
|
|
|
|
del S1
|
|
del S2
|
|
del S3
|
|
del bathy_merged
|
|
|
|
bathy_gdf.drop(columns=['x', 'y'], inplace=True)
|
|
|
|
#%% Read in Previous Bathymetry
|
|
previousBath = gp.read_file("//srv-mad3.baird.com/Projects/13632.101 South Shore Breakwater/06_Models/02_Mike21SW/SSB_Mesh_v40_Nodes.shp")
|
|
|
|
|
|
#%% Read in new mesh
|
|
currenMesh = Mesh("//oak-spillway.baird.com/F/13632.101 South Shore Breakwater/SetupFiles/southshore_mesh2_v3InnerBounds.mesh")
|
|
|
|
#%% Make Geodataframe of mesh
|
|
currenMesh_gdf = gp.GeoDataFrame(currenMesh.node_coordinates, crs='EPSG:32616',
|
|
geometry=gp.points_from_xy(currenMesh.node_coordinates[:, 0],
|
|
currenMesh.node_coordinates[:, 1]))
|
|
#%% Find Nearest Points to All
|
|
Bathy_nearest = ckdnearest(currenMesh_gdf, bathy_gdf)
|
|
|
|
# Save to file
|
|
Bathy_nearest.rename(columns={0: 'x'}, inplace=True)
|
|
Bathy_nearest.rename(columns={1: 'y'}, inplace=True)
|
|
Bathy_nearest.rename(columns={2: 'z_old'}, inplace=True)
|
|
Bathy_nearest.to_parquet("C:/Users/arey/Files/Projects/SouthShoreNearest.parquet")
|
|
Bathy_nearest.to_file("C:/Users/arey/Files/Projects/SouthShoreNearest.shp")
|
|
#%% Update Mesh
|
|
newMesh = currenMesh
|
|
|
|
newMesh.node_coordinates[Bathy_nearest.dist<100, 2] = Bathy_nearest.loc[Bathy_nearest.dist<100, 'z']
|
|
|
|
newMesh.write("//oak-spillway.baird.com/F/13632.101 South Shore Breakwater/SetupFiles/southshore_mesh2_v3InnerBounds_Bathy.mesh")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|