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