MAPGIS数据文件主要包括工程文件文件和工程内各工作区的文件。工作区是MAPGIS提出的一个概念,简单地说,工作区就是一个数据池,存放实体的空间数据、拓扑数据、图形数据和属性数据,每个工作区都对应于一个MAPGIS数据文件。数据文件主要有以下几种:
Ø 点工作区(.MPJ文件):工程文件,存放工程中所有的工作区文件
Ø 点工作区(.WT文件):点(PNT)
Ø 线工作区(.WL文件):线(LIN)、结点(NOD)
Ø 区工作区(.WP文件):线(LIN)、结点(NOD)、区(REG)
Ø 网工作区(.WN文件:线(LIN)、结点(NOD)、网(NET)
Ø 表工作区(.WB文件):无空间实体,仅有表格记录
Ø 点元:点元是点图元的简称,有时也简称点,所谓点元是指由一个控制点决定其位置的有确定形状的图形单元。它包括字、字符串、文本、子图、圆、弧、直线段等几种类型。它与“线上加点”中的点概念不同。
Ø 弧段:弧段是一系列有规则的,顺序的点的集合,用它们可以构成区域的轮廓线。它与曲线是两个不同的概念,前者属于面元,后者属于线元。
Ø 区/区域:区/区域是由同一方向或首尾相连的弧段组成的封闭图形。
Ø 结点:结点是某弧段的端点,或者是数条弧段间的交叉点。
Ø 属性:就是一个实体的特征,属性数据是描述真实实体特征的数据集。显示地物属性的表通常称为属性表,属性表常用来组织属性数据。
工程文件数据由头信息+各工作区信息数据构成,其中头信息是0-1112字节,各工作区信息是400各字节,按顺序首尾存放在文件中。
头信息存储位置为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] |
无用 |
头信息后是各工作区信息,从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] |
工作区文件主要有点工作区文件(*.WT)、线工作区文件(*.WL)、区域工作区文件(*.WP)等几种,不同工作区文件构成有一些不同,但是大体结构是一致的,一般包括三大部分:
Ø 文件头信息:包括文件类型、数据区头信息的起始位置等
Ø 数据区头信息:存储各种结构的数据的字节起始位置和总字节数
Ø 数据区:存储点、线、区域、属性等各种数据
数据读取时首先读文件头信息,通过文件头信息中数据区头信息的起始位置读取数据区头信息,在数据头信息中存储各数据区的起始位置和总字节数,通过这些信息找到各数据区位置获取数据。
各种工作区文件(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 |
|
数据区头信息包含工作区文件中各种数据的起始位置和数据总的字节数,为表述方便,下文中以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:
点数据存在于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 |
线数据在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
结点是某弧段的端点,或者是数条弧段间的交叉点,结点数据区由结点基本信息加一系列结点线号信息组成,基本信息起始位置为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字节的整数 |
结点线信息 |
一系列整数值 |
区域是由同一方向或首尾相连的弧段组成的封闭图形,所以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 |
|
区域的线号信息 |
一系列整数值 |