Chinaunix首页 | 论坛 | 博客
  • 博客访问: 401868
  • 博文数量: 29
  • 博客积分: 2091
  • 博客等级: 大尉
  • 技术积分: 463
  • 用 户 组: 普通用户
  • 注册时间: 2008-08-05 10:53
文章分类
文章存档

2012年(2)

2011年(6)

2010年(12)

2009年(9)

我的朋友

分类: LINUX

2011-02-28 09:42:22

Mapinfo是目前较为常用的一种电子地图。市面上的各种电子地图基本都是这种格式,或是由这种格式演变来的。这种格式的电子地图,在网上较容易下载或购买到。这篇文章描述了如何在嵌入式linux上显示mapinfo地图。

 

先介绍一下mapinfo地图的大致构成。这种地图是由一个个的地图要素构成的。Mapinfo把这些要素共分成九类:点(point)、直线(line)、折线(polyline)、区域(region)、圆弧(arc)、文本(text)、矩形(rectangle)、圆角矩形(rounded rectangle)、椭圆(ellipse)。每个要素由多个属性构成,如名称,是否显示,更新时间,点,对应点的经纬度等属性,每种要素的属性类型和个数是不相同的。但要素的名字和经纬度数据则是必须的。Mapinfo把地图分为多层,每一层都有上述要素的一种或多种构成。Mapinfo实际上是用一个dbase兼容的数据库来维护这些数据的。通常,每层地图用数据库的一个表(table)来表示,每个表的字段来表示地图要素的一些属性,如名称,是否显示,更新时间等。而每个要素就是表中的一个记录。这里要注意,数据库中存贮的仅是这些维护信息。每个地图要素的真正信息(点,对应的点的经纬度等)是存在与数据库文件同名,但不同扩展名的那些文件中,因此,mapinfo格式的地图是由四个文件构成的,如map.TAB,map.ID,map.MAP,map.DAT四个文件共同构成一个地图。再请注意,这四个文件仅构成了地图的一层,一个完整的地图是多层的,因此要由多个这样的文件组构成。

 

了解了mapinfo地图的构成,那么要想在嵌入式linux上显示此种格式的地图,基本思路自然就是将电子地图的要素一一显示出来。要显示,就要用到图形GUI,这里,选用QT4,这个跨平台的GUI图形库。QT4中,有现成的类可以显示点,线,多边形,椭圆,矩形,文本,显然,mapinfo的地图要素是可以用上述的类来绘出的。每个地图要素要绘在哪里,则由要素中的经纬度来决定。当然,这个经纬度要转换成QT4绘图坐标才行。

 

接下来,就是读取mapinfo地图要素的问题了。这个国外有个开源的项目叫mitab,它是一个动态连接库,程序可以调用库来实现文件的读写,目前最新版为1.7.0。它可以把mapinfo格式的文件中的地图要素信息全部读出,它的网址是,大家可以到这里下载源码。

 

QT4中绘图有多种类都可以,考虑到电子地图绘制所要求的高效和可放大缩小,这里使用QGraphicsView类来实现地图的绘制。Mitab本身是C++编写的,它的功能很强大,不仅可以读取,也可写入即实现地图的编辑,但C++的接口函数没有说明,也缺少使用实例。同时,为了方便调用,此项目还提供了一个简便的C语言的函数接口(这个接口,主要用于读取信息),并提供了详细说明和示例。这里,选用C接口来调用mtiab的库函数。Mitab最初是为了能读取mif格式的地图文件来设计的,mif格式也是mapinfo支持的一种格式,mapinfo软件提供了把mapinfo的地图文件转换为mif地图文件的功能,mif地图文件由mifmid两个文件构成。现在mitab已能直接读取mapinfo格式的地图,但显然,用它来读取mif文件将更为高效。Mitab也提供了将mapinfo转换为mif格式的功能。

 

程序的具体编写就不多说了。这里,我把我写的一个QT4+mitab的读取并显示mif地图文件的程序源码发布出来,以求抛砖引玉。

 

下载链接如下:

 

 

目前,此程序还比较简单,仅固定显示南京市地图(源码包内附了2003版的mif格式南京地图),并且,有些地图显示的相关细节还未完成。

 

这个程序是在mini6410的开发板的嵌入式linux上做出来的,而实际上,因为QT4的跨平台特性,它也可以在X11版的linuxwindows上运行。

阅读(8709) | 评论(14) | 转发(0) |
给主人留下些什么吧!~~

lujianan19892012-02-25 15:22:01

您好,我最近这在看这方面的资料,您发的连接好像现在不能下源码了,您能把源码发给我下么,我的邮箱是fredavid1988@gmail.com 非常感谢!

lujianan19892012-02-25 15:20:40

您好,我最近这在看这方面的资料,您发的连接好像现在不能下源码了,您能把源码发给我下么,我的邮箱是fredavid1988@gmail.com 非常感谢!

chinaunix网友2011-05-09 17:00:25

hugerat , 没让你用QGIS, 它的规模大了点。 但是它是开源的,而且实现了绝大部分的GIS规范,是学习的非常理想的资料。 结合MapServer一起研究,这样你就可以开发出自己的QTGIS来。 通过上面的是为了学习它们的框架设计。

hugerat2011-05-09 16:50:10

回楼上的网友。那个QGIS并不适合于嵌入式应用啊。

chinaunix网友2011-05-09 14:54:26

QGIS,再结合看看MapServer的代码。矢量栅格读写库就用GDAL。这样收获会大些