Chinaunix首页 | 论坛 | 博客
  • 博客访问: 397653
  • 博文数量: 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上运行。

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

chinaunix网友2011-05-09 14:47:08

我是上面的网友(有完整QT写的GIS) . 想起来这是公司的项目,不方便公开。 感兴趣的朋友可以去下QGIS(QT4写的开源)代码, 有问题可以一起交流。

chinaunix网友2011-04-25 19:31:37

我有完整的QT 写GIS 读取mapinfo tab /mif shp等 有需要的可以联系我 wxy3064one@163.com 或者去http://blog.csdn.net/ddddfw888

chinaunix网友2011-03-16 10:57:59

非常好的东西, 希望楼主越做越好!

chinaunix网友2011-03-06 08:50:22

很好的, 收藏了 推荐一个博客,提供很多免费软件编程电子书下载: http://free-ebooks.appspot.com