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

基于嵌入式Linux的MapInfo格式地图显示

汪亚雷,余春暄

(北京工业大学 电子信息与控制工程学院 ,北京 100022)

摘要: 本文实现MapInfo格式的地图在嵌入式arm-linux平台下的显示。首先通过建立交叉

编译环境和平台运行环境,完成MiniGUI到arm-linux平台的移植,使平台支持图形显示。

接着根据MapInfo的tab,id,dat,map等格式文件内部特有的结构编程得到的地理坐标数据

和坐标系的信息,再按需要通过椭球坐标系转换向平面坐标系的转换,对应到MiniGUI的显

示区,最后在平台的LCD上显示地图。整体系统流程简单清晰,显示效果较好。

关键词:嵌入式 地图显示 电子地图

中图分类号 TP311 文献标识码 B

文章编号

A kind of map-display of the MapInfo’maps based on Embed linux system

Wang yalei,Yu chunxuan

(BJPU EICE ,Beijing 10022)

Abstract: In this paper an map in MapInfo’s format(TAB,MIF,…) is displayed in a

Embeded arm-linux system. This paper simply point out the flow and elements of the

realization of this we transplant the MiniGUI to our Embeded arm-linux

system by building the environment where the across-compiler and the system running

in ,then via a series of coordinate transform we get the data format needed(for

example,if needed ,transform the ellipse coordinate to the ichnographic

coordinate),and finally display the map on the platform’s LCD .The flow of the whole

system is in focus,and has a good effect on the the displaying.

Key words: Embeded Map-display electronic-map

1. 引言

农田信息采集装置,车载导航仪和PDA等机载和手持式小型设备都需要GPS定位和地图显

示功能的支持。而市场上实现这种功能的大部分平台都是基于WINCE这种操作系统,可以采

用EVC开发,开发流程明确,驱动支持较丰富,但总体开发成本较高。由于Linux其免费,可

配置,网络性能,MiniGUI也是轻型、高性能、高可靠性、可配置的GUI,本文采用MiniGUI

在ARM-linux平台上实现了简单的地图显示功能。

在硬件环境上,使用一块AT91rm9200为核心的开发板,32M SDRAM,16M FLASH, LCD显示,

选取嵌入式Linux作为操作系统,为了实现地图显示的功能,首先在宿主机上建立交叉编译

环境,移植MiniGUI到开发平台上,使平台支持图形显示,接着根据MapInfo格式的一系列文

件的内部结构和相互关系编程分析,得到基础图元数据和类型,再通过一系列坐标转换,最

后在LCD上显示出地图。最终使平台支持了MapInfo这种主流的地图,并为以后的地图匹配,

农田信息采集、分布图生成打下了基础。

2. MiniGUI的移植

对嵌入式平台的开发首先都要建立交叉编译环境和最终的运行环境。针对笔者所采用的

ARM-Linux平台,交叉编译是为了在采用linux的宿主PC机上生成最终在ARM处理器上linux

1

操作系统下可运行的代码。而建立运行环境是将一些必要的资源文件安装到程序运行的

ARM-Linux平台上。接下来以MiniGUI1.3.3版为例,介绍在它该ARM板上的移植过程。该版本

可在飞漫软件的网站上免费下载,并需要遵守GPL协议。

2.1 PC机上交叉编译环境的建立

主要是安装交叉编译器,并交叉编译MiniGUI库的源代码,生成应用程序需要的链接的

动态和静态的库文件。

首先需要安装和板载linux相同版本的arm-linux-gcc编译器到采用linux操作系统的宿

主机的某个路径下(如:/usr/local/arm/bin,若编译器有特殊要求,则一定要安装到它指

定的路径下),并将该路径添加到宿主机的PATH环境变量中,如果此时在字符终端中命令行

下输入arm-linux-gcc有使用格式提示,则说明PATH变量添加成功。

第二步解压软件包,进入该目录,运行./configure(产生

Makfile文件),需要指定一些选项,CC=arm-linux-gcc(指定编译器),target=arm-linux

(指定目标平台),prefix=…(MiniGUI函数库的安装路径),host=i686-pc-linux-gnu

(宿主机类型,本文的宿主机的版本是RedHet9.0),然后使用make编译库,make install

安装库、头文件、配置文件到prefix选项指定的地方。

最后,在编写或移植应用程序的时候,Makefile里面指定的编译器和链接的库的位置如

上所述,所以需要注意的一般是CC项--指定编译器,LIBS项--指定库文件位置,

DEFAULT_INCLUDES项--指定头文件位置。

2.2 平台运行环境的建立

运行环境建立在目标板的文件系统中。

下载并解压压缩包,修改其中的文件,

prefix选项指定了以后make install命令安装资源文件的位置,默认是本机(宿主机)的

/usr/local下,可以修改这个选项以符合系统要求。因为最终可执行文件运行在目标板上,

所以prefix项一般指定到目标板文件系统的***/usr/local路径下,它会在目标板的文件系

统的***/usr/local/lib/minigui/res目录下(***为目标板文件系统在宿主机上的位置)。

最后,还要保证嵌入式平台LINUX支持MiniGUI。在基于Linux的系统上,MiniGUI在

[6]

LinuxFrameBuffer驱动程序的基础上建立图形引擎

。一般而言,基于Linux的嵌入式系统

均会提供FrameBuffer支持,为了确定FrameBuffer驱动程序是否被激活,可以通过查看嵌入

式平台运行时的/proc/devices目录下是否有fb设备,如果启动后存在fb设备,那么在平台

的文件系统中/usr/local/etc下的中指定使用fbcon的引擎。

如果显卡驱动支持FrameBuffer驱动,则可以在内核编译的时候加入FrameBuffer项。如

果显卡的驱动不是FrameBuffer的,则使用其它的图形引擎或者编写一个,如修改MiniGUI

库的源代码目录libminigui-1.3.3/src/newgal/dummy中的dummy引擎,把显示驱动加进来构

造自己的显示引擎。在dummy文件夹下的nullvideo.c中,DUMMY_CreateDevice函数初始化

MiniGUI的负责显示的数据结构GAL_VideoDevice。DUMMY_VideoInit函数处理硬件驱动中底

层设备初始化,设置视频输出的格式(NTSC,PAL,DRGB,VGA)。DUMMY_SetVideoMode函数重点

处理缓存的分配,RGB的位数和透明效果。DUMMY_VideoQuit释放驱动的底层设备的数据结构

和显示包的缓冲队列。DUMMY_UpdateRects是更新新的显示包的地方,第一次调用时构造显

示包或者包的队列,之后可以根据一定的算法计算需要重绘的区域。并在中需

要指定使用新构造的Dummy引擎。

3.MapInfo格式地图的显示

MapInfo是面向应用的桌面地图信息系统,数据组织方式灵活,查询、统计、分析及专题

制图功能较强,其格式的地图较丰富。在一些农田采集平台,城市交通GPS引导中往往使用

2

一些MapInfo格式的地图。由于在Linux平台下,没有控件的支持,但是可以通过分析MapInfo

格式,使用MiniGUI实现简单的地图显示。

MapInfo的数据格式主要分为TAB和MIF(MID)两种格式,TAB格式是MapInfo唯一的数据存

储格式,所有基于该软件上的应用系统都要以这种格式为依托。MapInfo数据采用双数据库存

储模式,属性数据存储在属性数据的表结构文件(.tab)与属性数据文件(.dat)中,空间数据

保存在空间数据文件(.map) 中,两者通过交叉索引文件(.id)联系(如图1所示)。通常TAB格

式的文件主要由以下几个文件组成:.tab文件描述表结构,.dat或.dbf文件包含表的数

据,.map文件表的图形对象,.id文件包含表的地理索引,.ind文件包含表的列索引。

MIF(MID)是MapInfo的外部数据交换文件。MapInfo主要通过MIF、MID两个文件与其他GIS

软件建立数据接口,其中MIF数据文件主要保存空间数据的图形信息,MID 数据文件主要保存

空间数据的属性信息。MIF由文件头和数据段组成,数据段包含MapInfo定义的点、线、面、

多义线、区域、圆弧、文本、矩形、圆角矩形和椭圆等实体。MID文件为对应实体的属性。

IND文件不是必需的,它对应于每个索引字段都有一个索引表。它们之间关系如图1所示。

MIF文件包括MIF File Header和MIF Data Section两个部分。在MIF File Header部分

中我们通过格式分析可以得到该图层使用的坐标系是何种格式,使用的椭球标准(如

WGS84,International 1924),转换坐标系使用的七参数等等。具体可以针对将要显示的地

图的坐标系格式实现一种,如WGS84这种坐标系。而在MIF Data Section部分中地理对

.MAP

.DAT

.ID

记录号n

字段

索引n

点/线/面

记录n

线型

颜色

图 1 MapInfo文件关系图

象被描述为point、line、polyline、region、arc、text、rectangle、rounded rectangle、

ellipse、multipoint、collection这几种类型,并按照一定的格式存储。

掌握了文件之间的关系之后,可以用C或C++语言编程实现对.TAB或.MIF文件的读取。

为了存储对应地理图元的记录的信息,本文构造了如下的数据结构,如图2所示:

其中NTz结构指明该文件包含多少个字段,ONETz指明该字段包含多少个部分,kind指

明改部分是点、线还是标注,ONEPART又给出了各个部分包含的坐标点的数量和位置信息。

接下来在MiniGUI中主要对这个ONETz结构进行处理。

NFEA

ONEPART

ONETz

int nTz

int npoint

int npart

ONETz* Tz

double* x

int kind

double* y

ONEPART* part

图 2 存储地理图元数据结构

4. 地图的绘制

4.1 基本的点、线、多边形的绘制

[5]

在把将上一步得到的坐标和坐标系的定义通过高斯投影变换

,再将得到的坐标经过

变换到MiniGUI的显示窗口,在本文中即平台的LCD的某个区域上,按照MiniGUI中定义的

POINT类型,最后在MiniGUI中的MSG_PAINT消息中进行地图的绘制。

3

进入MiniGUI的绘制窗口前,首先完成对MapInfo格式文件的解析,得到上述的数据结

构。进入窗口后,根据不同的地图元数据中指示的类型特点,如点、线、面、文本,调用不

同的MiniGUI的绘图函数,如PollyLineTo、FillPolygon、TextOut、Circle等函数在绘制区

进行图元的绘制。增加坐标的变换和比例尺的分析后,可实现放大,缩小,漫游,测距功能。

4.2 功能扩展

在基本的绘制完成后,还可以根据之前得到的数据结构和MiniGUI库函数的API扩展其

他的功能。

选取图元的功能可以通过截取鼠标键弹起的信息,得到当前的屏幕位置信息,如果将

该位置与线元素的距离比较,如果小于一定的像素阈值,则认为选中,并显示提示信息;如

果是选取面,可以用是否在多边形内部来判断是否被选中。

另外,对一些特殊的标注点的图形显示,如医院、学校,可以采用加载bmp格式的图标

在显示区标注。

笔者的平台要实时的通过串口接受GPS定位坐标和农田采集的信息,通过一个按钮控制

一个线程的开关,该线程读取串口数据记录到文件中。该线程和MiniGUI之间可采用信号量

同步,最终根据属性信息对农田区,即MiniGUI的API对多边形区域进行着色,产生某种属性

的分布图。最后还可以将所有农田数据整合,得到预测的产量等分布图等等。

5. 结束语

本文提供了一种面向手持设备的工具嵌入式地图显示的具体方案,通过对MiniGUI的移

植和对MapInfo格式文件的分析,达到最终地图的显示。采用北京市二环以内的MapInfo地图

进行显示(含1000个左右的各种图元),将嵌入式平台显示结果(图3)和PC机上的 MapInfo

软件显示的结果(图4)进行对比,显示效果良好,这种方案支持漫游、查询、地图匹配等

功能,并可利用Linux和MiniGUI的API进行功能扩展,在手持平台上很好的满足一般的地图

显示的要求,为今后地图匹配,农田数据采集打下了基础。

图3 嵌入式平台显示 图4 PC机上MapInfo软件显示

本文由北京市教委基金委教育委员会发展计划项目支持 项目名称:CANOPEN现场总线与

电动汽车综合监控系统关键技术研究 项目编号:KZ2

文章创新点:本文提供了一种面向手持设备的工具嵌入式地图显示的具体方案--采用

Linux和MiniGUI开发,在保证系统稳定性的同时,减小系统大小,保持稳定性,最终形成一

个低成本的但能支持主流MapInfo格式地图文件的地图显示平台,平台在小型地图中应用良

好,平台用途广泛,可扩展功能,满足一些对地图基本操作的应用,为农田信息采集或其它

进一步功能的实现打下了基础。

参考文献:

4

[1] 三味工作室 MapInfo6.0 应用开发指南[M] 北京 人民邮电出版社 2001年

[2] 刘瑜,张晶等 地理信息系统——原理、方法和应用[M] 北京 科学出版社 2003

[3] 赵森 地理坐标与直角坐标相互转换的算法[J] 火力与指挥控制 2001年12月

[4] 胡伍生,高成发 GPS测量原理及其应用[M] 北京 人民交通出版社 2002年

[5] 邓玉娇 高斯投影与经纬度投影VC++ 编程转换——以MIF 文件中投影转换为例[J]中国

地质大学计算机应用研究 2003年

[6] 陈讽,毛洋林,潘志浩 基于嵌入式Linux的图形界面显示系统的设计[J] 微计算机信息

2004 20卷 01期 76页

作者简介:汪亚雷(1982- ),男,安徽铜陵人,在读硕士,主要从事农田信息采集、嵌入式

linux研究. 余春暄(1960- ),硕导,北京工业大学自动化学科部副教授,主要从事智能系

统,模式识别及单片机方面的研究.

Writer Introduction:

WangYaLei(1982- ),male,,master,perform reserch for information

collection of farmland and embedded-linux.

YuChunXuan(1960- ),master mentor,Professer of BJPU EICE,perform research for AI

system,pattern recognize,and MPU.

联系人: 汪亚雷 地址: 北京工业大学424#

Emal: wylandrea@

5