Delft3D模型使用.ldb文件作为岸线数据来源。由多个点连成一条岸线,再由多条岸线组成整个岸线文件。文件格式如下,%后的内容代表注释:
- L0001 %线段名称
- 2423 2 %前一个数字代表这条线段总共有多少个点,后一个数字代表每个线段有几维坐标
- 120.2 34.2 %横纵坐标
- ...
那么生成这样格式的.ldb文件思路如下
- GEODAS-NG获取岸线原始数据
- 将岸线数据转为.dat文件方便MATLAB读取
- 使用MATLAB将.dat文件转为.ldb文件,获得可以被Delft3D读取的岸线数据
一、获取岸线原始数据
GEODAS用于提取岸线数据,官网好像没找到这个软件下载包了,我自己贴一个下载地址如下:
链接:https://pan.baidu.com/s/1TDWBB3IXM4zB5dSmShrTPQ?pwd=usi3 提取码:usi3
打开软件选择 coastline extractor
添加岸线数据的过程可以参考这篇博客 ,大家也可以使用其他的岸线数据
获取岸线数据方法_geodas-ng提取岸线-CSDN博客
这里直接提取数据,以东海为例:
选择岸线的经纬度范围
分辨率和参数选择
结果如下,并点击Save As
选择Matlab的.dat格式
然后这里我保存的文件名为“coastline_china.dat”,随后就可以打开MATLAB进行操作了
clc
clear
% 岸线数据文件名
filename = 'coastline_china.dat';
% 数据格式
formatSpec = '%.6f';
% 读岸线数据
data = readmatrix(filename);
data(:,1) = data(:,1); % lon
data(:,2) = data(:,2); % lat
%% 将.dat数据转为.ldb
% 格式要求不能有逗号间隔!!!
% 用于输出的坐标字符串
output = strcat(string([num2str(data(:,1),formatSpec)])," ",string([num2str(data(:,2),formatSpec)]));
% 每一个nan都代表一条线段的间断点
index = isnan(data);
index = find(index(:,1)==1); % 找到所有间断点的位置
split_index = 1;% 初始化
% 生成线段序号
for i=1:length(index)
output(index(i),1)=string(['L',num2str(i,'%04d')]);% 线段序号
end
% 每个线段的点数
for i=1:length(index)-1
insertRow = strcat(string(num2str(index(i+1)-index(i)-1))," 2");
output = vertcat(output(1:index(i)+i-1, :), insertRow, output(index(i)+i:end, :));
end
insertRow = strcat(string(num2str(length(data)-index(end)))," 2");
output = vertcat(output(1:index(end)+length(index)-1, :), insertRow, output(index(end)+length(index):end, :));
% 输出并重命名
writematrix(output,'shore.txt');
movefile('shore.txt','shore.ldb');
输出的结果命名为shore.ldb
导入到Delft3D
结果如下
如果觉得有用,麻烦点个赞啦~感谢~
如果有没有解释清楚的欢迎评论区提问~