DIY编程器网

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 923|回复: 0
打印 上一主题 下一主题

[GPS] 基于Mitab库的嵌入式GIS地图导航设计与实现

[复制链接]
跳转到指定楼层
楼主
发表于 2014-10-1 06:13:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

夏玉杰,翟艳磊:基于Mitab 库的嵌入式GIS 地图导航设计与实现2011, Vol.32, No.4 1303
0 引言
地理信息系统(geographic information system,GIS)是借助
计算机软硬件设备,以处理地理相关数据的收集、存储、管理、
查询、分析和辅助决策的信息系统。嵌入式系统是以应用为
中心,以计算机技术为基础,并且软硬件可裁剪,适用于应用
系统对功能、可靠性、成本、体积、功耗有严格要求的专用计算
机系统。嵌入式地理信息系统是GIS 与嵌入式设备集成的产
物,是当前GIS 研究领域的一个重要趋势[1-2]。但传统的地理
信息系统大部分都安装在PC 机上,且通常采用MapInfo 作为
理信息数据分析和处理的平台[3],不具备移动性和便携性。随
着地理信息系统与嵌入式技术的飞速发展,把GIS 移植到嵌
入式系统中,将图形管理和数据管理有机地结合起来,提供空
间数据和属性数据,实现便携移动式嵌入式GIS 集成平台已
成为可能。
与传统GIS 技术相比,嵌入式GIS 具有跨平台、易集成等
特点,但受自身条件限制,其数据存储和处理能力有限。导航
电子地图是嵌入式GIS的应用核心,如车载导航、个人导航和
PDA 等应用都需要电子地图的支持,但MapInfo 原始数据不
能在嵌入式GIS 平台上直接应用,需要输出为包含地理目标
空间属性信息的MIF(MapInfo interchange format)格式文件。因
此针对嵌入式GIS 系统特点,利用开源的MITAB 库对MIF 文
件进行读写转换和适当裁减,选择合适的数据结构来组织矢
量地图数据,实现了以嵌入式Linux 为操作系统的GIS 电子地
图导航系统。
1 Mitab 库介绍
Mitab 库是一个开放源码的C++库,提供了丰富的接口函
数和C++类,支持MIF 文件读写、空间对象几何图形和属性数
据读取、设置投影方式等,使用抽象数据模型来解析它所支持
的空间对象的数据结构[4]。Mitab 的基本结构是由Mitab
Package、CPL library 和OGR library 共3 个部分组成。其中,
Mitab Package 是操作MapInfo 文件的主要接口,CPL Library 和
OGR Library 是Mitab 的两个支持库,CPL(common portability li-
收稿日期:2010-04-16;修订日期:2010-06-21。
基金项目:河南省自然科学基金项目(072102210083);河南省教育厅基金项目(2009A510009)。
作者简介:夏玉杰(1978-),男,河南洛阳人,硕士,讲师,研究方向为通信与信息系统; 翟艳磊(1982-),男,河南洛阳人,硕士,助教,
研究方向为测控网络。E-mail:[img]mailto:xiayjie_2001@yahoo.com.cn]xiayjie_2001@yahoo.com.cn
基于Mitab 库的嵌入式GIS 地图导航设计与实现
夏玉杰, 翟艳磊
(洛阳师范学院物理与电子信息学院,河南洛阳471022)
摘要:利用嵌入式Linux 操作系统和MIF 格式地图数据源,设计了一种基于Mitab 库的嵌入式GIS 导航电子地图系统。分
析了MIF 数据文件的存储格式和地图对象模型,提出嵌入式GIS 导航电子地图系统结构。采用图形用户界面系统MiniGUI
开发,通过Mitab 库读取矢量地图几何数据和属性数据,并进行地图数据坐标转换算法处理,实现了嵌入式GIS 地图可视化
导航功能。原型系统运行实例表明了模型的可行性和算法的有效性。
关键词:Mitab 库; 嵌入式GIS; 地图数据; 坐标转换; 嵌入式Linux
中图法分类号:TP391 文献标识码:A 文章编号:1000-7024 (2011) 04-1303-04
Design and implementation of embedded GIS map navigation based on Mitab library
XIA Yu-jie, ZHAI Yan-lei
(Department of Physics and Electronic Information, Luoyang Normal College, Luoyang 471022, China)
Abstract:With embedded Linux operating system and map data sources of MapInfo Interchange Format (MIF), a type of embedded
GIS electronic map navigation system based on Mitab library is designed. By analyzing storage format of MapInfo Interchange data file
and map objects models, the construction of embedded GIS electronic map navigation system is proposed. By taking graphic user
interface system MiniGUI as developing tool, visual navigation functions for embedded GIS electronic map are implemented by using
Mitab library to read geometry data and attribute data of vector map and designing algorithm of map data coordinate transformation. An
application case of prototype system validated the feasibility of the model and the effectiveness of the algorithm.
Key words:Mitab library; embedded GIS; map data; coordinate transformation; embedded Linux
计算机工程与设计Computer Engineering and Design
1304 2011, Vol.32, No.4 计算机工程与设计Computer Engineering and Design
brary)是一个可移植的公用库,封装了通用的地理数据结构和
对不同平台的库操作;OGR(OpenGIS simple features reference)
是用来封装简单地理特征(如点、线、面等)数据结构和操作的
C++库。
2 系统体系结构
系统体系结构如图1 所示。系统由用户应用程序、GIS 电
子地图数据源、MiniGUI 图形支持系统和嵌入式Linux 操作系
统4 部分组成。系统利用MapInfo 的中间转换格式MIF/MID
数据文件作为地图数据,通过Mitab 库读取矢量地图,并进行
坐标、投影等相关转换处理,采用MiniGUI 编程将地图绘制到
显示设备中,起到可视化定位导航的目的。
操作系统内核负责处理器管理、存储器管理和进程调度
等,其系统调用为应用层提供硬件接口和开发API 函数。本
系统选择嵌入式Linux 操作系统,它遵循GPL 条款发布,成本
低,内核稳定而精悍,运行所需资源少,方便裁剪定制,支持广
泛的硬件平台。
电子地图数据源采用MapInfo 地图的MIF 格式,利用基
于C++的开放源码Mitab 库提供的核心函数对MIF/MID 文件
字段内容进行读写操作。
MiniGUI 实现图形用户界面设计[5],遵循GPL 条款发布,
是基于线程的轻型、高性能、高可靠性、可配置的图形界面系
统,界面控制和应用逻辑中的数据传递在不同线程之间通过
消息来完成。
用户应用程序负责具体的业务逻辑,实现系统地图显示、
漫游、缩放和定位导航等功能,并提供良好的人机交互界面。
3 地图数据组织
MapInfo 是面向应用的桌面地图信息系统,数据组织方式
灵活,查询、统计、分析及制图功能强大,是目前使用最为广泛
的地图格式,主要采用TAB 格式和MIF 格式两种格式存贮。
MapInfo 公司没有公布以矢量形式存储的TAB文件格式,但提
供了与外界交换数据的MIF 文件格式[6]。
3.1 MIF 格式
本系统选择完全开放的MIF 格式作为地图数据源,矢量
地图数据是由MIF 文件和MID 文件共同组成。其中,MIF 数
据文件主要保存空间数据的几何图形信息;MID 数据文件则
按记录顺序保存了每个空间对象的所有属性信息。
MIF 数据文件由文件头区域和数据段组成,有关如何创
建MapInfo 表的信息保存在文件头中,图形对象定义保存在数
据段中,数据段包含MapInfo 定义的点、线、区域、圆弧、文本
和椭圆等实体对象,可以有任意多个图形初值,每个初值代表
一个图形对象。如:区域对象通常是包括一个或几个多边形,
这由跟在Region 后的numPolygons 参数来指定多边形个数,每
个多边形再通过numPts 参数来表明该多边形中的节点数,然
后跟着每个节点的(x,y)坐标对,并且通过可选项Pen 和Brush
子句分别指定画线笔的宽度、模式、颜色和填充时采用的模
式、前景色及背景色,用可选项Center 子句说明几何对象中心
位置坐标。
MID 数据文件为对应实体的属性。MIF 和MID 文件中的
条目相互匹配,MIF 文件中的第一个对象与MID 文件中的第
一行关联,MIF 文件中的第二个对象与MID 文件中的第二行
关联,依此类推。如果MID 文件中特定的一行没有对应的图
形对象,那么必须在MIF 文件中的相应位置上写一个“空白”
对象(NONE)以保留该位置。
3.2 地图对象结构模型
地图由各图层(对应MIF 文件和MID 文件)构成,图层管
理各种类型图形对象,包含对象的几何图形数据和属性信息,
并提供绘制、数据转换、几何操作相关等方法。几何图形数据
可用于对象的绘制和几何操作,属性数据则用于对象的标注
和查找。本系统电子地图源的图形对象主要由点(TABFCPoint)
、线(TABFCPolyline) 和区域(TABFCRegion) 3 类组成。
TABFCPoint 型——用于点位置图层绘制,TABFCPolyline
型——用于道路图层绘制,TABFCRegion 型——用于区域型图
层的绘制。点、线、区域图形对象类则定义各自的特有属性,
并实现自身的绘制方法。系统地图数据对象结构模型如图
2 所示。
3.3 地图数据提取
将MapInfo 地图输出为记录图层空间信息的MIF 文件和
记录图层属性信息的MID 文件,利用Mitab 库按图层读取地
图数据MIF/MID 文件。读取地图数据的流程如图3 所示。
(1) 调用IMapInfoFile 类的SmartOpen() 函数,打开包含图
层数据的.MIF 格式文件。打开成功则返回相应的MIFFILE 类
对象指针,如果打开失败返回NULL。
(2)调用GetLayerDefn()函数,获取图层属性信息,并利用
GetFieldCount()读取图层字段数。
(3)调用GetNextFeaturesId ( 1)函数获得图层中对象首指
针,该函数返回一个整型值。
图1 系统体系结构
应用程序
地图数据源
数据模型
数据结构
MiniGUI
嵌入式Linux 操作系统








图2 地图对象结构模型

Layer
对象
Object

TABFCPoint
线
TABFCPolyline
区域
TABFCRegion
夏玉杰,翟艳磊:基于Mitab 库的嵌入式GIS 地图导航设计与实现2011, Vol.32, No.4 1305
(4)判断函数返回值是否为1。若为1,进入过程(6),否
则进入过程(5)。
(5)调用GetFeatureRef()函数,返回TABFeature 类对象,通
过GetFeatureClass()函数获得对象类型值,根据整型返回值判
断对象类型。把获得的TABFeature 类指针强制类型转换为对
应的对象类指针。调用对象类函数读取属性数据和几何数据
到内存。然后指针下移进入过程(4),遍历所有对象。
(6)对象数据读取完毕,调用Close()函数关闭MIF 格式文
件,释放MIFFILE 类指针。
3.4 坐标转换实现
地图数据源使用所处经纬度的地理坐标系,而电子地图
在终端上进行绘制和几何操作,使用的是平面直角坐标系。因
此通过高斯--克吕格投影变换[7],可将地理空间中的实体对象
经纬度坐标转换为地图平面坐标。虽然地图平面坐标系与屏
幕坐标系都是平面直角坐标系,但它们的坐标原点不同,坐标
轴方向和刻度单位不同,因此要把地图绘制在嵌入式设备屏
幕上,还需要通过映射模式实现从“窗口”(逻辑坐标)到“视口”
(设备坐标) 的变换[8-9]。窗口是地图平面坐标空间中的一个矩
形区域,决定地图平面空间中的几何模型的哪一部分应该被
显示,是基于逻辑坐标的。而视口是设备坐标空间中的一个
矩形区域,决定应该绘制在设备表面的何处,是基于设备坐标
(像素)的。它们之间的比例决定坐标的缩放。
窗口坐标转换为地图坐标原理在于:设备空间中某段距
离值和坐标范围值的比例与页面空间中的比例保持一致,即
逻辑原点(xWinOrg,yWinOrg) 总是被映射为设备原点
(xViewOrg,yViewOrg)。地图平面坐标到设备像素坐标的转换
公式如下
xViewPort = ((xWindow-xWinOrg)*xViewExt/xWinExt)+xViewOrg
yViewPort = ((yWindow-yWinOrg)*yViewExt/yWinExt)+yViewOrg
式中:xViewPort,yViewPort——设备单位的(x,y)值;xWindow,
yWindow——逻辑单位的(x,y)值;xWinOrg,yWinOrg——窗口
原点(x,y) 值;xViewOrg,yViewOrg——视口原点(x,y) 值;
xWinExt,yWinExt——窗口(x,y)范围;xViewExt,yViewExt——
视口(x,y)范围。
4 实验与结果分析
嵌入式GIS 导航电子地图是以地理空间数据为基础,主
要实现地图绘制、显示、浏览、定位以及模块间消息的获取和
处理。界面控制和应用逻辑通过线程交互数据,线程处理函
数读取实体对象的地理经、纬度数据,将经纬度坐标转换为屏
幕的像素坐标,绘制并实时刷新电子地图。
4.1 MiniGUI 主程序框架
MiniGUI 是基于消息驱动的系统,应用程序功能模块将
触发的事件转换为消息,并将消息放入目标程序的消息队列
中,窗口过程函数执行用户的各项动作。利用SetDesktopRect
() 函数指定显示区域,调用CrearMainWindow() 函数创建主窗
口,通过ShowWindow()函数把所创建的主窗口显示在屏幕上,
然后进入消息循环。在需要进行窗口重绘时,发送绘制消息
MSG_PAINT。应用程序在响应MSG_PAINT 消息时,利用Get-
Message()函数从消息队列中获取消息,利用DispatchMessage()
函数将消息发送到指定窗口并绘制。MiniGUI 主程序框架如
图4 所示。
4.2 电子地图导航
在地图窗口中,为了方便操作,设计工具栏。当用户点击
工具栏上图标时,响应地图的放大、缩小、漫游等操作功能。
采用MiniGUI 的CTRL_NEWTOOLBAR 控件类调用createwindow()
函数创建工具栏。填充NTBINFO 结构,并将该结
构指针通过CreateWindow() 函数的dwAddData 参数传递给控
件类的窗口过程。NTBINFO 结构用来定义工具栏所用位图信
息,向工具栏控件发送NTBM_ADDITEM消息并传递NTBITEMINFO
结构,可向工具栏中添加工具项。工具栏在用户单击
图3 电子地图数据提取流程
开始
调用SmartOpen ()
打开图层.MIF 格式文件
获取图层属性信息
调用GetLayerDefn ()
读取图层字段数
调用GetFieldcount ()
指向首对象
调用GetNextFeatureID()
对象是否读取完毕
结束
指向下一个对象
读取空间对象图形数据
读取空间对象属性数据
判断TABFeauture 类型
调用GetFeatureClass ()
获取TABFeauture 对象类
调用GetFeatureRef ()
N
Y
图4 主程序流程
程序入口点
MiniGUIMain ()
创建显示主窗口
创建导航工具栏
读取图层文件
窗口过程函数
MSG_PAINT 消息
GetMessgage ()
从消息队列中获取消息
输出显示
Y
N
1306 2011, Vol.32, No.4 计算机工程与设计Computer Engineering and Design
某个按钮时触发消息,工具栏的通知码就是用户单击的按钮
的标识符,该标识符将作为工具栏通知消息的通知码传递到
工具栏回调函数。
对地图进行缩放和漫游等方式导航,可设定相应的平移/
缩放因子改变地图显示的区域方向和大小。地图的缩放需要
首先计算地图的显示比例尺,将点击的位置的经纬度坐标作
为新的参考点,把点击的位置移动到屏幕中心,根据具体的操
作乘以该缩放因子,改变地图的显示区域。地图的漫游只改
变地图的中心点,而不改变单位屏幕像素对应的地图距离,它
是将地图的整体或者部分移动到坐标系中的另外位置,改变
地图的观察区域。
4.3 实验结果
将图层对象几何图形数据和属性数据读入内存,然后进
行坐标变换,获取并设置不同对象的画笔、字体、颜色等信息
绘制图层,电子地图绘制流程如图5 所示。根据位置变化确
定需要重绘的区域,通过MiniGUI 的消息响应机制调用InvalidateRect()
函数,在电子地图上实时绘制显示,嵌入式电子地
图显示效果如图6 所示。
5 结束语
电子地图设计是嵌入式GIS 应用的关键,本文以Maplnfo
格式的桌面电子地图文件为数据来源,针对嵌入式GIS 的特
点选用合适的数据结构来组织数据。在Linux 操作系统下,以
图形用户界面MiniGUI 为开发环境,通过Mitab 库读取MIF 格
式矢量地图几何数据和属性数据,实现了嵌入式GIS 地图可
视化定位导航功能,实验结果表明该电子地图方案具有可行
性和实用性。本设计为嵌入式电子地图的发展和应用提供良
好支持,可在嵌入式设备(如手持终端、车载终端等) 上使用,
适合用在旅游景点导航、城市路径规划、车辆导航等方面,具
有较好的实用意义和经济价值。
参考文献:
[1] 沈永增,姚俊杰,房晓菲.基于嵌入式电子地图的导航最优路径
规划[J].浙江工业大学学报,2008,36(4):181-185.
[2] 王景存,陈彬,陈和平.GIS 系统地图快速显示模型设计与实现
[J].计算机工程与设计,2007,28(5):1179-1181.
[3] 汪亚雷,余春暄.基于嵌入式Linux 的MapInfo 格式地图显示
[J].微计算机信息,2006,22(10):184-186.
[4] Mitab Mailing List.Mitab MapInfo .TAB and .MIF/.MID read/
write library[EB/OL]. [img]http://mitab.maptools.org]http://mitab.maptools.org,2008.
[5] 李旭升,李兵,曲尚勇,等.基于ARM-Linux 的MiniGUI 的应用
研究[J].西华大学学报,2008,27(3):64-68.
[6] 汪春鹏,周常森.MapInfo 格式地图解析程序设计[J].测控技术,
2008,27(9):47-50.
[7] 姚俊杰,沈永增,房晓菲.基于Qt/Embedded 的嵌入式导航电子
地图实现[J].计算机测量与控制,2008,16(4):570-572.
[8] 孙连三,张欣英.GIS 中地图投影扩展组件的设计和实现[J].计
算机工程与设计,2008,29(11):2973-2975.
[9] 李文君,岳曾敬.基于嵌入式Linux 电子地图系统的研究[J].兵
工自动化,2008,27(4):94-96.
图5 地图绘制流程
设置坐标投影模式
设置视图原点、范围
绘制图层
设置该图层所用的
画笔、字体、颜色等
还有图层绘制
结束绘制
N
Y
图6 嵌入式电子地图显示效果
[7] 刘立恒.基于SOA的商业智能平台的研究与设计[J].计算机工
程,2008,34(3):75-77.
[8] 杨青. 模型驱动的业务流程执行方法研究[J]. 计算机仿真,
2009,26(6):109-114.
[9] Ahern D M,Armstrong J.CMMI(R) SCAMPI distilled:Appraisals
for process improvement[M].Addison-Wesley Professional,2005.
[10] Hur W,Jung JY,Kim H,et al.Model-driven approach to workflow
execution[C].BPM,2004:261-273.
[11] 祁国宁.大批量定制原理及关键技术研究[J].计算机集成制造
系统,2003,9(9):776-783.
[12] 任磊,王威信,周明骏,等.一种模型驱动的交互式信息可视化开
发方法[J].Journal of Software,2008,19(8):1947-1964.
[13] Alistair Cockburn.Agile software development[M].北京:机械工
业出版社,2007.
[14] Brown A W.Model driven architecturerinciples and practice
[J].Software and Systems Modeling,2004,3(4):314-327.
[15] 陆汝钤,金芝.从基于知识的软件工程到基于知件的软件工程
[J].中国科学E 辑:信息科学,2008,38(6):843-863.
基于Mitab库的嵌入式GIS地图导航设计与实现.pdf (257.85 KB, 下载次数: 2)
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|文字版|手机版|DIY编程器网 ( 桂ICP备14005565号-1 )

GMT+8, 2024-5-12 12:49 , 耗时 0.100856 秒, 21 个查询请求 , Gzip 开启.

各位嘉宾言论仅代表个人观点,非属DIY编程器网立场。

桂公网安备 45031202000115号

DIY编程器群(超员):41210778 DIY编程器

DIY编程器群1(满员):3044634 DIY编程器1

diy编程器群2:551025008 diy编程器群2

QQ:28000622;Email:libyoufer@sina.com

本站由桂林市临桂区技兴电子商务经营部独家赞助。旨在技术交流,请自觉遵守国家法律法规,一旦发现将做封号删号处理。

快速回复 返回顶部 返回列表