天天看點

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