|
|
|
|

基于嵌入式Linux的嵌入式GIS的设计与实现

摘要:随着手持设备的飞速发展,嵌入式GIS(地理信息系统)的应用日益广泛,而嵌入式Linux由于其开放性、廉价性、健壮性和安全性,越来越广泛地成为嵌入式GIS的主要开发平台。针对基于嵌入式Linux的嵌入式GIS的实现进行了整体上的设计,并介绍了GPS(全球定位系统)...

作者:成洁,吕遵明,敖雪来源:网络|2007年02月14日

摘要 : 随着手持设备的飞速发展 , 嵌入式 GIS( 地理信息系统 ) 的应用日益广泛 , 而嵌入式 Linux 由于其开放性、廉价性、健壮性和安全性 , 越来越广泛地成为嵌入式 GIS 的主要开发平台。针对基于嵌入式 Linux 的嵌入式 GIS 的实现进行了整体上的设计 , 并介绍了 GPS( 全球定位系统 ) 通信代理和嵌入式 GIS 人机交互应用程序。

 

关键词 : 嵌入式 GIS; GPS; NMEA0183 协议 ; Qte/Qtop ia

 

引 言

 

嵌入式 GIS( 地理信息系统 ) 是指 GIS 在嵌入式设备例如掌上电脑、手机等手持设备上的应用。可为 GIS 提供一种移动式的应用 , 具备 GIS 的基本功能 , 例如电子地图浏览、空间位置信息编辑等 , 若设备中包含 GPS( 全球定位系统 ) 模块或外接 GPS 设备 , 则还可提供 GPS 定位、测距、测速等功能。

 

目前 , 大部分嵌入式 GIS 系统都是以 Windows CE 为基础进行开发的 , 这是由于 W indows 系统在 PC 市场占有的绝对优势和巨大影响力造成的。但其在开发成本、软件自主权以及安全性方面都存在一些问题。而 Linux 由于其自身的开放性、廉价性、健壮性、实时性和安全性已经成为越来越多的嵌入式应用开发的首要平台。在嵌入式 L inux 环境下实现 GIS 也相应地成为嵌入式 GIS 发展的一个重要方面。但是 , 国内外目前基于 L inux 的嵌入式 GIS 的研究相对滞后 , 因此 , 研究基于嵌入式 Linux 的嵌入式 GIS 开发对于实现具有自主知识产权的高性能、高安全性的嵌入式 GIS 具有重要意义。

 

实现方案

 

本文介绍的基于嵌入式 L inux 的嵌入式 GIS 是运行于安装有 Qtop ia 环境的手持式设备的应用。本文设计的嵌入式 GIS 应用可用于两种情况 : 一种是手持设备上安装有 GPS 模块 ; 另一种是手持设备上没有安装 GPS 模块 , 而是通过网络获取 GPS 信息。

 

1 所示为嵌入式 GIS 应用程序的功能结构示意图。它主要有两部分组成 : 一部分为与用户进行交互的应用程序部分 , 另一部分为与 GPS 设备进行通信的后台代理程序 , 此代理程序需与 GPS 设备处于同一物理位置 , GPS 设备通过串口进行通信 , 它与 GIS 应用程序可位于同一设备中 , 也可位于不同的位置 , 通过网络进行通信。

 

 

GPS 通信代理程序的实现

 

GPS 设备与嵌入式平台之间进行数据传送 , 大多采用异步串行传送方式 , GPS 作为 DTE ( 数字终端设备 ) 与嵌入式平台之间通过 RS-232 串行通信接口进行数据交换。因此 , GPS 的数据通信实际上即完成了 Linux 下的串口编程。两者之间的通信协议有很多种选择 , 而目前绝大多数 GPS 生产厂商都采用的是 NMEA0183 通信协议。

 

NMEA0183 通信协议

NMEA0183 协议是 GPS 串口通信的通信协议 , 在完成 GPS 通信时 , 并不需要了解协议的全部内容 , 只需了解通信基本参数和所需信息的语句格式 , 从中选取有用信息 , 而忽略其他信息。

 

1)NMEA0183 的基本通信参数

 

符合 NMEA0183 标准的通信参数为 : 波特率 =4 800 bit/ s, 数据位 = 8, 奇偶校验 : , 停止位 = 1 位。

 

2)NMEA0183 的报文格式

 

NMEA 0183 协议报文的语句串 (ASCII 字符 ) 格式全部信息见图 2

 

 

  具体内容为 :

: 串头 , 表示串开始 , 所有 GPS 语句的起始标志 ;

AA: 识别符 ;

XXX: 语句名 ;

ddd.ddd: 数据字段 , 字母或数字 ;

* : 星号 , 串尾 ;

hh: $与 3 之间所有字符代码的校验和 ;

: 回车控制符 ;

: 换行控制符。

 

在实际的 GPS 应用中 , 并不会用到 NMEA 的全部信息 , 而是根据具体的需要 , 从中选取有用的信息 , 忽略其余的信息内容。

 

例如 : GPRMC, 152252, A, 2513. 3072, N,10346. 3723, E, 0. 0, 230. 4, 250503, 1. 3 ,W,A , *02

 

其中 : GPRMC 为串头 , 表示此语句为定位语句 ; * ”之前的内容为数据字段 ; 152252 ”为 UTC ( 协调世界时间 ) 24 小时制的标准时间 , 格式为“时时 / 分分 / 秒秒” ; A ”表示信号接收状态 , A ”表示接收正常 , 也可能为“ V , 则表示一个警告 , 与卫星通信不正常 ; 2513. 3072表示纬度值; N ”标明南北半球 , N ”表示北纬 , S ”表示南纬 ; 10346. 3723表示经度值; E ”标明东西半球 , E ”表示东经 , W ”表示西经 ; 0. 0表示速度; 230. 4 表示方位角, 它的范围为 000. 0 359. 9; 251205 表示 UTC 的日期 , 格式为“日日 / 月月 / 年年” ; 1. 3表示磁偏角, 范围为 000. 0 180. 0; W ”表示地磁变化方向。

 

GPS 设备与代理程序的串口通信

嵌入式 linux 操作系统使用 POSIX termios 接口来控制串口的行为。在系统的头文件 < termios. h > , POSIX. 1 定义了一个查询和操纵终端的标准接口 termios, 它包含了终端特性的完整描述。定义如下 :struct termios{

    unsigned short c_iflag;   / / 输入模式标志

    unsigned short c_oflag;   / / 输出模式标志

    unsigned short c_cflag;   / / 控制模式标志

    unsigned short c_lflag;   / / 本地模式标志

    unsigned char c_line;   / / 控制协议

unsigned char c_cc[NCCS]   / / 控制字符 }

 

实现与 GPS 设备的通信 , 实质上就是完成一个串口编程 , 对串口的属性进行正确的配置 , 从接收到的 GPS 输出数据中选取有用的信息进行处理的过程。在 L inux 操作系统中 , 所有的设备都是被当做文件来进行操作的 , 所有的设备以设备文件的形式存储在目录 /dev/ 下。对串口进行数据采集的过程简单描述如下 :

int fd = open ( " /dev/ ttyS0" ,O_RDWR |O_NOCTTY )  

/ / 打开串口设备 ,O_RDWR 表示以读写方式打开 ,O_NOCTTY 表示串口不是控制终端

struct termios old_op tions, new_op tions  

/ /old_op tions 用于保存原有的设备工作方式 , new_op tions 用于设置新的设备工作方式

tcgetattr ( fd, &old_op tions)   / / 获取当前设备方式 ( )   / / 设置结构体 new_op tions 中的 c_iflag c_oflag c_cflag

c_lflag c_cc, 再用 cfsetispeed ( ) cfsetospeed ( ) 函数设置波特率

tcsetattr ( fd, TCSANOW, &new_op tions) ;   / / 设置新的设备方式

/ / 完成终端的设置后 , 处理串口设备的 GPS 数据输入 , 从中选取有用的信息

/ / 例如需选取 GPS 输出数据中的定位信息

if ( ( buf[O ] = = ) &&( buf [ 3 ] = = R) &&( buf [ 4 ] = =M)

&&( buf[ 5 ] = =C) )

/ / 检查语句串头 , 若为 RMC 则表示此语句为定位语句

{/ / 检验校验和 , 如果校验和正确则继续 , 否则返回 if ( buf[ i ] = , ) {   / / 提取并分解各逗号间的数据 }

}

 

通过以上代码就可把 GPS 输出数据中的有用信息提取出来 , 这些取出的数据 , 可进行一些处理例如格式变换或直接传送给嵌入式平台的 GIS 应用程序。

 

上一篇:GPS特点

下一篇:基于Windows Mobile 5.0的GPS应用程序开发