利用GEODAS和MATLAB生成Delft 3d岸线文件(.ldb)文件

Delft3D模型使用.ldb文件作为岸线数据来源。由多个点连成一条岸线,再由多条岸线组成整个岸线文件。文件格式如下,%后的内容代表注释:

  1. L0001 %线段名称
  2. 2423  2 %前一个数字代表这条线段总共有多少个点,后一个数字代表每个线段有几维坐标
  3. 120.2 34.2 %横纵坐标
  4. ...

那么生成这样格式的.ldb文件思路如下

  1. GEODAS-NG获取岸线原始数据
  2. 将岸线数据转为.dat文件方便MATLAB读取
  3. 使用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

结果如下

如果觉得有用,麻烦点个赞啦~感谢~

如果有没有解释清楚的欢迎评论区提问~

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值