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 數字