logo资料库

用Java 实现GPS 全球定位系统定位数据的提取.pdf

第1页 / 共3页
第2页 / 共3页
第3页 / 共3页
资料共3页,全文预览结束
2 2 2 2  2004 年第 11 期 文章编号 :1006 2475 (2004) 11 计 算 机 与 现 代 化 J ISUANJ I  YU  XIANDAIHUA 总第 111 期 0089 03 用 Java 实现 GPS 全球定位系统定位数据的提取 王缓缓 ,李  虎 (中国地质大学信息工程学院 ,湖北 武汉  430074) 摘要 :结合主要的相关程序代码对 GPS 全球定位系统的定位导航信息的接收和参数数据的提取进行了讨论 ,同时也对用 Java 语言实现串口通信的程序设计作了简要的讲述 。 关键词 : GPS ; GPS 数据格式 中图分类号 :TP391     文献标识码 :A Using Java Language to Pick up GPS Data from GPS Receiver WANG Huan huan ,LI Hu (Faculty of Information Engineering ,China University of Geosciences ,Wuhan 430074 ,China) Abstract :This paper introduces how to pick realize the function using Java language. Key words :GPS ; GPS data format up GPS data from GPS receiver through serial port communication ,and also introduces how to 0  引  言 GPS 即全球定位系统 ,它主要由三大组成部分 , 即空间部分 、地面支撑系统和用户设备部分 。其中 GPS 空间部分为 21 颗工作卫星和 3 颗备用卫星 ;地 面支撑系统为 1 个主控站 、3 个注入站和 5 个监测站 组成 ; GPS 的用户设备主要由接收机硬件和处理软件 组成 ,接收 GPS 卫星发射信号 ,以获得必要的导航和 定位信息 ,经数据处理 ,完成导航和定位工作 。用户 通过用户设备接收 GPS 卫星信号 ,结合 GIS 系统平台 对信号进行处理而获得用户位置 、速度等信息 ,最终 实现利用 GPS 进行导航和定位的目的 。此处涉及到 如何从 GPS 接收机中获取数据信息 ,并从 GPS 数据 信息中提取所需的时间 、位置等信息 。本文介绍如何 用 Java 语言实现通过串口通信从 GPS 接收机中获取 GPS 数据 ,并对 GPS 数据进行解析获得可用数据 ,为 进一步处理做好准备 。 1  GPS 定位信息的处理过程 通常 GPS 定位信息接收系统主要由 GPS 接收天 线 、变频器 、信号通道 、微处理器 、存储器以及电源等 部分组成 。由于 GPS 定位信息内容较少 ,因此多用 232 串口将定位信息 (NEMA0183 语句) 从 GPS 接 RS 收机传送到计算机中进行信息提取处理 。具体接收 过程如下顺序图所示 。 整个处理过程涉及到四个类 :主处理类 (MainPro cess) 、通信类 (Communication) 、数据解析类 ( ParseGps Data) 和 GPS 数据类 ( GpsData) 。其中 ,主处理类是总 控制部分负责整个过程的调度操作 ; 通信类负责和 GPS 接收机通信 ,包括打开通信端口 (openPort 操作) 、 提取数据 ( readData 操作) 和关闭 端 口 ( closeData 操 作) ;数据解析类负责对 GPS 接收到的数据进行处理 12 收稿日期 :2003 作者简介 :王缓缓 (1978 (1978 26 ) ,男 ,湖北武汉人 ,硕士研究生 ,研究方向 :计算机网络技术 。 ) ,女 ,湖北武汉人 ,中国地质大学 (武汉) 信息工程学院硕士研究生 ,研究方向 :计算机网络技术 ;李虎
2 从中提取所需的信息 ; GPS 数据类包含所有需要的 GPS 数据信息 。 1. 1  GPS 定位信息的接收 GPS 定位信息的接收有三个步骤 ,分别是打开接 收端口 、接收数据和关闭端口 。整个过程由通信类 (Communication) 完成 。通信类的类图如下所示 : 打开接收端口 (openPort) : 打开端口完成初始化 工作 ,包括通信所需的各种参数的设定等等 ,具体实 现如下 : public boolean openPort(String portName) {  try{   CommPortIdentifier portId = CommPortIdentifier. getPortIdentifier (portName) ;   serialPort = ( SerialPort) portId. open (″Serial- Communication″, 2000) ;   serialPort. setSerialPortParams ( 9600 , serialPort. DATABITS-8 , serialPort. STOPBITS-1 ,serialPort. PARITY-NONE) ;   in = serialPort. getInputStream() ;  }  catch ( Exception e) {   return false ;  }  return true ; } 在成功打开并设置通讯口后 ,可以调用通信类的 接收数据的方法完成数据接收的工作 ,具体实现如 下 : public String readData() {  int length = in. available() ;  int off = 0 ;  byte buffer = new byte length + 1 ;  while (length > 0) {   int numberReadOnce = inputStream. read(buffer ,off ,length) ;   off + = numberReadOnce ;   length  }  return new String(buffer) ; } = numberReadOnce ; 接收完后要释放占用的系统资源 ,调用关闭端口 09 计  算  机  与  现  代  化 2004 年第 11 期 方法完成系统资源的释放 ,具体实现如下 : public boolean ClosePort() {  try{   in. close () ;   serialPort. close () ;  }  catch ( Exception e) {   return false  }  return true ; } 1. 2  提取定位数据 在对 GPS 进行信息提取之前必须首先明确 GPS 数据帧的结构 ,然后才能根据其结构完成对各定位信 息的提取 。目前 GPS 接收机型号甚多 ,性能各异 ,但 大多采用美国国家海洋电子协会制定的 NMEA 0183 0183 通信标准的输出数据采 通信标准格式 。NMEA 用的是 ASCII 码 ,其内容包含了纬度 、经度 、高度 、速 度 、日期 、时间 、航向以及卫星状况等信息 ,语句有六 种 ,包括 GGA , GLL 、GSA、GSV、RMC 和 VTG ,分别用 。 对于不同的用途 ,选用的语句记录也不同 。 从 GPS 接收机读取的数据帧由帧头 、帧尾和帧 内数据组成 ,根据数据帧的不同 ,帧头也不相同 ,这些 帧头标识了后续帧内数据的组成结构 ,各帧均以回车 符和换行符作为帧尾标识一帧的结束 。对于通常的 情况 ,我们所关心的定位数据如经纬度 、速度 、时间等 均可以从″$GPRMC″帧中获取得到 ,一条 $GPRMC 语 句包括 13 个记录 :语句标识头 、世界时间 、定位状态 、 纬度 、纬度方位 、经度 、经度方位 、地面速度 、地面路 线 、日期 、磁偏角 、校验和和结束标记 ,它一共占用 70 个字节 (其中还包括用于分隔记录所使用的 11 个逗 号) 。该帧的结构及各字段释义如下 : $GPRMC ,〈1〉,〈2〉,〈3〉,〈4〉,〈5〉,〈6〉,〈7〉,〈8〉, 〈9〉,〈10〉,〈11〉 hh〈CR〉〈LF〉 〈1〉当前位置的格林尼治时间 ,格式为 hhmmss ; 〈2〉状态 ,A 为有效位置 ,V 为非有效接收警告 , 即当前天线视野上方的卫星个数少于 3 颗 ; 〈3〉纬度 ,格式为 ddmm. mmmm ; 〈4〉标明南北半球 ,N 为北半球 、S 为南半球 ; 〈5〉径度 ,格式为 dddmm. mmmm ; 〈6〉标明东西半球 ,E 为东半球 、W 为西半球 ; 〈7〉地面上的速度 ,范围为 0. 0 到 999. 9 ; 〈8〉方位角 ,范围为 000. 0 到 359. 9 度 ; 〈9〉日期 ,格式为 ddmmyy ;
 2004 年第 11 期 王缓缓等 :用 Java 实现 GPS 全球定位系统定位数据的提取 19 〈10〉地磁变化 ,从 000. 0 到 180. 0 度 ; 〈11〉地磁变化方向 ,为 E 或 W。 至于其他几种帧格式 ,除了特殊用途外 ,平时并 不常用 ,虽然接收机也在源源不断地向主机发送各种 数据帧 ,但在处理时一般先通过对帧头的判断而只 对″$GPRMC″帧进行数据的提取处理 。如果情况特 殊 ,需要从其他帧获取数据 ,处理方法与之也是完全 类似的 。由于帧内各数据段由逗号分割 ,因此在处理 缓存数据时一般是通过搜寻 ASCII 码″$″来判断是否 是帧头 ,在对帧头的类别进行识别后再通过对所经历 逗号个数的计数来判断出当前正在处理的是哪一种 定位 导 航 参 数 , 并 作 出 相 应 的 处 理 。下 面 就 用 ParseGpsData 类的 Parse 对从 GPS 接收机获取的数据 进行解析 ,获取我们想要的″$GPRMC″信息帧 ,并创 建 GpsData 对象用于处理 ,具体的实现如下 : public String parse(String msgStr) {  int pos = msgStr. indexOf (″$GPRMC″) ;  String gprmcStr = (pos >  if (gprmcStr ! = null) {    gprmcStr = gprmcStr. substring(0 ,70) ;/ / $GPRMC 数据帧 长 70 字节  }  return gprmcStr ; } public GpsData createGpsData(String gprmcStr) {  if (gprmcStr = = null) return null ;  new GpsData gpsData = new GpsData() ;  for (int i = 0 ;i < 11 ;i   String value = gprmcStr. substring(0 ,gprmcStr. indexOf (″,″) ) ;   gprmcStr = gprmcStr. substring(gprmcStr. indexOf (″,″) + 1) ;   switch (i) {    case 0 :gpsData. setType(value) ;break ;    case 1 :gpsData. setTime(value) ;break ; 1) ? msgStr. substring(pos) :null ; ) {     …    case 10 :gpsData. setMagneticDirection(value) ;break ;   }  }  return gpsData ; } 现在已将所从 GPS 接收机中获取的信息按照要 求提取出来 ,并保存到 GpsData 对象中 ,在实际应用 中往往要根据需要对其做进一步的运算处理 ,比如从 GPS 接收机中获得的时间信息为格林尼治时间 ,因此 需要在获取时间上加 8 小时才为我国标准时间 。而 且 GPS 使用的 WGS - 84 坐标系也与我国采用的坐标 系不同 ,有时也要对此加以变换 。而这些变换运算必 须通过数值运算完成 ,因此需要将前面获取的字符型 变量转化为数值型变量 ,这部分工作可放后面数据处 理的部分完成 。 2  结束语 本文对 GPS 全球定位系统的定位导航信息的接 收和参数数据的提取进行了讨论 ,同时给出了用 Java 语言实现对串口通信编程和数据处理的代码 ,并对程 序设计作了简要的讲述 。通过本文的设计方法可以 从 GPS 接收机中完整地接收 GPS 定位导航信息 ,并 提取所需定位参数 ,为后面各种应用的数据处理 (包 括 GIS 系统 、RS 系统等等) 提供数据保障 。 参考文献 : 1  袁安存. 全球定位系统 ( GPS) 原理与应用 M . 大连 :大 连海事大学出版社 ,1999. 2  刘大杰 ,施一民. 全球定位系统 ( GPS) 的原理与数据处理 M . 上海 :同济大学出版社 ,1996. 3  李洪涛. GPS 应用程序设计 M . 北京 : 科学出版社 , 1999. 4  毋河海. 地理信息系统 ( GIS) 空间数据结构与处理技术 M . 武汉 :测绘出版社 ,1997. (上接第 88 页)   参考文献 : 1  赵培英 ,等. 提高数据仓库中查询性能的一种并行多表 研究J . 计算机工程与设计 ,2003 ,24 (5) :15~18. 4  王珊 ,等. 数据仓库技术与联机分析处理 M . 北京 :科学 出版社 ,1998. 连接算法J . 计算机工程 ,2002 ,28 (10) :114~116. 5  宋擒虎 ,等. 数据仓库技术研究J . 计算机工程 ,2002 ,28 2  W H Inmon. 数据仓库 M . 北京 :电子工业出版社 ,2000. 3  彭晓东 ,等. 基于数据仓库的综合决策支持系统的设计 (1) :125~127.
分享到:
收藏