基于MATLAB的河道横断面的绘制
孙晓辉+徐红霞
摘 要:对垂直于路线中线方向的地面高低所进行的测量工作称为横断面测量。横断面图是确定河道横向施工范围、计算土石方数量的必要资料,所以横断面图的绘制显得尤为重要。MATLAB可以提供强大的图形编辑功能,不仅能绘制几乎所有的标准图形,而且其表现形式也是丰富多样的。文中探讨利用MATLAB软件绘制河道横断面的方法,实践证明这是一种简单易行、易操作的方法。
关键词:MATLAB;横断面图;绘制
中图分类号:TV222.1 文献标识码:A 文章编号:1006—7973(2018)2-0073-04
1 MATLAB软件介绍
人们很难从一大堆原始的数据中发现它们的含义,而数据图形恰能使视觉感官直接感受到数据的许多内在本质,发现数据的内在联系。MATLAB提供强大的图形编辑功能,既可以绘制多种图形,还可以对图形进行修饰。不仅能绘制几乎所有的标准图形,而且其表现形式也是丰富多样的。在面向对象的图形设计基础上,使得用户可以用来开发测绘专业的专用图形。
MATLAB有两类绘图命令,一类是直接对图形句柄进行操作的底层绘图命令,另一类是在底层命令的基础上建立起来的高层绘图命令。高层绘图命令简单明了、方便高效。利用高层命令,用户只需给出一些基本参数就能绘制出所需图形。本文就是利用高层命令和横断面测量的数据进行三维横断面图的绘制。
在测量领域中,人们经常面临一个解析函数描述数据(通常是测量值)的任务。对于这个问题可以应用插值法解决,在插值法里,数据假定是正确的,要求以某种方法描述数据点之间所发生的情况。拟合也是数据优化的一种方法,在测量中数据不够多时经常用这种方法来画图。绘制横断面图时应用插值、曲面拟合的方法可以很直观的显现出河道,这样有利于横断面的分析。而且在MATLAB中可以很好的利用三维数据进行曲面的插值、拟合。
2 横断面图的测量及数据的准备
2.1 工程概况
临商河为临邑县东部主要排涝河道,自南向北流入德惠新河。自临商河流入临邑县境内开始至王书干沟以北500m处约1公里河道与邢家渡引黄干渠并行。
本次测量全程9365m,起点为王书干沟以南550m处,终点为临商河流出临邑县境处。测道右岸的支沟只对其河底高程、底宽和开口宽度进行了测量。在文中取前3000m的测量点绘制横断面图。
2.2 横断面测量过程
长期以来,如何快速准确地进行河道横断面测量一直是困扰测量人员的一个难题。过去进行横断面测量的方法包括:花杆皮尺法(适用于:山区低等级公路,精度低)、经纬仪视距法(适用于:地形复杂地区,精度较高)、水准仪皮尺法(水准尺测高差,皮尺丈量平距,适用于:地形简单地区,精度高)等。现在一般都用全站仪、GPS等先进仪器。这次德州市临商河横断面图的测量采用GPS和水准测量相结合的方法,这种水准仪与GPS相结合的测量方法速度快、测量数据也符合工程规范要求。
2.2.1 测量准备
横断面测量是一项十分关键的工作,为此成立了专职的测量小组,由具备测量专业执业资格和多年施工工作经验的测量技术人员负责,测量过程按照规范要求进行并留有记录。测量过程中按前进方向分成左右两侧,分侧测量横断面方向上各边坡点间(或至中桩)的平距及高差,平距及高差的精度要求一般为0.1m。
2.2.2 测量仪器
测量中投入使用的测量仪器如:GPS、水准仪和塔尺等都符合规范的测量精度要求,并经过有关主管部门批准的具有资质的检验单位的检测,并在检测有效期内使用。所有测量仪器使用前都得到了工程师的批准。
2.2.3 測量过程
(1)河道横断面中桩的放样。根据设计的线路坐标进行GPS中桩放样。传统的中桩放样是采用全站仪(测距仪配合经纬仪)进行放样。本次测量使用GPS-RTK技术进行中桩放样,GPS-RTK技术为横断面测量提供了便利,横断面断面测量前,在手簿上可采用坐标放样的方法设定理论中桩的坐标。数据采集时,放样点将实时显示在手簿屏幕上,并提示偏离中桩的坐标差,以便操作员纠正放样点位到中桩上。
(2)河道横断面点的测量。横断面点的测量使用水准仪测量,在中桩上安置水准仪,横断面点上放置塔尺,读出上丝、中丝、下丝的读数,进而算出距离中桩的距离差,根据中桩的高程得到横断面点的高程。测量过程中在河道两岸分别有一个操作员携带塔尺进行立尺,同时在数据的读取过程中要检查数据的正确性,使数据符合规范。如果数据不符合规范要进行重测。
(3)河道横断面点水下高程的测量。在已知水面高程的情况下,利用测深锤进行河道底部的高程的测量,测量要进行两次测量,取两次测量结果的平均值作为河道底部横断面点的高程。
2.2.4 资料整理与测量核实
测量成果资料(包括观测记录、放样记录)、图表(包括横断面图、计算资料)进行了统一编号,妥善保管。对所有观测数据,都是随测随记,没有转抄、伪造。横断面测量完毕后进行了数据的检验,所有数据符合规范,可以用于横断面图的绘制及其面积的计算。
2.3 横断面测量数据的处理
测量数据经过EXCEL的处理,得到了横断面点距离中桩的距离及其高程,整理到hdm.xls一个表格,部分截图如图1所示:
3 横断面图的绘制
3.1 基于MATLAB的横断面图的绘制
利用MATLAB编写代码绘制横断面,在绘制的过程中主要的命令为plot3(x,y,z),这个命令是根据点的三维数据绘制出立体图。其主要代码为:
%提取里程点EXCEL文件,把文件储存在MATLAB的一个矩阵中
a=xlsread('C:\Users\laosan\Desktop\hdm','sheet1');
%提取横断面的里程
a1=a(:,1);
%提取横断面距离中桩的距离
a2=a(:,2);
%提取横断面点的高程
a3=a(:,3);
%画出横断面
plot3(a1,a2,a3,'-.r*');
Title('横断面');
xlabel('里程')
ylabel('距离中桩的距离');
zlabel('高程');
% 绘制格网
grid on;
所画的图像为图2:
利用MATLAB图形窗口的Rotote 3D命令从各个角度观察横断面的立体图:
沿着垂直于横断面的中轴方向观看得到图3和图4:
3.2 cass成图
在cass中选择“工程应用一生成里程文件一由纵断面线生成一新建”,自动弹出“由纵断面生成里程文件”对话框,设置各种参数,生成横断面线。还需要对横断面线进行编辑,包括横断面的序号、位置、长度等。
在地形图上,沿横断面线依次确定各个地物、地貌特征点的坐标、高程,选择“工程应用一高程点生成数据文件一有编码高程点”,输入文件名,生成坐标数据文件,保存为“xxx.dat”格式。编辑坐标数据文件。主要修改每条横断面在纵断面上的里程,横断面的序号。
选择“工程应用一绘制断面图一根据里程文件”,输入里程文件名称,根据实际需要,设置各种参数,生成每条横断面的断面图。
利用cass生成的横断面图截图为图5~图7:
通过MATLAB与cass绘制的横断面图对比可以看出,两者之间形似度非常大,而且MATLAB绘制的横断面图中的高程、里程及其距离都是根据测量数据得出来的,所以这种方法可以应用在横断面图的绘制。
3.3 三维拟合曲面的绘制
为了更形象地显示横断面,可以利用三维坐标以及数据插值、曲面拟合的方法拟合出横断面的三维彩色图,其主要的MATLAB代码为:
function hengduanmianhuatu
clf;
clear;
clc;
%提取里程点EXCEL文件
a=xlsread('C:\Users\laosan\Desktop\0200','sheet1');
%提取横断面的里程
x=a(:,1);
%提取横断面距离中桩的距离
y=a(:,2);
z=a(:,3);
%散点图
scatter3(x,y,z);
figure;
%插值
[X,Y,Z]=griddata(x,y,z,linspace(min(x),max(x))',linspace(min(y),max(y)),'v4');
%伪彩色图
pcolor(X,Z,Y);
shading interp;
title('横断面伪彩色图');
xlabel('里程')
zlabel('距离中桩的距离');
ylabel('高程');
%等高线图
figure,contourf(X,Z,Y);
title('横断面等高线图');
xlabel('里程')
zlabel('距离中桩的距离');
ylabel('高程'%拟合的三维曲面');
figure,surf(X,Y,Z);
title('横断面');
xlabel('里程')
ylabel('距離中桩的距离');
zlabel('高程');
运行程序得到的图像为图8~图11:
注释:等高线图本来是一条闭合的曲线,但是由于每一个中桩有好几个碎部点,并且在处理和绘制图像的过程中进行了插值和拟合,所以导致等高线并不是以一条闭合曲线的形式呈现的。图中峰值和低谷值是每一个横断面中最高的高程和最低的高程值。
4 结论
本文探讨了基于MATLAB的河道横断面的绘制,通过对比CASS绘制的横断面,发现这是一种可行的方法。并且为了更直观的显示河道横断面,利用横断面点的三维数据进行了横断面的拟合,得出了其三维曲面图。但是在该文中还有许多缺点,由于时间的关系,并没有利用MATLAB进行横断面面积的计算,不能从面积这一方面验证理论的正确性。
摘 要:对垂直于路线中线方向的地面高低所进行的测量工作称为横断面测量。横断面图是确定河道横向施工范围、计算土石方数量的必要资料,所以横断面图的绘制显得尤为重要。MATLAB可以提供强大的图形编辑功能,不仅能绘制几乎所有的标准图形,而且其表现形式也是丰富多样的。文中探讨利用MATLAB软件绘制河道横断面的方法,实践证明这是一种简单易行、易操作的方法。
关键词:MATLAB;横断面图;绘制
中图分类号:TV222.1 文献标识码:A 文章编号:1006—7973(2018)2-0073-04
1 MATLAB软件介绍
人们很难从一大堆原始的数据中发现它们的含义,而数据图形恰能使视觉感官直接感受到数据的许多内在本质,发现数据的内在联系。MATLAB提供强大的图形编辑功能,既可以绘制多种图形,还可以对图形进行修饰。不仅能绘制几乎所有的标准图形,而且其表现形式也是丰富多样的。在面向对象的图形设计基础上,使得用户可以用来开发测绘专业的专用图形。
MATLAB有两类绘图命令,一类是直接对图形句柄进行操作的底层绘图命令,另一类是在底层命令的基础上建立起来的高层绘图命令。高层绘图命令简单明了、方便高效。利用高层命令,用户只需给出一些基本参数就能绘制出所需图形。本文就是利用高层命令和横断面测量的数据进行三维横断面图的绘制。
在测量领域中,人们经常面临一个解析函数描述数据(通常是测量值)的任务。对于这个问题可以应用插值法解决,在插值法里,数据假定是正确的,要求以某种方法描述数据点之间所发生的情况。拟合也是数据优化的一种方法,在测量中数据不够多时经常用这种方法来画图。绘制横断面图时应用插值、曲面拟合的方法可以很直观的显现出河道,这样有利于横断面的分析。而且在MATLAB中可以很好的利用三维数据进行曲面的插值、拟合。
2 横断面图的测量及数据的准备
2.1 工程概况
临商河为临邑县东部主要排涝河道,自南向北流入德惠新河。自临商河流入临邑县境内开始至王书干沟以北500m处约1公里河道与邢家渡引黄干渠并行。
本次测量全程9365m,起点为王书干沟以南550m处,终点为临商河流出临邑县境处。测道右岸的支沟只对其河底高程、底宽和开口宽度进行了测量。在文中取前3000m的测量点绘制横断面图。
2.2 横断面测量过程
长期以来,如何快速准确地进行河道横断面测量一直是困扰测量人员的一个难题。过去进行横断面测量的方法包括:花杆皮尺法(适用于:山区低等级公路,精度低)、经纬仪视距法(适用于:地形复杂地区,精度较高)、水准仪皮尺法(水准尺测高差,皮尺丈量平距,适用于:地形简单地区,精度高)等。现在一般都用全站仪、GPS等先进仪器。这次德州市临商河横断面图的测量采用GPS和水准测量相结合的方法,这种水准仪与GPS相结合的测量方法速度快、测量数据也符合工程规范要求。
2.2.1 测量准备
横断面测量是一项十分关键的工作,为此成立了专职的测量小组,由具备测量专业执业资格和多年施工工作经验的测量技术人员负责,测量过程按照规范要求进行并留有记录。测量过程中按前进方向分成左右两侧,分侧测量横断面方向上各边坡点间(或至中桩)的平距及高差,平距及高差的精度要求一般为0.1m。
2.2.2 测量仪器
测量中投入使用的测量仪器如:GPS、水准仪和塔尺等都符合规范的测量精度要求,并经过有关主管部门批准的具有资质的检验单位的检测,并在检测有效期内使用。所有测量仪器使用前都得到了工程师的批准。
2.2.3 測量过程
(1)河道横断面中桩的放样。根据设计的线路坐标进行GPS中桩放样。传统的中桩放样是采用全站仪(测距仪配合经纬仪)进行放样。本次测量使用GPS-RTK技术进行中桩放样,GPS-RTK技术为横断面测量提供了便利,横断面断面测量前,在手簿上可采用坐标放样的方法设定理论中桩的坐标。数据采集时,放样点将实时显示在手簿屏幕上,并提示偏离中桩的坐标差,以便操作员纠正放样点位到中桩上。
(2)河道横断面点的测量。横断面点的测量使用水准仪测量,在中桩上安置水准仪,横断面点上放置塔尺,读出上丝、中丝、下丝的读数,进而算出距离中桩的距离差,根据中桩的高程得到横断面点的高程。测量过程中在河道两岸分别有一个操作员携带塔尺进行立尺,同时在数据的读取过程中要检查数据的正确性,使数据符合规范。如果数据不符合规范要进行重测。
(3)河道横断面点水下高程的测量。在已知水面高程的情况下,利用测深锤进行河道底部的高程的测量,测量要进行两次测量,取两次测量结果的平均值作为河道底部横断面点的高程。
2.2.4 资料整理与测量核实
测量成果资料(包括观测记录、放样记录)、图表(包括横断面图、计算资料)进行了统一编号,妥善保管。对所有观测数据,都是随测随记,没有转抄、伪造。横断面测量完毕后进行了数据的检验,所有数据符合规范,可以用于横断面图的绘制及其面积的计算。
2.3 横断面测量数据的处理
测量数据经过EXCEL的处理,得到了横断面点距离中桩的距离及其高程,整理到hdm.xls一个表格,部分截图如图1所示:
3 横断面图的绘制
3.1 基于MATLAB的横断面图的绘制
利用MATLAB编写代码绘制横断面,在绘制的过程中主要的命令为plot3(x,y,z),这个命令是根据点的三维数据绘制出立体图。其主要代码为:
%提取里程点EXCEL文件,把文件储存在MATLAB的一个矩阵中
a=xlsread('C:\Users\laosan\Desktop\hdm','sheet1');
%提取横断面的里程
a1=a(:,1);
%提取横断面距离中桩的距离
a2=a(:,2);
%提取横断面点的高程
a3=a(:,3);
%画出横断面
plot3(a1,a2,a3,'-.r*');
Title('横断面');
xlabel('里程')
ylabel('距离中桩的距离');
zlabel('高程');
% 绘制格网
grid on;
所画的图像为图2:
利用MATLAB图形窗口的Rotote 3D命令从各个角度观察横断面的立体图:
沿着垂直于横断面的中轴方向观看得到图3和图4:
3.2 cass成图
在cass中选择“工程应用一生成里程文件一由纵断面线生成一新建”,自动弹出“由纵断面生成里程文件”对话框,设置各种参数,生成横断面线。还需要对横断面线进行编辑,包括横断面的序号、位置、长度等。
在地形图上,沿横断面线依次确定各个地物、地貌特征点的坐标、高程,选择“工程应用一高程点生成数据文件一有编码高程点”,输入文件名,生成坐标数据文件,保存为“xxx.dat”格式。编辑坐标数据文件。主要修改每条横断面在纵断面上的里程,横断面的序号。
选择“工程应用一绘制断面图一根据里程文件”,输入里程文件名称,根据实际需要,设置各种参数,生成每条横断面的断面图。
利用cass生成的横断面图截图为图5~图7:
通过MATLAB与cass绘制的横断面图对比可以看出,两者之间形似度非常大,而且MATLAB绘制的横断面图中的高程、里程及其距离都是根据测量数据得出来的,所以这种方法可以应用在横断面图的绘制。
3.3 三维拟合曲面的绘制
为了更形象地显示横断面,可以利用三维坐标以及数据插值、曲面拟合的方法拟合出横断面的三维彩色图,其主要的MATLAB代码为:
function hengduanmianhuatu
clf;
clear;
clc;
%提取里程点EXCEL文件
a=xlsread('C:\Users\laosan\Desktop\0200','sheet1');
%提取横断面的里程
x=a(:,1);
%提取横断面距离中桩的距离
y=a(:,2);
z=a(:,3);
%散点图
scatter3(x,y,z);
figure;
%插值
[X,Y,Z]=griddata(x,y,z,linspace(min(x),max(x))',linspace(min(y),max(y)),'v4');
%伪彩色图
pcolor(X,Z,Y);
shading interp;
title('横断面伪彩色图');
xlabel('里程')
zlabel('距离中桩的距离');
ylabel('高程');
%等高线图
figure,contourf(X,Z,Y);
title('横断面等高线图');
xlabel('里程')
zlabel('距离中桩的距离');
ylabel('高程'%拟合的三维曲面');
figure,surf(X,Y,Z);
title('横断面');
xlabel('里程')
ylabel('距離中桩的距离');
zlabel('高程');
运行程序得到的图像为图8~图11:
注释:等高线图本来是一条闭合的曲线,但是由于每一个中桩有好几个碎部点,并且在处理和绘制图像的过程中进行了插值和拟合,所以导致等高线并不是以一条闭合曲线的形式呈现的。图中峰值和低谷值是每一个横断面中最高的高程和最低的高程值。
4 结论
本文探讨了基于MATLAB的河道横断面的绘制,通过对比CASS绘制的横断面,发现这是一种可行的方法。并且为了更直观的显示河道横断面,利用横断面点的三维数据进行了横断面的拟合,得出了其三维曲面图。但是在该文中还有许多缺点,由于时间的关系,并没有利用MATLAB进行横断面面积的计算,不能从面积这一方面验证理论的正确性。