Chinaunix首页 | 论坛 | 博客
  • 博客访问: 294841
  • 博文数量: 78
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 572
  • 用 户 组: 普通用户
  • 注册时间: 2012-11-26 09:59
文章分类

全部博文(78)

文章存档

2015年(8)

2014年(70)

我的朋友

分类: 嵌入式

2014-06-05 16:55:03

        MIF格式电子地图的读取操作依赖于MITAB库。

        MITAB(MapInfo.TABand.MIF/.MIDRead/WriteLibrary)是一个用来读写MapInfo.。公司TAB格式和MIF格式电子地图的开源C++库。MITAB库由MITABPaekageCPL库及OGR库三个部分组成。MITAB库的最新版本是mitab 1.7.0,解压后进入源文件根目录进行编译便可得到动态链接库。

        MapInfo库为应用程序提供了两种访问接口:C语言接口及C+十接口。MITABC语言接口提供完整的文档资料,C语言接口只是一个简化的接口,它能满足一般的应用,但并不能访问到每一个对象类型的每一个属性;C++接口可以访问到MapInfo。数据模型的每一个特征,但是目前还没提供关于MITAB库中C++类的文档。C语言应用编程接口完全能满足要求,因此使用MITABC语言API来设计程序。

        使用MITAB库读取MIF格式电子地图一个图层的步骤如下:

        (1)调用 mitab_c_open()函数打开一个图层的midmif格式文件,函数参数为图层名称,打开成功返回该图层的句柄handle,失败返回NULL

        (2)调用 mitab_c_next_feature(handle,-1)获得数据段中第一个空间几何对象的ID,需要说明的是,如果第二个参数为当前对象的ID,则函数返回下一个对象的ID

        (3)如果当前对象ID为-1,表明数据段结束,跳转到(9)执行;否则,执行步骤(4)。

        (4)调用函数 mitab_c_read_feature(handleID),由对象ID获得对象。

        (5)调用mitab_c_get_type()函数获得对象类型。

        (6)根据(5)获得的对象类型执行对应操作,提取该对象数据。MTAB共提供了12种对象类型:TABFC_NoGeomTABFC_PointTABFC_Font PointTABFC_CustomPointTABFC_TextTABFC_PolylineTABFCArcTABFC_RegionTABFC_ReetangleTABFC_ElliPseTABFC_Mu1tipointTABFC_Colleetion。这里用到的只有TABFC_PointTABFC_PolylineTABFC_Region三种。

        (7)调用mitab_c_destory_feature()函数销毁由步骤(4)得到的对象。

        (8)调用mitab_c_next_feature(handleID)得到下个对象的ID。然后跳转到步骤(3)

        (9)调用mitab_c_close()函数关闭图层文件。

        通过以上9个步骤,便可以完成对MIF格式电子地图一个图层的读取工作,具体流程图如图所示。



refer to thesis:面向应急物流的嵌入式移动终端的设计与实现
阅读(1146) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~