分类: 嵌入式
2014-06-05 16:55:03
MIF格式电子地图的读取操作依赖于MITAB库。
MITAB库(MapInfo.TABand.MIF/.MIDRead/WriteLibrary)是一个用来读写MapInfo.。公司TAB格式和MIF格式电子地图的开源C++库。MITAB库由MITABPaekage、CPL库及OGR库三个部分组成。MITAB库的最新版本是mitab 1.7.0,解压后进入源文件根目录进行编译便可得到动态链接库。
MapInfo库为应用程序提供了两种访问接口:C语言接口及C+十接口。MITAB为C语言接口提供完整的文档资料,C语言接口只是一个简化的接口,它能满足一般的应用,但并不能访问到每一个对象类型的每一个属性;C++接口可以访问到MapInfo。数据模型的每一个特征,但是目前还没提供关于MITAB库中C++类的文档。C语言应用编程接口完全能满足要求,因此使用MITAB库C语言API来设计程序。
使用MITAB库读取MIF格式电子地图一个图层的步骤如下:
(1)调用 mitab_c_open()函数打开一个图层的mid、mif格式文件,函数参数为图层名称,打开成功返回该图层的句柄handle,失败返回NULL。
(2)调用 mitab_c_next_feature(handle,-1)获得数据段中第一个空间几何对象的ID,需要说明的是,如果第二个参数为当前对象的ID,则函数返回下一个对象的ID。
(3)如果当前对象ID为-1,表明数据段结束,跳转到(9)执行;否则,执行步骤(4)。
(4)调用函数 mitab_c_read_feature(handle,ID),由对象ID获得对象。
(5)调用mitab_c_get_type()函数获得对象类型。
(6)根据(5)获得的对象类型执行对应操作,提取该对象数据。M工TAB库共提供了12种对象类型:TABFC_NoGeom、TABFC_Point、TABFC_Font Point、TABFC_CustomPoint、TABFC_Text、TABFC_Polyline、TABFC一Arc、TABFC_Region、TABFC_Reetangle、TABFC_ElliPse、TABFC_Mu1tipoint和TABFC_Colleetion。这里用到的只有TABFC_Point、TABFC_Polyline、TABFC_Region三种。
(7)调用mitab_c_destory_feature()函数销毁由步骤(4)得到的对象。
(8)调用mitab_c_next_feature(handle,ID)得到下个对象的ID。然后跳转到步骤(3)。
(9)调用mitab_c_close()函数关闭图层文件。
通过以上9个步骤,便可以完成对MIF格式电子地图一个图层的读取工作,具体流程图如图所示。