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格式的文件中的地图要素信息全部读出,它的网址是http://mitab.maptools.org/,大家可以到这里下载源码。

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

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

下载链接如下:

http://cid-6b7a311158eebf59.office.live.com/self.aspx/%e5%8e%9f%e5%88%9b%e5%85%b1%e4%ba%ab%e8%bd%af%e4%bb%b6/qt4^_mitab^_mif.rar

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

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

附上windowsXP下的截图

X11 linux下的截图

在mini6410嵌入式linux上使用QT4和mitab显示mapinfo或mif格式电子地图相关推荐

  1. 嵌入式Linux上通过boa服务器实现cgi/html的web上网【转】

    转自:http://blog.csdn.net/tianmohust/article/details/6595996 版权声明:本文为博主原创文章,未经博主允许不得转载. 嵌入式Linux上通过boa ...

  2. 在嵌入式linux上玩OpenGL

    前言 在我的嵌入式linux上板子资源和性能还是有限.想玩下OpenGL,倒不是板子flash或内存太小,而是底层图形接口是基于framebuffer的dev/fb0的,在标准的OpenGL下不支持. ...

  3. qt 调用linux键盘输入,嵌入式linux上QT标准键盘输入的实现

    1.嵌入式linux上QT标准键盘输入的实现 在嵌入式平台上运行QTE时,使用的键盘通常不是标准键盘,而是嵌入式设备外扩的普通按键.那么实现QTE键盘输入的方法大体上可以分为两类: (1)编写一个普通 ...

  4. 推荐一款不错的嵌入式GUI(玲珑GUI)及在嵌入式linux上的移植

    玲珑GUI介绍 玲珑GUI(LLGUI)是一套使用简单.低价的单片机GUI解决方案.可以用来代替串口屏.组态,降低产品成本,产品软硬件自主可控. 配套界面开发软件,图形化编辑界面,生成C代码. 如其名 ...

  5. MiniGUI和其他嵌入式Linux 上的图形及图形用户界面系统

    基于linux和 minigui的嵌入式软件开发指南 第一节:MiniGUl-Threads 和 MiniGUl-Lite 的选择 第二节:理解消息循环和窗口过程 ----------- MiniGU ...

  6. 在嵌入式Linux上使用CF接口的蓝牙模块

    导读: 随着各种支持蓝牙通信技术的设备的出现, 蓝牙通信变得越来越普及和广泛. 因此在嵌入式设备上集成蓝牙模块的需求变得越来越普遍. 本文以Anycom公司的CF接口的LSE139蓝牙模块为例, 介绍 ...

  7. 基于 Linux 和 MiniGUI 的嵌入式系统软件开发指南题八——MiniGUI 和其他嵌入式 Linux 上的图形及图形用户界面系统

    简介: 为了让读者对嵌入式 Linux 当中能够使用的图形及图形用户界面有个较为全面的认识,本文将为读者介绍一些嵌入式 Linux 系统中常见的图形及图形用户界面系统,并作为<基于 Linux ...

  8. 嵌入式 Linux 上的图形及图形用户界面系统

    1 Linux 图形领域的基础设施 本小节首先向读者描述 Linux 图形领域中常见的基础设施.之所以称为基础设施,是因为这些系统(或者函数库),一般作为其他高级图形或者图形应用程序的基本函数库.这些 ...

  9. MiniGUI 和其他嵌入式 Linux 上的图形及图形用户界面系统

    魏永明 (ymwei@minigui.org) 自由撰稿人 2001 年 11 月 为了让读者对嵌入式 Linux 当中能够使用的图形及图形用户界面有个较为全面的认识,本文将为读者介绍一些嵌入式 Li ...

最新文章

  1. [渣译文] 使用 MVC 5 的 EF6 Code First 入门 系列:MVC程序中实体框架的连接恢复和命令拦截...
  2. 如何把html转换成音频网址,怎么把视频转换成音频 视频转换成mp3
  3. Centos 7 搭建nginx 服务 使得别人能够访问自己的个人网站
  4. 【GIT】使用Git命令窗口将本地工程提交至远程GitHub
  5. CentOS RPM源镜像源(国内+国外)
  6. Oracle19c下载安装和配置教程
  7. 详解安全测试工具:SAST、DAST、IAST、SCA的异同
  8. Vba_下载网络文件(图片)
  9. 超越阿里云,华为云服务器究竟有多厉害!
  10. android浏览器实现收藏功能,Lua布局fusionapp 收藏功能与历史记录实现
  11. 带看门狗的PMOS缓启电路
  12. ahocorasick使用
  13. 中画幅相机焦距水平视角_摄影中的“中画幅”是什么?
  14. Android 手机重启相关内容
  15. 微信公众号获取定位地图(有经纬度)
  16. 如何用html制作移动app,html移动开发app
  17. mc服务器怎么修改祭坛的概率,邪术祭坛 (Eldritch Altar)
  18. 阿里巴巴成立科技伦理治理委员会 推动技术治理、践行“好科技”
  19. java-net-php-python-springboot健身房管理系统计算机毕业设计程序
  20. [转]活灵活现用Git--基础篇

热门文章

  1. USB规范中EHCI,UHCI,OHCI区别
  2. 广州数控(广数GSK)系列数据采集
  3. oracle or索引失效_ORACLE索引失效的问题分析
  4. IOT技术在农业生产上的应用
  5. C程序翻译成汇编语言
  6. 一款非常优秀的数据库建模软件PDMman
  7. netlink怎么读_如何用netlink接口读取内核路由表
  8. 网卡上两个指示灯的作用
  9. C++中String 的用法 string 字符串的使用方法
  10. mtputty 中菜单不小心隐藏