2024年6月7日发(作者:)

维普资讯

研究与开发 

RESEARCH AND DEVELOPMENT 

团固 V第10I .616卷第5 NO期.5 

文 编i01_:1005-8451(2007)05-0004-03 

基于Java语言的GPS接收机的串口通信程序设计 

李新源 ,赵树法 ,魏宗寿 

(1 兰州交通大学光电技术与智能控制教育部重点实验室,兰州730070;2.河南省电力公司,郑州453000) 

摘要:介绍GPS接收机串口通信的基本概念,详细介绍利用JavaCommunication API扩展类库(Javax. 

comm)实现GPS串口通信的例子,在实例中还结合Map Objects Java Edition开发工具实现对GPS接收 

机位置的实时跟踪和显示。 

父键 :GPS;串口通信;Java;Map Objects 

L卜图分类号:TP39 爻I谳标识 :A 

Design on serial communication program of GPS receiver based on Java 

programming language 

LI Xin.yuan1.ZHAO Shu.fa.2.WEl Zong.shou 

(1.Key Laboratory of Opto-electronic Technology and Intelligent Control,Lanzhou Jiaotong University,Ministry of 

Educmion,Lanzhou 730070,China;2.Electric Power ofHenan,Zhengzhou 453000,ChinaJ 

Abstract:It was introduced the basic concept ofserial communition for GPS receiver,explained in details na tmplementation 

of GPS serial communication using hte Java communication API.By using the M印0bjects developing tool,it was 

implemented to track GPS position in real time and dynamically display the GPS receiver’S position. 

Key words:GPS;serial communication;Java;MaD Objects 

GPS和GIS是交通运输应用中的一项核心技术, 

的Java2 SDK当中,需要进行安装。作者所开发的 

在交通运输中需要开发GIS数据处理软件,以和GIS 

程序在Windows 2000上编译通过并成功运行,所使 

软件相互结合使用。在开发GPS数据处理软件时, 用的Java 2 SDK版本是较新的1.4.2。 

首先要解决计算机与GPS接收机的串I:1通信问题。 

在GPS接收机和计算机进行数据传输的过程中,计 

l 数据流秤 

算机的串行端口提供了两者之间数据传输的通道。 

GPS接收机采用异步串行的方式,利用RS 232串行 

利用串口接收GPS数据总的数据流程如图1。 

二进制数据交换,电缆接I:1将采集到的数据通过串 

GPS接收机 — NMEA语句 — NMEA语句处理 

行端口传输到计算机…。在GPS接收机和计算机通 

信方面的商业产品具有一定的局限性,难以进行扩 

图1串口接收GPS数据流程图 

展。因此,自行开发这方面相关的软件对于智能交 

GPS接收机采用NMEA-0 1 83协议进行通信。 

通系统开发还是具有一定的实际意义。 

NMEA语句的格式有多种,所有的语句都是由范围 

Java具有开放性、平台无关性和面向对象等特 

在16进制的HEX 14 ̄lJHEX 7E的ASCII字符组成,并 

性,是一个理想的GIS软件开发平台。本文作者利 

且每条语句都有固定的格式,其中的每个字段都有 

用Java串口通信API开发了一个用于GPS通讯的 

确定的定义,例如下面就是一条典型NMEA语句: 

Java程序,大大简化了对串I:1进行操作的过程,并 

GPGGA,1 1 1200.02,6016.3092,N,02458.3841,E,1,09,0. 

且还结合Map Objects Java Edition开发工具实现了 

8,30 6,M,1 8.1,M, 5D 

对GPS信号的实时跟踪和显示。Java串I:1通信API 

整个接收过程分为下面4步: 

(Javax.comm)是一个Java扩展类库,并不包括在标准 

(1)从串口读取字节码。该任务由类NMEA 

收稿日期:2006-09—19 

Data Processor负责完成,在通讯的时候运用了Java 

基金项目:兰州交通大学大学生科研创新项目(2005-165) 

的多线程技术; 

作者简介:李新源,在读硕士研究生:赵树法,工程师。 

(2)提取NMEA语句。NMEA 0183 Sentence 

o— 俪 

维普资讯

第16卷第5期 慕于J ava语言的GP S接收机的串口通信程序设计 研究与开发 

被设计成对应于NMEA语句,它的一些私有变量分 

别对应了NMEA语句的一些字段; 

} 

} 

} 

(3)提取有效字段。Process NMEA Sentence方 

法完成从NMEA语句中提取所需要的信息,如经纬 

当提取到了一条NMEA语句之后必须要检验它 

度和高度等。为简单起见,作者的程序仅对包含信 

的有效性。通过计算整个NMEA语句的校验和,把 

息较多的GGA格式的语句进行了字段的提取。如果 计算所得的校验和与所接收到校验和作比较,如果 

需要对其他格式的语句如GLL、RMC等进行提取, 

可以设计相应的类来完成; 

(4)建立事件监听器接口。Java中事件是一个 

非常通用的概念,并不仅仅局限于基于窗口的应用 

程序。在程序中该接口由GPS Position Listener来 

完成,它只有一个GPS Position Received方法。 

2 从串n读取字节码 

该任务由类NMEA Data Processor来完成。为 

了在接收GPS数据、分析NMEA语句和提取有效字 

段的同时希望能够不中断程序其他部分的执行,作 

者运用了Java的多线程技术,在NMEA Data Pro— 

cessor类中新建一个线程来完成GPS数据的接收和 

处理。程序执行到NMEA Data Processor。start()时 

开始生成自己的线程,然后由方法NMEA Data 

Processor。run()负责处理GPS数据。 

3提取NMEA语句 

从串口接收到的NMEA语句是由许多条连续的 

单一语句组成的,中间由ASC II字符<cR>和<LF> 

隔开。ProcessRawData()方法把字节码分解为一条 

条的单一NMEA语句,然后再调用方法NMEA 

0183 Sentence()构造每一条NMEA语句以作进一步 

的处理。 

for(int i=0;i<bytes;i++){ 

dataBuffer[dataIndex] =buffer[i]; 

if(dataBuffer[O] ¥’1 

{/ 每条语句都由字符’¥’开头 / 

dataIndex++; 

if(buffer[i]= \n’){ 

message new 

NMEA 0 1 83 Sentence(dataBuffer); 

//调用类NMEA 0183的构造函 

数构造NMEA语句 

不相等该语句就无效。 

if(message.isValidO){ 

processNMEASentence(message); 

}else{ 

System.out.println(”无效的NMEA语 

句”); 

其中方法isValid0检验两个校验和是否相 

等,返回值为布尔值。 

public boolean isValidO{ 

return(getChecksum0:== 

getCalculatedChecksum0); 

} 

4提取NMEA字段 

NMEA语句的格式有多种,本文仅对GGA语 

句进行了精度和纬度信息的提取。方法process NM— 

EA Sentence()完成从GGA格式语句中提取经纬度 

信息。 

NMEA的经纬度格式是xxmm.dddd,xx代表度, 

mm代表分,dddd是以分的十进制小数表示,方法 

nmeaLatOrLonToDouble把字符串形式的经纬度转换 

成以度的十进制表示的双精度数值。类GPSPosition 

有2个私有变量

latitude和

longitude,分别代表纬 

度值和精度值。 

5建立事件监听器接H 

通过接口来实现事件监听是Java中的一个重 

要特性。接口GPS Position Listener定义GPS Posi— 

tion Received(GPS Position)方法,任何对象,只 

要实现了GPS Position Listener借口,在类NMEA 

Data Processor经过提取NMEA语句之后构造得到 

GPS Position时,该对象就会被通知,并且执行它 

自己定义的接口方法,也就是GPS Po sition Re— 

ceived方法。 

圃 丽 面 

维普资讯

研究与开发 第16卷第5期 

6实例 

只要实现了GPS Position Listener接口的任何 

类,都可以在它定义的GPS Position Received方法 

Y坐标数组以及点的个数。 

中处理经纬度数值。在程序中,作者还结合ESRI的 

Map Objects Java Edition开发工具,编程实现了对 

GPS接收机位置的实时跟踪和显示。具体方法是在 

Map Bean上加上一层特殊的图层,该层是透明的并 

且位于所有图层的最上方。作者设计了一个类Tracking 

Acetate Layer作为类Acetate Layer的子类,继承并 

扩展了它的功能。类Tracking Acetate Layer实现了 

GPS Position Listener接口,并且定义了GPS Position 

Received方法。在对GPS接收机接收到的数据进行 

处理获得经纬度的同时,类Tracking Acetate Layer 

即被通知,同时根据经纬度数值在计算机屏幕上以 

特定的图标实时显示。在屏幕上显示前需要把经纬 

度坐标转换为屏幕坐标。 

在计算机屏幕上实时显示经纬度数值实际上是 

以多义线的形式表示,作者设计的类POly Line 

Shape就代表该多义线。程序每当收到一个GPS 

Position,就向pls对象增加一个点,同时调用repaint 

()方法重绘pls.重绘时,调用类Poly Line Shape的 

draw方法: 

public void draw(java.awt.Graphics g) 

{ 

Graphics2D g2=(Graphics2D)g; 

//设置画笔的粗细和连接形式 

BasicStroke stroke=new 

BasicStroke(10,//10个像素宽 

BasicStroke.CAe

 ̄OUND, 

_

BasicStroke.JOIN ROUND); 

g2.setStroke(stroke); 

//设置颜色 

java.awt.Color color new 

Color(0,255,0);//使用绿色 

g2.setPaint(coIor); 

g2.drawPolyline(xp,YP,size); 

} 

变量xp,yp和size分别是多义线的x坐标数组, 

o— 疆虿 —滴 

图2运行时屏幕截图 

图2就是在实际测量过程中所得到的一张屏幕 

截图,图3是最终所获得的校园边界图。 

图3最终获得的边界图 

7结束语 

由于Java的跨平台性以及它和网络的紧密联 

系,使得Java技术在GIS的发展中起着重要的作用, 

而GPS和GIS又是智能交通发展中的核心技术。作 

者利用了Java多线程技术和Java串口通信API实 

现了对GPS接收机数据的读取和分析,串口读写操 

作在后台运行,最后在给出的实例中结合ESRI公司 

的Map Objects Java Edition开发工具实现了对GPS 

数据的定位跟踪。 

参考文献: 

[1】李洪淘,许国昌.GPS应用程序设计[M】.北京:科学出版 

社.1999. 

[2】Bruce Eckel、Thingking in Java[M]、北京 

机械工业出版枉, 

2004. 

[3】Ivor Horton、Java2编程指南【M】.北京 

电子工业出版社, 

2004.