mapInfo文件格式詳解

mapInfo文件格式詳解

MapInfo以表(Tab)的形式存儲信息,每個表是由一組MapInfo文件組成,包括:   
  1、屬性數據的表結構文件,後綴爲.TAB該文件定義了地圖屬性數據的表結構,包括字段數、字段名稱、字段類型、字段寬度、索引字段及相應圖層的一些關鍵空間信息描述。.TAB文件實際上是一個文本文件,可以在寫字板中打開觀察其內容。   
  
2、屬性數據文件,後綴爲.DAT該文件存放了地圖的屬性數據。.DAT文件是二進制文件,它的格式與dBase  IV的文件格式一致。   
  
3、空間數據文件,後綴爲.MAP該文件是二進制文件,存放了圖形對象的數據,包括空間對象的幾何類型、座標信息和顏色信息等。   
  4、交叉索引文件,後綴爲.ID。該文件是二進制文件,用於連接屬性數據和圖形數據,記錄了地圖中每一個空間對象在空間數據文件(.MAP)中的位置指針。文件中每四個字節構成一個指針。指針排列的順序與屬性數據文件(.DAT)中屬性數據記錄存放的順序一致。交叉索引文件實際上是一個空間對象的定位表。   
  5、索引文件,後綴爲.INDMapInfo表中有時也包括該文件,用於對某些字段建立索引。   
  .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雖然沒有公開其內部的數據結構,但它給出了用於格式交換的數據結構,即MIFMID,其中MIF文件保存圖形數據,MID文件保存屬性數據。將其它形式的地圖數據轉成MIFMID格式,然後利用MapInfo菜單中的Import命令就可以導入,從而完成轉換。也可以在 mapInfo中把*.tab文件轉換爲*.mif,*.mid文件

MIFMapinfo用來向外交換數據的一種中間交換文件。當用戶在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           數字

 

 

本文是從網絡上整理出來的,爲了申請專欄,所以標記爲原創。

專欄申請者的CSDN個人博客中原創技術性博客文章要多於15篇。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章