吕
吕雪松
Unregistered / Unconfirmed
GUEST, unregistred user!
[h2]
1,.TAB,ASCII码格式的表结构定义文件;
2,.DAT,二进制格式的属性数据文件;
3,.MAP,空间图形数据存储文件;
4,.ID,与map相关的文件;
5,.IND,二进制格式的索引文件;
这其中,dat文件其实就是dBASE IV文件(和Shape文件类似),id文件中的32位整形ID号其实就是完成将图形对象和属性数据一一对应,这些都很好解决,最关键的难点在.Map文件。
经过参考多种零零碎碎的资料,又经过自己的悉心研究(方法很土,就是用UltraEdit打开二进制看,再用VC试编代码,一点点地积累),最后终于算是搞定了。
先从简单的方向来说吧,Map文件是由“块”(Block)来构成的,每一个块都是512(0x200h)的整数倍。说一种最简单的情况吧,第一个“块头”是二个常规块的大小:512*2=1024字节,其余的块都是512字节大小。
0x00000h---------------------------------------------------
Header Block 1024个字节
0x00400h---------------------------------------------------
Object Coordinate Definition Block 512个字节
0x00600h---------------------------------------------------
Coordinate Definition Block 512个字节
--------------------------------------------------------------
其它Block 512个字节
--------------------------------------------------------------
以下是一个Map文件片断的示例:
00000000h: 00 0A 0E 15 0E 16 1B A2 A6 AB 1A 2A 2F A5 A9 B5
.......ⅵ?*/ォ?
00000010h: A7 B5 D9 0F 17 23 13 1F 2B 0F 17 23 4F 57 63 9C
У?.#..+..#OWc?
00000020h: A4 A9 A0 A8 AD A4 A8 AD 16 1A 39 0D 11 37 A5 A9
ぉ牗?ō..9..7ォ 0x000~0x3FF,头块
00000030h: B5 A4 A8 AD B2 B6 DC BD BD F4 00 00 00 00 00 00
丹ō捕芙紧......
…
00000400h: 02 00 26 00 7D F4 01 00 3F AB 01 00 00 06 00 00
..&.}?.??.....
00000410h: 00 06 00 00 08 01 00 00 00 08 06 00 00 18 00 00
................ 0x400~0x5FF,地物定义
00000420h: 00 D2 A1 09 00 FC 77 FA FF 38 FD F7 FF FC 77 FA
.摇..黽?8?
MapInfo Tab 数据格式研究
[/h2]吕雪松 2001年
我们常说的Tab数据格式是MapInfo软件内部使用的二进制格式, 它其实是由下列一组文件构成:1,.TAB,ASCII码格式的表结构定义文件;
2,.DAT,二进制格式的属性数据文件;
3,.MAP,空间图形数据存储文件;
4,.ID,与map相关的文件;
5,.IND,二进制格式的索引文件;
这其中,dat文件其实就是dBASE IV文件(和Shape文件类似),id文件中的32位整形ID号其实就是完成将图形对象和属性数据一一对应,这些都很好解决,最关键的难点在.Map文件。
经过参考多种零零碎碎的资料,又经过自己的悉心研究(方法很土,就是用UltraEdit打开二进制看,再用VC试编代码,一点点地积累),最后终于算是搞定了。
先从简单的方向来说吧,Map文件是由“块”(Block)来构成的,每一个块都是512(0x200h)的整数倍。说一种最简单的情况吧,第一个“块头”是二个常规块的大小:512*2=1024字节,其余的块都是512字节大小。
0x00000h---------------------------------------------------
Header Block 1024个字节
0x00400h---------------------------------------------------
Object Coordinate Definition Block 512个字节
0x00600h---------------------------------------------------
Coordinate Definition Block 512个字节
--------------------------------------------------------------
其它Block 512个字节
--------------------------------------------------------------
以下是一个Map文件片断的示例:
00000000h: 00 0A 0E 15 0E 16 1B A2 A6 AB 1A 2A 2F A5 A9 B5
.......ⅵ?*/ォ?
00000010h: A7 B5 D9 0F 17 23 13 1F 2B 0F 17 23 4F 57 63 9C
У?.#..+..#OWc?
00000020h: A4 A9 A0 A8 AD A4 A8 AD 16 1A 39 0D 11 37 A5 A9
ぉ牗?ō..9..7ォ 0x000~0x3FF,头块
00000030h: B5 A4 A8 AD B2 B6 DC BD BD F4 00 00 00 00 00 00
丹ō捕芙紧......
…
00000400h: 02 00 26 00 7D F4 01 00 3F AB 01 00 00 06 00 00
..&.}?.??.....
00000410h: 00 06 00 00 08 01 00 00 00 08 06 00 00 18 00 00
................ 0x400~0x5FF,地物定义
00000420h: 00 D2 A1 09 00 FC 77 FA FF 38 FD F7 FF FC 77 FA
.摇..黽?8?