基于MATLAB GUI坐标转换软件设计与实现

时间:2022-07-13 09:20:24

基于MATLAB GUI坐标转换软件设计与实现

【摘 要】MATLAB软件是以矩阵为单位进行数据的运算与处理,MATLAB的程序设计过程中,对象的句柄是非常重要的一个概念。每个对象都有自己独立的句柄,通过操作句柄,来实现对象的控制和修改。GPS测量的成果是基于WGS84椭球的纬、经度坐标和大地高,而我们实际应用中需要用到的是北京54或西安80的高斯投影平面坐标或者是地方坐标,因此就存在一个坐标转换的问题。本文介绍两种坐标转换方法:空间三维七参数坐标转换方法和平面二维四参数转换方法,利用这两种方法通过MATLAB设计界面并编写程序实现对Excel中的坐标数据进行坐标转换。

【关键词】MATLAB;全球定位系统;七参数;四参数

Design and Implementation of Coordinate Transformation Software Based on MATLAB GUI

YANG Zhao-ying DU Ming-yi CAI Guo-yin

(Beijing University of Civil Engineering and Architecture “City Mapping” State Key Laboratory of

National Adiminstration of Surveying,Mapping and Geoinformation,Beijing 100044,China)

【Abstract】MATLAB software based on the matrix as a unit for data and processing operations, In the MATLAB program design process , object handle is a very important concept . Each object has its own separate handler,by operating the handle, to achieve the object of the control and modify .GPS survey results are based on WGS84 ellipsoid latitude, longitude coordinates and geodetic height, And we need to use the actual application is Beijing Geodetic Coordinate System 1954 or Xi'an Geodetic Coordinate System 1980 Plane Coordinate or local coordinates, Therefore, there exists a coordinate transformation problem. This article describes two coordinate conversion method: Three-dimensional coordinate space conversion seven-parameters method and Two-dimensional four-parameter conversion method,Through the use of these two methods MATLAB interface design and programming to achieve the coordinate data in Excel coordinate conversion.

【Key words】MATLAB GUI;GPS;Seven-parameters;Four-patameters

0 引言

MATLAB软件是“矩阵实验室”――Matrix Laboratory的缩写,是用C语言进行编写的。它具有语言书写简单,语句功能强大,封装了丰富的数学函数,我们可以直接调用这些数学函数。MATLAB对于数学运算,特别是矩阵运算,非常高效,而文件批量坐标转换又涉及复杂的数据计算,这就是为什么利用其进行程序编写实现的原因。

Excel是微软公司的办公软件Microsoft office的组件之一,它可以进行各种数据的处理、统计分析和辅助决策操作。将原始数据存放在Excel中,Excel可以批量对原始数据进行预处理,达到我们想要的数据格式,可以将文本导入到Excel中,读取与存储都易于操作。

随着全球导航定位系统的发展,尤其是美国的GPS技术发展,其具有全天候,连续性,实时性等优势,已经逐渐取代了传统的测量方式。GPS测量成果是基于WGS84椭球的大地坐标,即:大地纬度B,大地精度L,大地高H。而我们通常所需要的是基于克拉索夫斯基椭球的北京54坐标系或基于第16届IGUU大会推荐的1975年国际椭球的西安80坐标系。因此我们需要将GPS所测的WGS84大地坐标转换成我们所需的北京54或西安80坐标。

本文主要介绍两种坐标转换方法:七参数空间坐标转换方法和四参数平面坐标转换方法,通过MATLAB设计界面并编写程序实现这两种方法,然后通过转换得到的坐标比较分析这两种的精度及适用范围。

1 MATLAB简介

1.1 MATLAB系统概述

MATLAB是美国MathWorks公司出品的商业数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括MATLAB和Simulink两大部分。

MATLAB是英文“矩阵实验室”――Matrix Laboratory的缩写,其全部采用C语言编写。具有如下特点:

(1)基本数据单位是矩阵,矩阵运算如同其他高级语言中的变量操作一样方便,矩阵无需定义即可采用;

(2)高效的数值计算及符号计算功能,能使用户从繁杂的数学运算分析中解脱出来;

(3)具有完备的图形处理功能,实现计算结果和编程的可视化;

(4)友好的用户界面及接近数学表达式的自然化语言,使学者易于学习和掌握;

(5)功能丰富的应用工具箱(如信号处理工具箱、通信工具箱等) ,为用户提供了大量方便实用的处理工具。

1.2 MATLAB程序编写的基本原则

突破以往其它程序语言经常采用的循环思想,尽量采用MATLAB矩阵式语言书写程序,使得程序简洁,执行效率高。在程序设计中尽量避免重复的脚本代码,多用MATLAB提供的函数。系统中的函数要比用一般代码编写的函数执行效率高很多。在编写比较大的程序时,应该对各个细节以函数或子过程方式处理,避免矩阵混淆。

在程序编制过程中,各个功能部分尽量封装在函数中,这样不但可以减少全局变量个数,而且对各个函数的修改要比对整个程序的修改方便得多。

1.3 MATLAB的文件类型

M文件:用于存储函数过程;

Figure文件:用于显示、存储图像;

在MATLAB中,最常用的是M文件。MATLAB是一种解释性语言,用户发出的指令需要送到MATLAB系统内解释,而M文件实际上就是记录指令的文本,用以统一将命令送入系统内进行解释。

M文件有命令式(Script)和函数式(Function)两种形式。命令式文件就是MATLAB内部命令的简单叠加,MATLAB会按顺序执行文件中的命令,这种方式常用来形成主函数。函数式文件用以解决参数传递和函数调用的问题,每个具体的功能一般用此方式实现,它的第一句以Function语句为引导。

2 坐标转换相关理论

2.1 三维空间坐标转换

WGS84与BJ54的坐标转换问题,实质是WGS-84椭球体到BJ54椭球体的转换问题。

如果我们是需要把WGS84的经纬度坐标转换成BJ54的高斯投影坐标,那就还会涉及到投影变换问题。而如果我们所需的坐标是地方坐标,那么我们还要利用四参数法将北京54坐标转换成北京地方坐标。因此,这个转换过程,一般的GPS数据处理软件都是采用下述步骤进行的:

1)WGS84(B,L)――WGS84(X,Y,Z),空间大地坐标到空间直角坐标的转换。

2)WGS84(X,Y,Z)――北京54(X,Y,Z),坐标基准的转换,即Datum转换。通常有三种转换方法:七参数、简化三参数、Molodensky。

3)北京54(X,Y,Z)――北京54(B,L),空间直角坐标到空间大地坐标的转换。

4)北京54(B,L)――北京54(x,y), 高斯投影正算。

5)北京54(x,y)――地方坐标(x,y),四参数转换。

通过下面的流程图,我们可以更清晰地了解整个流程。

图1 WGS84、北京54、北京地方坐标转换流程图

2.2 二维平面坐标转换

二维坐标转换适用于小范围内GPS坐标向地方坐标的转换,在实际测量时,必须将GPS接收机测得的大地经纬度坐标B、L(基于WGS一84椭球)转换成本地平面直角坐标x、y(基于本地椭球) 。其转换过程为:

(1)将公共点的WGS84坐标投影到其对应椭球的高斯平面上,得到WGS84的平面坐标;

(2)利用两个以上的点,采用最小二乘方法求解四参数;

(3)先将需要进行坐标转换的WGS84坐标投影到其对应椭球的高斯平面上,得到WGS84的平面坐标,然后根据第二步求得的四参数,将其转换为本地平面直角坐标。

为了使上面的过程更为清晰,现以WGS84的大地坐标与转换到北京54坐标所作的流程图为例进行说明:

图2 二维平面坐标转换流程图

3 MATLAB GUI界面设计及程序实现

通过参考南方测绘GPS数据处理中的坐标转换软件和Coord MG坐标转换软件界面,经过综合分析比较,我设计出了这款基于MATLAB GUI实用、简洁、界面友好的zbjh2013坐标转换软件,zbjh2013主要用七参数和四参数两种转换方法进行三维空间和二维平面坐标转换。

3.1 MATLAB GUI相关内容介绍

MATLAB具有创建图形用户界面(GUI)的功能。GUI是用户与计算机或计算机程序的接触点或交互渠道,是包含诸如窗口、图标、菜单和文本等图形对象的可操作界面。通过定制用户与MATLAB交互的命令窗口,GUI能有效组织数据流程,使处理方法易于使用和推广,同时也使人机交互更加友好。

在这次坐标转换软件设计与实现过程中主要用到了以下几种控件:

(1)面板(Panel):Panel是GUI对象的容器,当移动Panel的位置进行GUI编辑时,Panel的子对象也随之移动,并保持它们在Panel中的相对位置。

(2)弹起式菜单(Pop-up Menu):Pop-up Menu与Listbox类似,都使用String属性显示一组选项,区别为:①Pop-up Menu更节省界面空间,需要左键单击才能调出这些选项;②Pop-up Menu不能同时选择多个选项。

(3)单选按钮(Radio Button):Radio Button通常组合使用,用于显示一组互斥的状态。

(4)复选框(Check Box):Check Box与Radio Button类似,用于显示一对互斥的状态,通过鼠标左键单击,可在“选中”与“未选中”两种状态之间切换。

(5)静态文本(Static Text):Static Text通常用于显示其它对象的数值、状态。

(6)可编辑文本(Edit Text):Edit Text允许用户修改文本内容,用于数据的输入与显示。若Max-Min>1,允许Edit Text显示多行文本;否则,只允许单行输入。

(7)列表框(Listbox):Listbox用于显示一组选项,通过鼠标单击左键,可选中任意一个或多个选项,当Max-Min>1时,允许同时选中多个选项;否则,只允许一次选择一项。

(8)触控按钮(Push Button):通过点击Push Button可以调用回调函数,实现某项功能。

(9)表格(Table):Table为二维的可视化表格,可用于显示控制点坐标,通过编写程序来实现点击按钮添加和删除数据。

(10)选项卡控件(TabStrip Control),通过TabStrip Control可以进行局部区域界面之间进行切换。

3.2 MATLAB程序实现相关代码

框架搭建好之后,在MATLAB GUI对应的M文件进行程序编写过程中,解决以下几个难点:

(1)不同GUI间参数传递、回调函数调用问题;

主界面的代码

[scs1,scs2,scs3,scs4] = conversionMethod;

handles.dx = scs1;

handles.dy = scs2;

handles.xzj = scs3;

handles.cdyz = scs4;

子界面的代码

varargout{1} = handles.scs1;

varargout{2} = handles.scs2;

varargout{3} = handles.scs3;

varargout{4} = handles.scs4;

delete(handles.conMet_scs);

(2)将子界面的所有控件复制到主界面上,通过TabStrip实现选项卡功能;

将子界面的所有控件复制到主界面上的代码

hSub = Sub('Visible','off');

hPal2 = copyobj(findobj(hSub,'Tag','fileTransfer_uipanel'),hObject);

set(hPal2,'Position',get(handles.Point_uipanel,'Position'),... 'Visible','off');

handles.hPal2 = hPal2;

delete(hSub);

通过点击选项卡实现点坐标与文件坐标转换的切换的代码

Tabstripval = hObject.SelectedItem.index;

switch Tabstripval

case 1

set(handles.Point_uipanel,'Visible','on');

set(handles.hPal2,'Visible','off');

case 2

set(handles.Point_uipanel,'Visible','off');

set(handles.hPal2,'Visible','on');

end

(3)对table空间的操作,通过点击相应按钮逐行添加和删除数据。

逐行添加数据的代码

global coord;

B = str2double(get(handles.edit1,'string'));

L = str2double(get(handles.edit2,'string'));

x = str2double(get(handles.edit3,'string'));

y = str2double(get(handles.edit4,'string'));

raw = {B,L,x,y };

coord = [coord;B L x y];

set(handles.calculateQCS_uitable1,'Data',coord);

逐行删除数据的代码

data = get(handles.calculateQCS_uitable1,'Data');

[row,column] = size(data);

for k = row:-1:1

data(row,:) = [];

set(handles.calculateQCS_uitable1,'Data',data);

end

3.3 MATLAB GUI设计界面

图3 主界面1(单点坐标转换)

图4 主界面2(坐标批量转换)

图5 投影设置界面

图6 四参数设置及计算四参数界面

图7 七参数设置及计算七参数界面

(1)选择源椭球类型,待转转换坐标类型;

(2)选择目标椭球类型,目标坐标类型;

(3)通过点击菜单“设置”“投影设置”,通过投影设置界面,设置投影方式、中央子午线,投影尺度及X常数和Y常数;

(4)通过点击菜单“设置”“四参数”或“七参数”,选择一种坐标转换方式,通过四参数或七参数设置界面,输入四参数或七参数,如果四参数或七参数未知,则通过点击四参数或七参数设置界面中的计算四参数或七参数进行四参数或七参数的求解,四参数需要至少两个控制点坐标,而七参数需要至少三个已知控制点坐标,配置好参数坐标转换方式之后,选中转换设置中的投影设置和四参数或七参数复选框;

(5)通过选项卡进行单点坐标或以文件的形式批量坐标转换。

4 结论

将MATLAB GUI与坐标转换相关知识结合起来,MATLAB具有矩阵运算的特长避免了程序中出现大量循环体。GUI界面设计简洁、直观、友好。既能够实现单个点的坐标转换,有可以Excel文件的形式实现批量坐标转换。不管是三维空间或二维平面坐标,转换得到的成果完全能够满足工作的精度要求,到达最初的设计目标。

通过大地测量学课本与坐标转换相关的知识及网上下载的一些论文的阅读学习,对坐标转换的理论认知更加深入,受益匪浅。

【参考文献】

[1]孔祥元,郭际明,刘宗泉.大地测量学基础[M].武汉:武汉大学出版社,2008.

[2]罗华飞.MATLAB GUI设计学习手记[M].2版.北京:北京航空航天大学出版社,2011.

[3]林立贵.坐标转换计算程序[J].测绘与空间地理信息,2006(6):64-65.

[4]王玉林,葛蕾,李艳斌.新型界面开发工具[J].工程实践及应用技术,2008,34(6):50-52.

[5]陈杰.MATLAB宝典[M].北京:电子工业出版社,2007:667-816.

[6]张喜海.浅谈WGS84与北京54之间的转换[J].城市建设理论研究,2012(18).

[7]李甜.WGS84与北京54坐标转换研究[J].商品储运与养护,2008,30(8).

[8]王解先.WGS-84与北京54坐标的转换问题[J].大地测量与地球动力学,2003(3):2.

上一篇:对民营经济发展的税收政策思考 下一篇:38例甲状腺疾病外科手术治疗临床分析