基于嵌入式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.
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特点