基于带步长数组的网格采样数据进行二维网格加密¶
以下保留原笔记本的代码和已保存输出;转换过程中未重新执行代码。
import matplotlib.pyplot as plt
plt.close("all")
import numpy as np
from meshkernel import (
MeshKernel,
ProjectionType,
MakeGridParameters,
GriddedSamples,
MeshRefinementParameters,
RefinementType,
)
import xarray as xr
导入水深采样数据并生成内存不连续的数组¶
lon_min, lon_max, lat_min, lat_max = 142, 150, -42, -39
dxy = 0.5
file_nc_bathy = r"p:\metocean-data\open\GEBCO\2021\GEBCO_2021.nc"
data_bathy = xr.open_dataset(file_nc_bathy)
data_bathy_sel = data_bathy.sel(
lon=slice(lon_min, lon_max, 10), lat=slice(lat_min, lat_max, 10)
).elevation
生成矩形网格¶
# 创建基础网格
make_grid_parameters = MakeGridParameters(
angle=0,
origin_x=lon_min,
origin_y=lat_min,
upper_right_x=lon_max,
upper_right_y=lat_max,
block_size_x=dxy,
block_size_y=dxy,
)
mk = MeshKernel(projection=ProjectionType(1))
mk.curvilinear_compute_rectangular_grid_on_extension(make_grid_parameters)
mk.curvilinear_convert_to_mesh2d()
加密网格¶
lon_np = data_bathy_sel.lon.to_numpy()
lat_np = data_bathy_sel.lat.to_numpy()
values_np = data_bathy_sel.to_numpy().flatten().astype(np.float32)
gridded_samples = GriddedSamples(
x_coordinates=lon_np, y_coordinates=lat_np, values=values_np
)
# 网格加密
mesh_refinement_parameters = MeshRefinementParameters(
min_edge_size=1000, refinement_type=RefinementType.WAVE_COURANT
)
mk.mesh2d_refine_based_on_gridded_samples(
gridded_samples=gridded_samples, mesh_refinement_params=mesh_refinement_parameters
)
绘制加密后的网格¶
fig, ax = plt.subplots()
mk.mesh2d_get().plot_edges(ax=ax, linewidth=1)
