1、概述
1.1 文件組成
MAPGIS數據文件主要包括工程文件文件和工程內各工作區的文件。工作區是MAPGIS提出的一個概念,簡單地說,工作區就是一個數據池,存放實體的空間數據、拓撲數據、圖形數據和屬性數據,每個工作區都對應於一個MAPGIS數據文件。數據文件主要有以下幾種:
- 點工作區(.MPJ文件):工程文件,存放工程中所有的工作區文件
- 點工作區(.WT文件):點(PNT)
- 線工作區(.WL文件):線(LIN)、結點(NOD)
- 區工作區(.WP文件):線(LIN)、結點(NOD)、區(REG)
- 網工作區(.WN文件:線(LIN)、結點(NOD)、網(NET)
- 表工作區(.WB文件):無空間實體,僅有表格記錄
- 點元:點元是點圖元的簡稱,有時也簡稱點,所謂點元是指由一個控制點決定其位置的有確定形狀的圖形單元。它包括字、字符串、文本、子圖、圓、弧、直線段等幾種類型。它與“線上加點”中的點概念不同。
- 弧段:弧段是一系列有規則的,順序的點的集合,用它們可以構成區域的輪廓線。它與曲線是兩個不同的概念,前者屬於面元,后者屬於線元。
- 區/區域:區/區域是由同一方向或首尾相連的弧段組成的封閉圖形。
- 結點:結點是某弧段的端點,或者是數條弧段間的交叉點。
- 屬性:就是一個實體的特征,屬性數據是描述真實實體特征的數據集。顯示地物屬性的表通常稱為屬性表,屬性表常用來組織屬性數據。
1.2 數據類型
2、工程文件
2.1基本構成
工程文件數據由頭信息+各工作區信息數據構成,其中頭信息是0-1112字節,各工作區信息是400各字節,按順序首尾存放在文件中。
2.2頭信息
頭信息存儲位置為0-1112字節,主要存儲包含的工作區文件數、圖形范圍、比例、位移等信息。
內容 |
字節位置 |
字節數 |
類型 |
說明 |
文件標記 |
0-7 |
8 |
Char[8] |
GDMP`D29 |
文件類型 |
8-11 |
4 |
int |
9 |
文件數 |
12-13 |
1 |
short |
|
文件的圖形范圍 |
14-45 |
32 |
Double |
(XMin, YMin, XMax, YMax) |
文件的環境 |
46-685 |
640 |
|
結構 |
文件的標題 |
686-745 |
60 |
Char[60] |
|
圖層字典位置 |
746-749 |
4 |
int |
|
首文件存放指針 |
750-753 |
4 |
int |
|
位移X |
754-761 |
8 |
double |
|
位移Y |
762-769 |
8 |
double |
|
比例X |
770-777 |
8 |
double |
|
比例Y |
778-785 |
8 |
double |
|
旋轉角度 |
786-793 |
8 |
double |
|
版面寬 |
794-801 |
8 |
double |
|
版面高 |
802-809 |
8 |
double |
|
PrjType |
810-811 |
2 |
short |
|
首圖例存放指針 |
812-815 |
4 |
int |
|
工程預設的地圖參數 |
816-984 |
169 |
|
結構 |
UnUsed |
985-1112 |
128 |
Char[128] |
無用 |
2.3工作區信息
頭信息后是各工作區信息,從1113字節開始,每400字節存儲一個工作區信息,主要包括各工作區的類型、文件名、范圍等信息。
內容 |
字節位置 |
字節數 |
類型 |
說明 |
文件類型 |
0 |
1 |
byte |
PNT/LIN/REG/MSIIMG |
文件狀態 |
1 |
1 |
byte |
|
文件名(全路徑) |
2-129 |
128 |
Char[128] |
|
文件的描述 |
130-257 |
128 |
Char[128] |
|
圖形范圍XMin |
258-265 |
8 |
double |
|
圖形范圍YMin |
266-273 |
8 |
double |
|
圖形范圍XMax |
274-281 |
8 |
double |
|
圖形范圍YMax |
282-289 |
8 |
double |
|
用戶自定義類型 |
290-290 |
1 |
byte |
|
GroupCode |
291-291 |
1 |
byte |
|
網絡數據的數據源 |
292-323 |
32 |
Char[32] |
單機文件此項為空 |
最小顯示比例 |
324-331 |
8 |
double |
小於MinDispRate,不顯示 |
最大顯示比例 |
332-339 |
8 |
double |
大於MaxDispRate,不顯示 |
字段動態標注 |
340-340 |
1 |
byte |
是否進行字段動態標注,以及是否跟隨放大 |
標注字段名稱 |
341-361 |
21 |
Char[21] |
|
標注字高 |
362-365 |
4 |
float |
|
標注顏色 |
366-367 |
2 |
short |
|
標注字體 |
368-368 |
1 |
byte |
|
圖例分類信息 |
369-369 |
1 |
byte |
|
保留 |
370-399 |
30 |
Char[30] |
|
3、工作區文件
3.1基本構成
工作區文件主要有點工作區文件(*.WT)、線工作區文件(*.WL)、區域工作區文件(*.WP)等幾種,不同工作區文件構成有一些不同,但是大體結構是一致的,一般包括三大部分:
- 文件頭信息:包括文件類型、數據區頭信息的起始位置等
- 數據區頭信息:存儲各種結構的數據的字節起始位置和總字節數
- 數據區:存儲點、線、區域、屬性等各種數據
數據讀取時首先讀文件頭信息,通過文件頭信息中數據區頭信息的起始位置讀取數據區頭信息,在數據頭信息中存儲各數據區的起始位置和總字節數,通過這些信息找到各數據區位置獲取數據。
3.4 文件頭
各種工作區文件(WP WL WT)的頭信息基本都是一樣的,從0字節開始,到數據區的起始位置處,存放文件標記、文件類型、數據區起始位置,各數據區的數據總數、工作區圖形范圍等信息。
內容 |
字節位置 |
字節數 |
類型 |
說明 |
文件頭標識 |
0-7 |
8 |
Char[8] |
GDMP`D20(WL) GDMP`D22(WT) GDMP`D21(WP) |
文件標識 |
8-11 |
4 |
Int |
0-LIN 1-PRT 2-REG |
起始位置 |
12-15 |
4 |
Int |
數據區頭的起始位置,從這個整數指向的字節位置存儲數據區頭信息 |
? |
16-19 |
|
|
此處的整數不知道意義 |
|
20-259 |
|
|
未知,好像沒什么用 |
|
260-303 |
|
|
存儲有11個整數,表示各種數據的總數 0-線數 260-263 104h 2-節點數 268-271 10Ch 4-區數 276-279 114h 其余未知 |
圖形范圍 |
304-335 |
8*4 |
|
XMin YMin XMax YMax |
|
|
|
|
|
3.3 數據區頭信息
數據區頭信息包含工作區文件中各種數據的起始位置和數據總的字節數,為表述方便,下文中以DataHeader標識。
每個數據頭信息10字節,如:29 02 00 00 E4 00 00 00 FF FF
其中
- 0-3 數據區的起始位置
- 4-7 數據區總字節數
- 8-9 結束標記(FF FF)
數據區頭信息一般存儲有這樣的頭信息11個左右,WP WL WT文件數據都是各有所區別,但是相同類型數據存放位置基本一致,如無論是WL文件還是WP文件,第一個頭信息存儲都是線(弧段)信息,各數據區域的位置大致如下:
- DataHeader[0]:線信息位置(WP WL)\點信息位置(WT)
- DataHeader[1]:線坐標點位置(WP WL)\點字符串位置(WT)
- DataHeader[2]:線屬性位置(WP WL)\點屬性位置(WT)
- DataHeader[3]:線拓撲關系的位置
- DataHeader[4]:節點信息的位置
- DataHeader[5]:節點屬性
- DataHeader[6]:
- DataHeader[7]:
- DataHeader[8]:區信息位置
- DataHeader[9]:區屬性位置
- DataHeader[10:
3.4點數據
點數據存在於WT文件中,從DataHeader[0]+93開始讀,每93個字節存儲一個點信息。由於MapGIS的點數據包括字符串、文本、子圖、圓、弧等幾種類型,各種類型數據存儲結構不一致,結構如下:
內容 |
字節位置 |
字節數 |
類型 |
說明 |
公用部分 |
||||
開始標記 |
0 |
1 |
|
01 |
字符串總數 |
1-2 |
2 |
short |
如果點類型是字符串,存儲字符串信息位置:DataHeader[1]+ 偏移量 – 總數 |
字符偏移量 |
3-6 |
4 |
Int |
|
坐標X |
7-14 |
8 |
double |
|
坐標Y |
15-22 |
8 |
double |
|
點類型 |
31-31 |
1 |
byte |
0-字符串 1-子圖 2-圓 3-弧 4-圖象 5-文本 |
透明輸出 |
32-32 |
1 |
byte |
|
圖層 |
73-74 |
2 |
short |
|
顏色 |
75-78 |
4 |
int |
|
0-字符串部分 |
||||
字符串 |
|
|
string |
DataHeader[1]+ 偏移量 – 總數 |
字符高度 |
33-36 |
4 |
float |
|
字符寬度 |
37-40 |
4 |
float |
|
字符間隔 |
41-44 |
4 |
float |
|
字符串角度 |
45-48 |
4 |
float |
|
中文字體 |
49-50 |
2 |
short |
|
西文字體 |
51-52 |
2 |
short |
|
字形 |
53-53 |
1 |
byte |
|
排列 |
54-54 |
1 |
byte |
|
1-子圖部分 |
||||
子圖號 |
33-36 |
4 |
Int |
|
子圖高 |
37-40 |
4 |
float |
|
子圖寬 |
41-44 |
4 |
float |
|
子圖角度 |
45-48 |
4 |
float |
|
線寬 |
49-52 |
4 |
float |
|
輔色 |
53-56 |
4 |
Int |
|
2-圓部分 ? |
||||
半徑 |
33-40 |
4 |
float |
|
邊線顏色 |
41-44 |
4 |
int |
|
線寬度 |
45-48 |
4 |
float |
|
標識 |
49-49 |
1 |
byte |
1=填充圓 0=空心圓 |
3-弧部分 ? |
||||
半徑 |
33-40 |
8 |
double |
|
起始角度 |
41-44 |
4 |
float |
|
終止角度 |
45-48 |
4 |
float |
|
線寬度 |
49-52 |
4 |
float |
|
4-圖片部分 ? |
||||
文件名 |
|
|
string |
DataHeader[1]+ 偏移量 – 總數 |
字符高度 |
33-36 |
4 |
float |
|
字符寬度 |
37-40 |
4 |
float |
|
字符串角度 |
41-44 |
4 |
float |
|
5-文本部分(多行) ? |
||||
文本字符串 |
|
|
string |
DataHeader[1]+ 偏移量 – 總數 |
字符高度 |
33-36 |
4 |
float |
|
字符寬度 |
37-40 |
4 |
float |
|
字符間隔 |
41-44 |
4 |
float |
|
字符串角度 |
45-48 |
4 |
float |
|
中文字體 |
49-50 |
2 |
short |
|
西文字體 |
51-52 |
2 |
short |
|
字形 |
53-53 |
1 |
byte |
|
行間距 |
54-57 |
4 |
float |
|
版面高度 |
58-61 |
4 |
float |
|
版面寬度 |
62-65 |
4 |
float |
|
排列 |
66 |
1 |
byte |
|
3.5線數據
線數據在WL和WP文件中都有,主要包括線信息、坐標信息,對於WP文件還有線與區域的拓撲關系。
1、線信息
存儲位置:DataHeader[0].DataOffset+59
字節數:57
格式:
內容 |
字節位置 |
字節數 |
類型 |
說明 |
未知? |
0-3 |
4 |
|
|
未知? |
4-7 |
4 |
|
|
線點數 |
8-11 |
4 |
Int |
|
坐標存儲位置 |
12-15 |
4 |
Int |
DataHeader[1]加這個偏移量是坐標的存儲起始位置 |
未知? |
16-19 |
4 |
|
|
線型號 |
20-21 |
2 |
Short |
|
輔助線型號 |
22-22 |
1 |
Byte |
|
覆蓋方式 |
23-23 |
1 |
Byte |
|
線顏色號 |
24-27 |
4 |
Int |
|
線寬 |
28-31 |
4 |
Float |
|
線種類 |
32-32 |
1 |
Byte |
|
X系數 |
33-36 |
4 |
Float |
|
Y系數 |
37-40 |
4 |
Float |
|
輔助色 |
41-44 |
4 |
Int |
|
圖層 |
45-48 |
4 |
Int |
|
? |
49-52 |
4 |
|
|
? |
53-56 |
4 |
|
|
2、坐標
存儲位置:DataHeader[1].DataOffset+每條線坐標存儲位置
字節數:16( 兩個八位的浮點數)
格式:
X坐標 0-7
Y坐標 8-15
3、拓撲關系
存儲位置:DataHeader[3].DataOffset+24
字節數:24( 前16位有效,共四個整數)
格式:
前節點號 0-3
后節點號 4-7
左區號 8-11
右區號 12-15
3.6 結點數據
結點是某弧段的端點,或者是數條弧段間的交叉點,結點數據區由結點基本信息加一系列結點線號信息組成,基本信息起始位置為DataHeader[4].DataOffset + 55,每個接點55個字節,格式:
內容 |
字節位置 |
字節數 |
類型 |
說明 |
節點坐標X |
0-7 |
8 |
Double |
|
節點坐標Y |
8-15 |
8 |
Double |
|
節點所在的線總數 |
24-25 |
2 |
short |
|
節點線段的存儲位置 |
26-27 |
2 |
short |
DataHeader[1].DataOffset加偏移量存儲結點相關的線段信息,每個線段號為4字節的整數 |
結點線信息 |
|
|
|
一系列整數值 |
3.7 區域數據
區域是由同一方向或首尾相連的弧段組成的封閉圖形,所以MapGis的區域數據是基本信息和一系列線信息中線的順序號(整數)組成。基本信息的起始位置為DataHeader[8].DataOffset + 40,每個結點基本信息共40字節,格式:
內容 |
字節位置 |
字節數 |
類型 |
說明 |
標記位 |
0 |
1 |
Byte |
01 |
線總數 |
1-4 |
4 |
Int |
|
線號存儲位置 |
5-8 |
4 |
Int |
DataHeader[1]加這個偏移量是線號的存儲起始位置 |
區顏色 |
9-12 |
4 |
Float |
|
填充圖案號 |
13-14 |
2 |
Short |
|
圖案高 |
15-18 |
4 |
Float |
|
圖案寬 |
19-22 |
4 |
Float |
|
筆寬 |
23-24 |
2 |
Short |
|
圖案顏色 |
25-28 |
4 |
Int |
|
透明輸出 |
29 |
1 |
Byte |
|
圖層 |
30-31 |
2 |
Short |
|
區域的線號信息 |
|
|
|
一系列整數值 |