【VB开源代码栏目提醒】:网学会员为需要VB开源代码的朋友们搜集整理了GPS通讯程序设计 - 软件工程相关资料,希望对各位网友有所帮助!
GGPPSSGGIISS 刘海滨
毕业设计论文 :1. GPS简介及其基本理论以及MapX控件 GIS内容提要。
结合GIS工具软件与当今可视化开发语言的集成二次开发方式就成为GIS应用开发的主流。
它的优点是既可以充分利用GIS工具软件对空间数据库的管理、分析功能,又可以利用其它可视化开发语言具有的高效、方便等编程优点,集二者之所长,不仅能大大提高应用系统的开发效率,而且使用可视化软件开发工具开发出来的应用程序具有更好的外观效果,更强大的数据库功能,而且可靠性好、易于移植、便于维护。
并用Microsoft提供的ActiveX MSComm组件建立简单简洁的通讯接口程序。
实现简单的通讯方式。
程序利用网络实现了三种数据传输
通信协议,
程序结构简洁,层次清楚,而且具有很好的应用价值。
:GPS、MapX控件 GIS、
VB、MSComm组件、数据链路层、数据传输协议。
:
论文内容着重介绍GPS的原理以及简单的GIS图形设计。
并用
VB编程工具实现简单模拟通讯功能说明GPS、GIS
网络的通讯方法。
可以充分利用GIS工具
软件对空间数据库的管理、分析功能,又可以利用其它可视化开发语言具有的高效、方便等编程优点,集二者之所长,不仅能大大提高应用系统的开发效率,而且使用可视化软件开发工具开发出来的应用程序具有更好的外观效果,更强大的数据库功能,而且可靠性好、易于移植、便于维护。
尤其是使用OCX技术利用GIS功能组件进行集成开发,更能表现出这些优势。
Map Info公司顺应这一发展潮流,该公司开发的 MapX就是一种受到用户广泛欢迎的功能强大的地图分析功能的 ActiveX控件,本文将对该控件作简要的介绍。
: 一、 关于GPS的概述。
GPS是英文 Navigation Satellite Timing and Ranging/Global Position System 的字头缩写词NAVSTAR/GPS的简称。
它的含义是利用卫星的测时和测距进行导航以构成全球卫星定位系统。
现在国际上已经公认:将这一全球定位系统简称:GPS. 自古以来,人类就致力于定位和导航的研究工作。
1957年10月世界上第一颗卫星发射成功之后,利用卫星惊醒定位和导航的研究工作提到了议事日程。
1958年底,美国海军武器试验室委托霍布金斯大学应用物理实验室研究美国军用舰艇导航服务的卫星系统,即海军导航卫星系统(Navy Navigation Satellite System—NNSS).这个系统中,卫星的轨道通过地极,所以又称为子午仪卫星导航系统Transit.1964年1月用于北极星核潜艇的导航定位研究成功,并逐步用于各种军舰的导航定位。
1967年7月,经美国政府批准,对其广播星历解密,并提供民用,为远洋船舶导航和海上定位服务。
由此显示出了卫星定位的巨大潜力。
尽管子午仪卫星导航系统已得到广泛应用,并显示出巨大的优越性,但是,这系统再实际应用方面却存在十分严重的缺陷。
改系统是由5-6个卫星组成的导航网。
卫星运行高度较低(平均约1000km),运行周期为107分钟。
对同一个卫星每天通过次数最多为13次。
由于采用多普勒定位原理,一台接收机一般需要观测15次合格的卫星通过,才能达到±10M的单点定位精度,再全球范围内,它给出的定位信息只能是全天候的连续二维坐标――经度和纬度,不能给出高程。
这种系统,一方面由于所需的观测时间较长,不能给用户,尤其是高动态用户(如:飞机、车辆等)提供实时和导航服务;另一方面,由于卫星导航较低,受大气影响严重,定位精度的提高受到限制,因而限制了高动态用户和高精度用户的使用。
对舰船而言,利用这个系统只能对惯性导航系统和其他无限电导航系统进行连续的精确修正,它的作用远不能满足全球实时定位的要求。
鉴于子午仪卫星导航
系统对潜艇和对水面船舶导航的可靠服务以及该系统存在的缺陷。
美国于60年代末着手研究新的卫星导航系统,以满足海陆空三军和民用不盟对导航越来越高的要求。
为此,美国海军提出了名为“Timation”的计划,该计划采用12-18颗卫星组成的全球定位网,卫星高度约10000Km,轨道呈圆形,周期为八小时,并与1967年5约31日和1969年9约30日分别发射了timation-1和Timation-2两颗试验卫星,与此同时,美国空军提出了名为”621-B”计划,它采用3-4个星群覆盖全球,每个星群由4-5颗卫星组成,中间一颗采用同步定点轨道,其余几颗采用周期为24小时倾斜轨道。
这两种计划的目标一致,即建立全球定位系统。
但两个计划的实施方案和内容不同,各有优缺点。
考虑到两个计划的各自优缺点以及美国难于同时负担研制两套系统的庞大经费开支,1973年美国代理国防部长批准成立一个联合计划局,并在洛杉矶空军航天处内设立办事机构。
在联合计划局的领导下,诞生了GPS方案。
这个方案是由24颗卫星组成的实用系统。
这些卫星分布在互成120。
的三个轨道平面杉,每个轨道平面平均分布8颗卫星。
这样,对于地球任何位置,均能同时观测到6-9颗卫星。
预计粗码定位经度为100m左右,精码定位经度为10m左右。
1978年,由于
压缩国防预算,减少了对GPS计划的拨款,于是将实用系统的卫星数由24颗减为18颗,并调整了卫星配置。
18颗卫星分布在互成60。
的6个轨道面上,轨道倾角为55。
。
每个轨道面上布设3颗卫星,彼此相距120。
。
从一个轨道面的卫星到下一个轨道面的卫星之间错过40。
。
这样的卫星配置即使全部卫星正常工作,其平均可靠度仅为0.9969。
如果卫星发生故障,将使可靠性大大降低。
因此1990年初又对卫星配置进行了第三次修改。
最终的GPS
方案是由21颗工作卫星和三颗在轨备用卫星(如图) 卫星的轨道参数基本上与第二方案相同。
只是为了减少微型漂移,降低对所需轨道位置保持的要求,为卫星的高度提高了49km即长半轴由26650km提高到了26609km.这样,由每年调整一次卫星位置改为每七年调整一次。
GPS实施计划共分为三个阶段: 第一阶段:为方案论证和初步
设计阶段。
从1973年到1979年,共发射了4颗试验卫星,研制了地面接收机及建立地面跟踪网,从硬件和软件上进行了试验。
试验结果令人满意。
第二阶段为全面研制和试验阶段:从1979年到1984年,又陆续发射了7颗式样卫星。
这一阶段称之为Block I.与此同时,研制了各种用途的接收机,主要是
导航型接收机同时测地型接收机也相继问世。
试验表明,GPS的定位经度远远超过设计标准。
利用粗码的定位精度几乎提高了一个数量级,达到14m。
由此证明,GPS计划是成功的。
第三阶段为使用组网阶段。
1989年2月4日第一柯GPS工作卫星发射成功宣告了GPS系统进入工程建设极端。
这种工作卫星称为BlockII和BlockIIA卫星。
二、 GPS的组成: GPS包括下列三大部分:GPS卫星空间部分、地面支撑系统地面监控部分、GPS接收机用户部分。
1. GPS卫星:自1978年2月22日发射第一颗GPS试验卫星以后,到1985年10月9日发射最后一颗GPS试验卫星,共有11颗试验卫星在轨道上运行。
这些试验卫星称为blockI卫星。
现在只有四颗卫星仍在
工作。
试验卫星是在加利福尼亚的范登堡空军基地采用AtlasF火箭发射入轨的。
运行轨道呈近似圆形,长半轴26560km,倾角为64度,轨道高度约20000km.这些卫星只分布在AC两个轨道平面那,其目的是为了保证亚利桑那州的Yama试验基地能够获得最长的连续观测时间。
每颗卫星按下列方式编号: a 顺序编号按照GPS试验卫星发射时间的先后次序对卫星进行编号。
b 根据GPS试验卫星发射时间的伪随机噪声码PRN码对卫星进行编号,在导航定位中,采用PRN编号,这一规则一直沿用至今。
c IRON编号:IRON伪Inter Range Operation Number的缩写,意思是内部距离操作码。
IRON编号是美国和加拿大组成的北美空军指挥部给定的一种随机号,以此识别所选择的目标。
d NASN编号:这是美国航天局在其文件中给GPS试验卫星的编号。
e 国际识别号:他的第一部分表示该卫星的发射年代,第二部分表示该发射卫星的序列号,字母A表示发射的有效负荷。
2地面支撑系统: 在导航定位中,采用的是卫星后方交会原理。
因此必须首先知道卫星的位置,而位置是由卫星星历计算出来的。
地面支撑系统的功能就是观测卫星并计算其星历,编辑电文注入卫星,然后由卫星以广播星历的方式实时地传送给用户。
地面支撑系统包括1个主控站,3个注入站和5个监测站如图: 3用户接收机: 自从GPS全部建成以后,它将昼夜不停地发送导航定位信息,在地球地任何地方和任何时间实现实时定位。
这其中最终要地关键设备就是用户接收机。
近十几年,世界各国地企业公司和研所单位都相继研制各种类型地接收机。
据1998年1月出版地《GPS WORLD》统计,已有60多家企业生产出400多种型号地GPS接收机。
GPS接收机可以按照不同要求进行分类如按编码信息分类,按接受地数据分类,按接收机通道分类、按照动态性能分类、按用途分类、按工作模式分类等。
但总起来说,可分为两大类:导航型和测地型。
导航型接收机结构简单、体积小、耗电省、精度低、价钱便宜,一般采用单频C/A码伪距接受技术,定位经度为100m,用于航空、航海和陆地实时导航中:现在发展地差分GPS技术,能使定位精度提高到1-3米,大大拓宽了应用范围、有极少数接收机采用P码接受技术,使单点定位精度达到10m,这种接收机专为军用。
GPS接收机地种类虽然很多,但它的结构基本一致,分为天线单元和接受单元两大部分,如图: 1. : 它是由接受天线和前置放大器组成。
GPS接收机天线有:定向天线、偶极子天线、微带天线、螺旋天线等。
对天线地性能要求是:高增益,低噪声系数、大的动态范围。
由于高性能场效应FET放大器地出现,现在多采用有源微带天线。
2. : a 通道单元:它的主要功能是接收来自天线单元的信号,经过变频、放大、滤波等一系列处理过程,实现对GPS信号的跟踪、锁定、测量,提供计算位置的数据信息。
根据不同需要,可设计成6-12通道。
通道是由硬件和软件组成。
每个通道在某一时可跟踪一颗卫星。
当此卫星锁定后,便占据这一通道,直到此卫星信号失锁为止。
由于科学技术的反战,并行多通道接收机已经称为主趋势。
双通道和多路复用的接收机已经被淘汰。
在相关型接收机中,码延迟锁定环和载波相位锁定环是重要的部件。
1) 码延迟锁定环DLL是将本地伪随机码与卫星的伪随机码对齐,实现卫星的根中、锁定、识别和伪距测量。
2) 载波相位锁定环PLL是利用本机的COSTAS环,将其载波相位与卫星载波相位锁定,藉以解调出导航电文,并进行载波相位测量。
b 它的功能是: 1 工作开始的自检; 2 根据采集到的卫星星历,伪距观测量计算三维坐标和速度; 3 人机对话,按照输入航路点进行导航、输入卫星高度截止角、历元间隔、数据更新率、控制屏幕显示以及其他指令。
c 用于存储输入的各种数据,例如,初始化时间和坐标、导航点、星历、原始观测量等。
d 机内装有专用锂电池3v,专供接收机的时钟和RAM存储器保存星历和初始化数据用的,保证在关机时存储数据。
外接镉镍蓄电池向接收机供电12v.在使用OEM芯片时,通常需要TTL电平5v 三、 GPS信号结构: GPS卫星信号包括三种信号分量:载波、测距码和数据码。
时钟频率f010.23MH,利用频率综合器产生所需要的频率。
GPS信号的产生过程如图: GPS工作所需的信号按如下图的方式进行合成,然后向全球发射,形成现在随时随地都能接收到信号。
对用户而言,最感兴趣的是测距码和数据流导航电文. 四、 GPS导航电文: 导航电文是用户用来定位和导航的基础数据。
它包含卫星的星历、工作状态、时钟改正、电离层时延改正、大气折射改正以及由C/A码捕获P码等导航信息。
它是由卫星信号调制出来的数据码Dt.这些信息以50bit/s的速率调制在载频上,数据采用不归零制NRZ的二进制码。
导航电文的格式是主帧、子帧、字码和页码.每主帧电文长度为:1500bit,传送速率为50bit/s,所以发播一帧电文需要30s时间: 每帧导航电文包括5镉子帧,每个子帧长6s共有300bit.第1、2、3子帧各有十个字码。
这三个子帧的内容每30s重复一次,每小时更新一次。
第4、5子帧各有24页,共有15000bit。
一帧完整的电文共有37500bit,需要750s才能构传送完,花费时间达12.5min。
电文内容在卫星注入新的数据后再进行更新。
导航电文的内容包括遥测码TLM、转换码HOW、第一数据块、第二数据块和第三数据块5部分。
五、 GPS的数据采集和格式转换: 1. 数据采集:数据歘送分为同步串行传送和异步串行传送。
同步串行传送是用单独的时钟信号来对传送的数据进行定时,因此要求有严格的时间控制和同步协议。
异步串行传送不要求有严格的时间控制和同步协议,但要求再电文中做一些规定。
在数据传送之前需送一个“开始”位,传送完一组数据后再送一个“停止”位。
因此,异步串行传送是以字符为基础的。
在计算机与GPS通讯进行数据传送时,都采用异步串行传送方式 GPS作为数据终端设备DTE和计算机DCE之间利用D型RS-232电缆接口进行数据交换。
从数据输出形式来看GPS的输出分为两类: 1.十进制ASCII码: 这种码直观,易于识别和应用。
GPS的同意标准格式NMEA-0183输出就采用ASCII码,其格式定义如下: 比特率: 4800bit/s;数据位:8bit;奇偶校验:无;开始位:1bit;停止位1bits。
2)二进制码: 二进制码是用两个符号0和1表示的编码。
此种编码虽然不直观,但运算方便,在
计算机种应用非常普遍。
目前通用的字长为8位,可用两位16进制数表示。
在编码时,一个二进制数由小数向左,每位4位一份分,不足4位的前面补零,组成整数部分。
由小数向右,每4位一分,不足四位的后面补零,组成小数部分。
输出/输入二进制数据流的格式是低字节/高字节排列,每个字节的输出次序是从最低有效位LSB到最高有效位MSB GPS的原始观测址,星历以及其他数据都采用了二进制编码。
为了满足异步串行传送数据的要求,每一组数据需要包含三个部分:字头块,数据块和结束符。
字头块包括二进制电文数据类型和GPS电文数据格式。
Map Info公司吸取了传统 GIS系统的精华,并借助于计算机技术的发展,及时将 GIS概念从大中型计算机的专用工作站上普及到普通桌面 PC上,开创了一种崭新的信息系统模式。
MapX是 Map Info公司的能向用户提供强大地图分析功能的 Active X控件产品。
MapX是MapInfo公司向用户提供的具有强大地图分析功能的ActiveX控件产品。
由于它是一种基于Windows操作系统的标准控件,因而能支持绝大多数标准的可视化开发环境如Visual C、Visual Basic、
Delphi、PowerBuilder等。
编程人员在开发过程中可以选用自己最熟悉的开发语言,轻松地将地图功能嵌入到应用中,并且可以脱离MapInfo的软件平台运行。
利用MapX,能够简单快速地在企业应用中嵌入地图化功能,增强企业应用的空间分析能力,实现企业应用的增值。
MapX采用基于MapInfo Professional的相同的地图化技术,可以实现MapInfo Professional具有的绝大部分地图编辑和空间分析功能。
而且MapX提供了各种工具、属性和方法,实现这些功能是非常容易的。
鹰眼图是GIS中一个基本的功能,鹰眼图又名缩略图,顾名思义,在鹰眼图上可以象从空中俯视一样查看地图框中所显示的地图在整个图中的位置。
如图1所示:以北京市地图为例,鹰眼的大小可分为北京市城区和北京市全区两个等级。
Windows下的可视化开发工具现在大家接触得最多的就是VC,
VB,下面将详图1 鹰眼图示意图 细介绍在VC与
VB环境下鹰眼图的具体实现,从这也可以看出利用MapX开发GIS应用程序的方法和技巧Form上放两个MapX控件:Map1(主图),Map2(鹰眼图);然后在Di ’鹰眼图上临时图层 Feature 口位置的Feature rivate Sub Form_Load .Layers.CreateLayerquotRectlayerquot ’在Map2创建图层 End Sumap1的Bounds在Map2上绘制矩形Feature
VB下鹰眼图实现的思路是这样的:在某一鹰眼图上创建一个图层,在该图层上添加一个矩形Feature,该矩形的大小随着主图边界而变化。
具体实现参考下面详细
代码。
m m_Layer As Layer Dim m_Fea As MapXLib. ’鹰眼图上反映主地图窗 PSet m_Layer Map2b ’根据Private Sub Map1_MapViewChanged Dim tempFea As MapXLib.Feature ’声明Feature变量 量 t 0 Then apXLib.Style ’创建Style对象 内部填充样式 ’设Map1的边界的Rectangle对象 .Bounds tempStyle Else 矩形边框的顶点 点 te ’更新显示 End If ’鹰眼图上鼠标单击用来导航主图,其方法是把鼠标处的坐标设置为主图的中心 s Single MapY miScreenToMap End SuVB是一样的,只不过VC的可视化程序没有
VB高,VC更多的是利用
代码来实Dim tempPnts As MapXLib.Points ’声明Points变Dim tempStyle As MapXLib.Style ’声明Style变量 ’矩形边框还没有创建时If m_Layer.AllFeatures.Coun’设置矩形边框样式 Set tempStyle New MtempStyle.RegionPattern miPatternNoFill ’设置Style的矩形tempStyle.RegionBorderColor 255 ’设置Style的矩形边框颜色 tempStyle.RegionBorderWidth 2 置Style的矩形边框宽度 在图层创建大小为Set tempFea Map2.FeatureFactory.CreateRegionMap1Set m_Fea m_Layer.AddFeaturetempFea ’添加矩形边框 ’否则,根据Map1的视野变化改变矩形边框的大小和位置 With m_Fea.Parts.Item1 .RemoveAll ’除去已有的’添加大小和位置已变化的矩形边框的四个顶.AddXY Map1.Bounds.XMin Map1.Bounds.YMin .AddXY Map1.Bounds.XMax Map1.Bounds.YMin .AddXY Map1.Bounds.XMax Map1.Bounds.YMax .AddXY Map1.Bounds.XMin Map1.Bounds.YMax End With m_Fea.Upda End Sub Private Sub Map2_MouseDownButton As Integer Shift As Integer X As Single Y ADim MapX As Double ’定义x坐标变量 Dim MapY As Double ’定义y坐标变量 ’把屏幕坐标转换为地图坐标 Map2.ConvertCoord X Y MapX’设置主图的中心x坐标和y坐标 Map1.CenterX MapX Map1.CenterY MapY b VC下鹰眼图实现的思路与现一定的功能。
如利用下面的两句
代码创建两个控件,分别用来显示主图和鹰眼图。
m_ctrlMapX.CreateNULL WS_VISIBLE CRect00300300 this IDC_MAP1; m_eagleMapx.CreateNULL WS_VISIBLE CRect00400400 thisIDC_MAP2; 另外在初始化程序时,还需创建一个图层,用于显示鹰眼图上矩形Feature。
m_eagleMapx.GetLayers.CreateLayerquotRectLayerquot 鹰眼图的主要功能是在主图发生变化时,在鹰眼图上用变化的矩形框来显示当前主图显示的边界。
这里主要利用MapX 控件内置的消息MAPX_DISPID_MAPVIEWCHANGED映射的函数来完成该功能,当主视图发生变化时,MapX 控件发出消息,调用OnMapViewChanged函数进行相应的处理,所以主要的
代码在OnMapViewChanged函数中实现。
ON_EVENTCMapXSampleView IDC_MAP1 MAPX_DISPID_MAPVIEWCHANGED OnMapViewChanged VTS_NONE //主视图发生变化时,调用如下的函数 void CMapXSampleView::OnMapViewChanged double X1Y1X2Y2 //声明坐标变量 double x2y2x4y4 //声明坐标变量 VARIANT scx scy scx1 scy1 //声明屏幕坐标变量 VARIANT mapx1mapy1mapx2mapy2 //声明地图坐标变量 //声明FeatureFactory变量并获取缺省值 CMapXFeatureFactory cFactorym_eagleMapx.GetFeatureFactory CMapXLayer layer //声明图层变量 CMapXFeature feature //声明Feature变量 CMapXFeatures features //声明Features变量 CMapXPoints points //声明Points变量 points.CreateDispatchpoints.GetClsid CMapXRectangle rect //声明矩形变量 rect.CreateDispatchrect.GetClsid //获取主图的边界,根据这个边界值,在鹰眼图上添加一个矩形Feature rect m_ctrlMapX.GetBounds X1 rect.GetXMin //获得矩形左上顶点x坐标 Y1 rect.GetYMin //获得矩形左上顶点y坐标 X2 rect.GetXMax //获得矩形右下顶点x坐标 Y2 rect.GetYMax //获得矩形右下顶点y坐标 //进行坐标变换 m_eagleMapx.ConvertCoordVampscxampscyCOleVariantX1COleVariantY1miMapToScreen m_eagleMapx.ConvertCoordVampscx1ampscy1COleVariantX2COleVariantY2miMapToScreen m_eagleMapx.ConvertCoordVampscxampscy1ampmapx1ampmapy1miScreenToMap m_eagleMapx.ConvertCoordVampscx1ampscyampmapx2ampmapy2miScreenToMap //获得矩形框顶点坐标 x2 mapx1.dblVal y2mapy1.dblVal x4mapx2.dblVal y4mapy2.dblVal //得到添加矩形Feature的图层 layerm_eagleMapx.GetLayers.ItemquotRectLayerquot featureslayer.AllFeatures //没有添加矩形Feature的图层,则新建 iffeatures.GetCount 0 //添加四个顶点构成一个矩形框 points.AddXYX1Y1 //添加顶点1 points.AddXYx2y2 //添加顶点2 points.AddXYX2Y2 //添加顶点3 points.AddXYx4y4 //添加顶点4 //创建矩形Feature COleVariant vtPoints vtPoints.vt VT_DISPATCH vtPoints.pdispVal points.m_lpDispatch vtPoints.pdisp.