×
单片机 > 单片机程序设计 > 详情

嵌入式Linux下基于MiniGUI的GIS实现

发布时间:2020-05-27 发布时间:
|

1 引言

随着软硬件资源的成熟与完善,嵌入式技术的应用越来越广泛,而开放源码的Linux操作系统成为开发嵌入式产品的首选。MiniGUI是一个适用于嵌入式系统的、功能强大的、轻量级的图形用户界面支持系统,它具有占用资源少、高性能、高可靠性及可配置的特点,已经成功移植到多种硬件和操作系统平台上。我们利用MiniGUI在Linux上实现了一个嵌入式GIS,它能实现地图的显示、放大、缩小、漫游等基本功能。

2、MiniGUI的特点和体系结构

2.1 MiniGUI的特点                        

与其它针对嵌入式产品的图形系统相比,MiniGUI具有以下一些技术优势:

1)遵循GPL条款的纯自由软件。

2)多字符集和多字体支持。

3) Windows的资源文件支持,如位图、图标、光标、插入符、定时器及加速键等。

4)可配置。可根据用户的需求进行配置和编译。

5)提供了完备的多窗口机制和消息传递机制。

6)轻型、占用资源少。 MiniGUI总体的系统占有空间应该在 2MB到4MB左右。在某些系统上,功能完备的MiniGUI系统本身所占用的空间可进一步缩小到1MB以内。

7)高性能、高可靠性,可移植性好。

2.2 MiniGUI的体系结构

从整体结构上看,MiniGUI是分层设计的,层次结构如图1所示。

在最底层,GAL和IAL提供底层图形接口以及输入设备的驱动;中间层是MiniGUI 的核心层,包括窗口系统必不可少的各个模块;最顶层是API,为用户提供编程接口。[page]

3、MiniGUI在2410上的移植

系统采用由韩国Samsung公司生产的ARM核32位RISC微处理器S3C2410;交叉编译工具采用由韩国Mizi公司开发和维护的 armv41交叉编译工具链;MiniGUI源代码采用libminigui-1.3.3.tar.gz、minigui-res- 1.3.3.tar.gz和mg-samples-1.3.0.tar.gz。   本系统采用MiniGUI-Threads模式,移植过程如下:

1)将armv41交叉编译工具链拷贝到/opt/host/arm41/bin/目录下。

2)在pc机的根目录下建立minigui-free目录,在该目录中建立nfsroot目录。

3)将MiniGUI的源代码copy到/minigui-free目录。解压缩这三个软件包。

4)在libminigui中配置lib。

l         cd /minigui-free/libminigui-1.3.3

l         ./configure --host=arm-unknown-linux --enable-jpgsupport=no --enable-pngsupport=no --enable-gifsupport=no --disable-lite --prefix=/minigui-free/nfsroot --enable-smdk2410ial=yes

l         修改configure,在文件开头处增加以下代码:

CC=/opt/host/arm41/bin/arm41-unknown-linux-gcc

CPP=/opt/host/arm41/bin/arm41-unknown-linux-cpp

LD=/opt/host/arm41/bin/arm41-unknown-linux-ld

AR=/opt/host/arm41/bin/arm41-unknown-linux-ar

RANLIB=/opt/host/arm41/bin/arm41-unknown-linux-ranlib

STRIP=/opt/host/arm41/bin/arm41-unknown-linux-strip

l         make

l         make install

l         删除/minigui-free/nfsroot中的minigui目录, *.a, *.la文件。

l         执行/opt/host/arm41/bin/arm41-unknown-linux-strip *。

5)配置res。

l         cd /minigui-free/minigui-res-1.3.3

l         修改config.linux文件,指明TOPDIR=/minigui-free/nfsroot。

l         make install

6)配置mg-sample。

l         cd /minigui-free/mg-samples-1.3.1

l         ./configure --build=i686-pc-linux-gnu --host=arm-unknown-linux --prefix=/minigui-free/nfsroot/ LDFLAGS=-L/minigui-free/nfsroot/lib CPPFLAGS=-L/minigui-free/nfsroot/include CFLAGS=-L/minigui-free/nfsroot/include

l         configure文件的修改同4)。

l         make

7)制作ramdisk。

l         将/minigui-free/nfsroot/lib中所有的库文件copy到ramdisk的/lib中,将/minigui-free /nfsroot/usr/local/lib/minigui目录copy到ramdisk的/lib目录中。

l         在ramdisk中建立/usr/local目录,在该目录中建立连接ln –s /lib lib。

l         Copy /minigui-free/MiniGUI.cfg文件到ramdisk的/etc目录。

l         Copy /minigui-free/mg-sample-1.3.1/src/目录下所需要的文件到ramdisk中的/bin目录。

8)将ramdisk烧写到板子上。

4       GIS开发

在嵌入式产品中使用MiniGUI之前,开发人员通常先在PC机上安装MiniGUI,然后使用PC机来编写MiniGUI应用程序,调试运行成功后再将其移植到嵌入式产品上运行。我们根据这种编程模式利用MiniGUI开发了一个地理信息系统。该系统能完成电子地图的显示、放大、缩小、漫游等基本功能,为提高系统性能,系统采用了以下处理技术。

4.1 系统数据组织形式

为了使系统取得合理的响应时间,空间数据应根据应用目的、数据特点进行合理组织。由于嵌入式设备任意时刻屏幕显示的图形数据只是读入数据的一部分,因此适当减少非屏幕显示区域的数据,并不影响屏幕图形数据的显示。为此,系统将数据分为若干个数据卷,每个数据卷又包含多个数据集,-个数据集就是某个比例尺的地图数据。一个数据集又分成若干个图幅,一个图幅又按矩形分块方式划分成若干个逻辑数据块。在实际应用中,按照每一点的坐标确定其所在的块。读取数据时,只读该点所在的数据块,从而缩小了读取的数据量,加快了显示和分析的速度。[page]

此外,系统采用了一些数据压缩方法。对数据的压缩方法通常可分为对坐标点有损压缩和坐标点无损压缩。由于嵌入式设备的存储器容量有限,而GIS系统数据量很大,为提高系统性能,通常这两种压缩方法都采用。次序是先进行有损压缩删除不必要的点,然后再进行无损压缩,将空间数据变为相对坐标,以减少单个坐标点的存储空间。具体采用的方法如下。

1)删除在一条笔直的道路上的中间结点,只保留首尾两点。

2)将双精度型或浮点型的坐标映射为整型坐标,数据量可以减少一半。

3)每一条弧段(包括区域边界和线状地物)只记录其起点坐标(x,y),其后续点坐标用相邻两点间的x、y的偏移量代替,即弧段除起始点以外的其它后续点只需用短整型记录,这样就可以将数据量压缩到原来的1/4左右。

4.2 显示速度

为提高地图显示和刷新速度,采用了以下处理技术。

1)引入一个内存DC,首先利用内存DC绘制地图。当需要显示地图时,利用BitBlt函数将内存DC中的地图复制到显示DC上。

2)系统引入变量m_pCSections和IDS。变量m_pCSections是一个链表,该链表中每个元素代表上次显示时读取的图块头信息。IDS也是一个链表,其中每个元素为m_pCSections中与当前视窗有交集的图块的ID号。具体处理步骤如下:

(1) 对m_pCSections中每一个元素,判断它与当前视窗是否有交集,若没有交集,则从m_pCSections中删除该元素。

(2) 对m_pCSections中的每个元素,将它的ID号添加到链表IDS中。

(3) 对数据集中的每个图块,循环执行以下操作:

判断该图块的ID号是否在IDS中,若在,则从IDS中将该ID号删除,继续处理下一图块。

若不在,则从数据文件中读取该图块的图块头信息,根据它的图块头信息判断该图块与当前视窗是否有交集。若交集不为空,则从数据文件中读取该图块的具体图层信息;若交集为空,则释放为该图块头信息分配的存储空间。

3)数据文件中存放每一条线段和面的最小外扩矩形的左上角和右下角信息,这样,就不需在程序中求它的最小外扩矩形,提高了显示速度。

4.3 界面设计

由于嵌入式设备的显示屏幕通常很小,分辨率也不高,而显示一幅较满意的地图又需要一定的屏幕空间,这就需要尽量减少其它元素占用的空间以将尽可能多的区域留给地图显示。为此,在嵌入式系统中通常将界面元素设计为按需显示。为此,系统中将菜单设计为弹出式菜单,仅当用户需要时才弹出以使用户执行所需的功能。 

5 结束语

系统利用MiniGUI在Linux上实现了一个嵌入式GIS,该系统能完成电子地图的显示、放大、缩小、漫游等基本功能。但如何实现GPS导航、信息查询、GSM/GPRS通信等功能还需进一步研究。

本文创新点:本文提供了一种面向手持设备的GIS的实现方案—采用MiniGUI在嵌入式Linux上实现GIS,并提供了一种提高地图显示和漫游速度的处理方法。

参考文献

[1] 汪亚雷, 余春暄. 基于嵌入式Linux的MapInfo格式地图显示[J]. 微计算机信息, 2006,10-2:184-186.

[2] 周立功. ARM嵌入式MiniGUI初步与应用开发范例[M]. 北京:北京航空航天大学出版社,2006, 7-144.

[3] 北京飞漫软件技术有限公司. MiniGUI编程指南, 2004.

[4] 北京飞漫软件技术有限公司. MiniGUI用户手册, 2004.

关键字:嵌入式Linux  MiniGUI  S3C2410  GIS

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
可升级和可配置的PSoC62系列MCU平台架构