mapInfo文件格式詳解


from:http://hotolee.blog.163.com/blog/static/3815229920098434956370

MapInfo以表(Tab)的形式存儲信息,每個表是由一組MapInfo文件組成,包括:   
  1、屬性數據的表結構文件,后綴為.TAB。該文件定義了地圖屬性數據的表結構,包括字段數、字段名稱、字段類型、字段寬度、索引字段及相應圖層的一些關鍵空間信息描述。.TAB文件實際上是一個文本文件,可以在寫字板中打開觀察其內容。   
  2、屬性數據文件,后綴為.DAT。該文件存放了地圖的屬性數據。.DAT文件是二進制文件,它的格式與dBase   IV的文件格式一致。   
  3、空間數據文件,后綴為.MAP。該文件是二進制文件,存放了圖形對象的數據,包括空間對象的幾何類型、坐標信息和顏色信息等。   
  4、交叉索引文件,后綴為.ID。該文件是二進制文件,用於連接屬性數據和圖形數據,記錄了地圖中每一個空間對象在空間數據文件(.MAP)中的位置指 針。文件中每四個字節構成一個指針。指針排列的順序與屬性數據文件(.DAT)中屬性數據記錄存放的順序一致。交叉索引文件實際上是一個空間對象的定位 表。   
  5、索引文件,后綴為.IND。MapInfo表中有時也包括該文件,用於對某些字段建立索引。   
  .TAB文件和.DAT文件是MapInfo表中必須的兩個文件,一個MapInfo表至少應該包括一個.TAB文件和一個.DAT文件。.MAP和.ID文件不是必須有的,但是如果有了.MAP文件,那么.ID文件也必須存在。  

在Mapinfo中每張地圖被稱為一個圖層(或被稱為表)。
每個Mapinfo表由兩部分最重要的內容構成:圖形(稱為空間對象)和數據(稱為屬性)。
Mapinfo 實現了"圖形對象"及"屬性數據"一對一聯系,從而能夠完成圖形數據和屬性數據的雙向查詢。為了實現基於屬性信息的快速查詢,Mapinfo支持針對屬性 字段建立索引。Mapinfo以文件的方式,將上述的不同信息存放到不同的文件中以共同組成一個完整的圖層。

細說Mapinfo索引文件*.ind :
每個Mapinfo表是由幾個文件組成的,不同的文件用來保存圖層的不同信息。其中,*.ind 文件用來存放Mapinfo表的數據索引。是Mapinfo表的索引文件,它能提高Mapinfo數據檢索的效率,同時它允許你使用“查找”命令查找地圖 對象。若用查找命令定位一個地址(城市),在表中必須對這些城市建索引,這些索引就保存在*.ind文件中。
當你對一幅圖層建立索引之后,Mapinfo 會自動生成一個索引文件*.ind。當你將一個圖層的索引取消之后,Mapinfo 也會自動將索引文件*.ind刪除。

MIF,MID格式

MapInfo雖然沒有公開其內部的數據結構,但它給出了用於格式交換的數據結構,即MIF與MID,其中MIF文件保存圖形數據,MID文件保存 屬性數據。將其它形式的地圖數據轉成MIF與MID格式,然后利用MapInfo菜單中的Import命令就可以導入,從而完成轉換。也可以在 mapInfo中把*.tab文件轉換為*.mif,*.mid文件

MIF是Mapinfo用來向外交換數據的一種中間交換文件。當用戶在Mapinfo中將一張Mapinfo地圖表以MIF格式轉出到MIF文件中后,Mapinfo會同時在用戶指定的保存目錄下生成兩個文件(*.mif,*.mid)。
其中*.mif文件保存了該Mapinfo表的表結構及表中所有空間對象的空間信息:
每個點對象的點位坐標、符號樣式;
每個線對象的節點個數、節點坐標、線樣式;
每個區域對象的包含的子區域個數、每個子區域的節點數、節點坐標等、填充模式
而*.mid文件則按記錄順序保存了每個空間對象的所有屬性信息。
這兩個文件都為文本性質的文件,用戶可以通過相應的文件讀寫方法實現對文件內容的讀寫。

 

MapInfo.dat格式說明

據說MapInfo是嚴格的DBaseIV格式:

01          000x03:總是這個值

01-03      最后更新日期,格式:年年月月日日

04-07      表中有多少條記錄(32位,最大4294967295條記錄)

08-09      header部分有多少字節(16位,最大65535字節),包括Header段的結束標記0XOD在內

10-11      每條record部分有多少字節(同上)

12-13      保留的,不用管(這后面都可不用管)

14          未完成事務標記。開始事務時其值被設置為0x01,事務完成或事務回滾時,重設位0x00。也可以不管它。

15          加密標記。加密后為0x01否則是0x01。單純的修改該標記並不能對記錄進行加密解密。

16-27      用於DBaseIV多用戶環境。不用管。

28          是否存在產品索引,是則為0x01,否則0x00。也不用管。

29          DBaseIv語言驅動Id

30-31      保留的,全是0x00,不用管。

接着每32位保存一個字段的信息

0-9         字段名的AscII碼

100        x00

11          字段類型標識(如0x43代表charactor,相當於字母C.MapInfo只使用了C,L,N三種.要獲得實際的字段類型和含義需要參照.tab文件)

12-15      displacementoffieldinrecord,可以不用管

16          字段長度

17          字段的小數個數

18-19      保留的,不用管

20          dbaseIvworkareaid不用管

21-30    保留的,不用管

31         該字段是否是產品索引的一部分,如果是則值為0x01,否則0x00

所有字段描述完了以后,是header的結束標記0x0D

接着是緊密排列的記錄,都是Ascii的。其寬度跟字段的定義一致。

所有的記錄都以一個刪除標記開頭,如果該記錄刪除,該處的值為0x2a(星號*)否則0x20(空格)

文件最后以一個0x1a標記結束

 

附:字段標識對照表

AscII碼 描述

c          字符

d          日期,formatyyyymmdd

f           浮點

g          general-foxproaddition

l            邏輯,t:t,f:f,y:y,n:n,?-未初始化

m          memo(storedas10digitsrepresentingthedbtblocknumber)

n           數字


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM