在arcgis中将图层导出为bln文件(最详细)

bln格式文件介绍

BLN 文件格式是一种简单的文本文件格式,通常用于 Golden Software 的绘图软件,如 Surfer。它用于定义边界线、断层线或其他线性数据。BLN 文件格式相对简单,主要包括以下几个部分:

每条线的开始行:这一行通常包含两个或三个数值:

  1. 点的数量:即该条线由多少个点组成。

  2. 闭合标志(可选):通常是 01,其中 1 表示这是一个闭合的多边形,0 表示非闭合的线条。

  3. ID 或标签(可选):一个额外的数字或文本标签,用于标识线条或多边形。

坐标点:在开始行之后,每行包含一对坐标(X 和 Y),这些坐标定义了线条的形状。这些坐标通常是经纬度或其他地图坐标系中的点。

这是一个描述三角形的bln文件内容示例:

3, 1
100.0, 200.0
110.0, 240.0
120.0, 180.0
 

地理数据shp文件下载

首先我们需要获得一个区域的边界数据:这里我的数据采用免费的数据开源网站GADM进行下载:

GADM --- GADM

数据处理

接下来将我们下载得到的文件在arcgis中打开:

7df552e6c30b4310a1f56d9878c6908b.png

可以看到一幅冰岛的图层:

d258ea19af714904991c5b1d6be4d9cd.png

属性表内容只有一个面:

e00cb5b770334cf696aa5354dfbb54bc.png

我们先把面转成线:

b38d7c47332941c8a4e7237b5ca4af4b.png

线导出结果:

3eccd512e9d04f188c27347054dee142.png

d1a59fcb3b474dc8925c7bef4812bc3e.png

接下来把线导出成点。

(注:如果最终需要的文件是一个地区或者流域的大致轮廓的边界文件,为了避免连接边界的时候出现问题,最好进行数据预处理,将多余的破碎的部分删除,只保留主体,这个部分需要手动操作。如果不需要,可以跳过数据预处理部分

数据预处理:右击arcgis上方空白部分,调出工具栏,启用Editor;

3e151de9708542629852c92c3c7d371f.png

49ba7ef489b04b3cb6e95979c80c26b0.png

打开Editor,选择Start Editing开始编辑,选择线图层

de22a9a920494a919a44e3a407b856ee.png

手动选择破碎的区域,右键删除(这里主要的破碎区域为冰岛的附属小岛)

fbf94736be444b88928d0fc439a447c4.png

删除所有的破碎区域之后,要记得保存结果并结束编辑:

a4c6be6ed4ab4e9aaed22f99e698f3f8.png

删除所有破碎区域之后的冰岛线图层:

9a5501b8921140b4bec9cc95f25111ff.png

数据处理:

接下来把线数据导出为点数据,为了尽可能保留图层的边界特征,采用在转折处生成点,这样生成的点数将远远大于直接进行直线转点:

df7cb33e2b974a6f943bb3c9db0be851.png

线图层转点结果:

c6718f070af94f9a8b2571545883a57a.png

09dcef62f8b64692b41801018c04648d.png

添加x,y字段(经纬度数据)

此时要确保自己的图层在Geographic Coordinate System下,且为GCS_WGS_1984等标准格式下:如果没有要使用投影工具进行转化:

fcdc5225808a496aba8b19693fa30b29.png

右击x和y字段(如果没有经纬度字段需要使用Add Filed自行添加),选择calculate Geometry,计算经纬度坐标。(计算出的经纬度数据为-180到180之间为正确值)

fdd8a319b98d416d811d226d2eb2ab74.png

  1. 计算完经纬度的数据需要重新导出为txt 
    • 在 ArcMap 中,打开你的项目并加载 Polyline 图层。
    • 右键点击图层,选择“打开属性表(Open Attribute Table)”。
    • 在属性表视图中,点击“选项(Table Options)”按钮,选择“导出(Export)”。
    • 在导出对话框中,选择输出类型是TXT (可能的输出为.txt或者.csv)

若输出的结果为csv则直接使用,若为txt建议先转化为csv,转化方式如下:

35e7a3200fb04bb59e53c42b6d69b47d.png

打开Matlab,输入下面代码,文件路径需要自行替换:

% Specify the path to the input text file and the output CSV file
inputFile = 'path_to_your_file\filename.txt';
outputFile = 'path_to_your_file\filename.csv';

% Read the data from the text file
data = readtable(inputFile, 'Delimiter', '\t', 'ReadVariableNames', false);

% Write the data to a CSV file
writetable(data, outputFile, 'Delimiter', ',', 'WriteVariableNames', false);

调整一下生成的csv文件的格式:

8e21e58816924d47bf6c81bc5731d6ac.png

选中所有数据(即选中第一列,可以选中第一行后滑到最下面,按住shift键,点击最后一行即可按列全部选中),在这种情况下数据都放在第一列中,虽然看起来好像很长,占用了其他列的位置。

在excel上边栏中选择:数据->分列->分隔符号->勾选逗号(分隔符号根据实际情况决定):

be17c775222b4232ab967eb2f238e7d9.png

分列后结果:

f7905596f23848969157abad82c0af03.png

删除其他列,只保留点号和经纬度坐标:

0d77df9a66274a0690d8fa034132e5b8.png

bln文件生成

方法一:直接打开csv或者txt文件属性,将其后缀名改为.bln

51b72192294145f1bdcb0cc8fb6b03e2.png

若出现这种在文件名字后面看不到后缀名的情况,是因为后缀名被隐藏了,可以显示后缀名:

(平时使用时后缀名显示是不建议打开的,因为可能在修改文件名的时候不小心改变了后缀名,导致系统不知道要用什么软件来打开这个文件)

在主文件夹处点击这三个点:

e3206f660bbb4e329257db26380b19e0.png

选择选项:

30e5db8534e44909bc24f83877752bd1.png

在文件夹选项中点击查看,取消勾选“隐藏已知文件类型的拓展名”:

43f04c2d0ae04690bb3651ea1960d5b7.png

此时可以看到文件后缀名已经正确显示了:

c664cdbfb42343d2bdf737bb5b8d8c22.png

修改文件后缀名为.bln:

4c3487df3a69416aafa84a2531feaffc.png

修改结果:

7e0771cce8ab431bb6b609e063e24932.png

但现在第一列并不是标准的bln格式,需要手动修改第一行数据为:点数,闭合标志……

方法二:

打开Matlab,输入下面代码:

% 读取 CSV 文件,跳过标题行(如果有)并指定使用逗号作为分隔符
data = readmatrix('path_to_your_file\filename.csv', 'Delimiter', ',', 'Range', 'B2');

% 计算点的数量
numPoints = size(data, 1);

% 选择是否闭合多边形,1 为闭合,0 为不闭合
isClosed = 1;

% 创建输出文件
outputFile = fopen('path_to_your_file\filename.bln', 'wt');

% 写入点的数量和闭合标志
fprintf(outputFile, '%d, %d\n', numPoints, isClosed);

% 写入点的坐标(第一列为经度,第二列为纬度,因为跳过了点号)
for i = 1:numPoints
fprintf(outputFile, '%f, %f\n', data(i, 1), data(i, 2));
end

% 关闭文件
fclose(outputFile);

最后就得到我们需要的bln文件了:

c2c50e86736d40758b2baadbcd60aa14.png

        如果你觉得之前生成的点数过多而不需要那么高的精度,或者是遇到一些点连接顺序出错的问题,可以通过减少点数来解决。因为通过Feature Vertices To Points生成的点是相对均匀的,我们可以通过每隔n个点保留一个点的方法来减少点数,同时保留图像形状的正确显示。

        打开matlab,输入一下代码实现转换:

clc;
% 指定BLN文件的路径
file_path = 'file.bln'; %此处替换为你的.bln文件的相对路径或者绝对路径

% 读取文件
data = readmatrix(file_path, 'FileType', 'text');

% 假设数据的坐标点从第二行开始,第一列是X坐标,第二列是Y坐标
points = data(2:end, 1:2);

% 初始化一个新数组来存储每隔50个点的第一个点
reduced_points = [];

% 每50个点选取第一个,可以将50修改为其他数字来决定处理后剩余的点数
for i = 1:50:size(points, 1)
    reduced_points = [reduced_points; points(i, :)];  % 正确使用变量名
end

% 更新第一行数据,假设第一行初始位置为点数信息
new_point_count = size(reduced_points, 1);
if size(data, 2) > 1
    first_row = [new_point_count, data(1, 2:end)];  % 保留第一行其他可能的元数据
else
    first_row = new_point_de_first_row;  % 假设第一行数据只包含点数,进行更新
end

% 创建新数据数组,包含更新后的第一行和点数据
new_data = [first_row; reduced_points];

% 创建一个新的输出文件,包含处理后的点
output_file_path = strrep(file_path, '.bln', '_processed.bln');

% 使用 dlmwrite 写入文件,这里使用空格作为分隔符
dlmwrite(output_file_path, new_data, 'delimiter', ' ', 'precision', 9);

fprintf('Processed data saved to %s\n', output_file_path);

处理结果:

 快开始你的工作吧!

  • 20
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值