2023年12月19日发(作者:)
E00文件格式浅析
张 禹
(新疆维吾尔自治区第一测绘院六分院 新疆昌吉 邮编831100)
摘要:后缀为E00的文件是ESRI的一种通用交换格式文件。这种文件通过明码的方式表达了Arc/Info中几乎所有的矢量格式以及属性信息,广泛应用于与其他软件之间进行数据交换。但是ESRI没有提供有关的格式说明。本文介绍了这种文件格式的一部分内容,可以用于通过E00格式文件建立与ESRI系列软件之间的数据交换。
关键字:E00;数据交换;文件格式
1
引言
ESRI系列软件在业内无人不知。其早期产品Arc/Info WorkStation直到现在仍然被广泛使用。E00文件格式就是Arc/Info中用于软件内部或者与其他软件进行数据交换的格式。E00格式文件是ESRI最完整最复杂的文件之一。它可以包含所有的要素及其属性,表示所有的信息,如点、线、面、属性、控制点等等。由于E00文件是ASCII明码格式的,因此许多软件都把E00文件作为与ESRI系列软件的数据接口,一方面可以利用ESRI软件出色的分析处理能力,把ESRI软件作为自己产品的后续深加工平台,另一方面也可以把ESRI软件的成果作为自己的数据入口。
虽然E00文件是ASCII明码格式的,但是由于E00文件本身是作为ESRI内部不公开的数据格式,没有提供数据格式的技术白皮书。因此,想要利用这种格式作为交换平台,必须仔细研究。笔者为了生产的需要认真分析了这种格式的结构,实现了主要信息的完整解读。
2
E00文件格式解析
Arc/Info软件整合了许多空间数据模型,其中最基本的有用来存储和管理空间坐标信息及属性信息的Coverage模型、用来存储和分析栅格数据的GRID/LATTICE模型、用来存储管理和分析三维表面的TIN模型、用于制图和绘图的Arcplot模型等等。在Arc/Info中使用export命令的相应参数(cover、grid、tin、plot)即可实现对相应模型数据的E00输出。
对于coverage模型下的每个实体即每一个层来说,它都可以存储要素坐标信息、要素属性信息、TIC点、BND(坐标范围)、投影系统、容差、日志等许多内容。
在本文中,笔者将着重对最基本的,也是应用最广泛的要素坐标信息及属性信息的存储格式进行介绍。
1126
2.1 要素坐标信息的存储格式
E00中要素主要包括点、线、面三种类型,他们都由一个开始标志、一个结束标志和数据体构成。
开始标志包含两部分内容。一是要素类型,分别为:LAB(点)ARC(线)、PAL(面);二是数据精度级别,分别为2(单精度)、3(双精度)。如LAB 3表示下面的内容存储的是双精度的点要素。
结束标志对于线和面要素来说都是:
-1 0 0 0 0 0 0
而对于点要素来说则根据精度不同分为:
单精度: -1 0 0.0000000E+00 0.0000000E+00
双精度: -1 0 0.00E+00 0.00E+00
下面详细介绍一下数据体的构成
2.1.1 点要素
点要素的存储体相对比较简单,包含点的编码、记录号以及点坐标的三个拷贝。格式如下:
T-ID T# X Y
X Y X Y
T-ID T# X Y
X Y X Y
…………
点要素存储体的含义如表1所示。
表1 点要素存储体各部分含义说明
T-ID
T#
点要素的用户编码。
点要素所在多边形的记录号。在没有拓扑关系时为0。
点要素坐标对。E00在记录坐标时分为单精度和双精度两种类型。单精度能够保存8位有效数字,而双精度则可保存15位有效数字。在E00种所有的坐标均采用科学计数法表示,即单精度表示X Y
为xE±xx,双精度表示为xxxxxxxxE±xx。在采用双精度时一行只表示一对坐标。
下面是一组典型的单精度点要素的存储样例:
1127
LAB 2
1 2 3.4046650E+05 4.1002668E+06
3.4046650E+05 4.1002668E+06 3.4046650E+05 4.1002668E+06
2 3 3.4048869E+05 4.1000852E+06
3.4048869E+05 4.1000852E+06 3.4048869E+05 4.1000852E+06
-1 0 0.0000000E+00 0.0000000E+00
2.1.2 线要素
线要素的存储体可分为两个部分。
第一行为记录头,主要记录了与拓扑相关的一些信息。第二行开始为点串坐标。其格式如下:
T# T-ID FNODE# TNODE# LPOLY# RPOLY# COUNT
X1 Y1 X2 Y2
X3 Y3 ……
T# T-ID FNODE# TNODE# LPOLY# RPOLY# COUNT
X1 Y1 X2 Y2
X3 Y3 ……
线要素存储体含义如表2所示。
表2 线要素存储体各部分含义说明
T#
T-ID
FNODE#
TNODE#
LPOLY#
LPOLY#表示左多边形的编号,RPOLY#表示右多边形的编号。在没有建立面拓扑时均为0。RPOLY#
COUNT
X1 Y1 ……
线要素的总点数
线要素的点串坐标。坐标表示格式与点要素相同。
线要素的记录号,一般为顺序编号。
线要素的用户编码。
FNODE#表示线要素的开始端点的编号,TNODE表示结束端点的编号,在没有建立线拓扑前都是0。
下面是一组典型的双精度线要素的存储样例:
1128
ARC 3
1 0 0 0 0 0 7
3.40E+05 4.10E+06
3.40E+05 4.10E+06
3.40E+05 4.10E+06
3.40E+05 4.10E+06
3.40E+05 4.10E+06
3.40E+05 4.10E+06
3.40E+05 4.10E+06
2 0 0 0 0 0 4
3.40E+05 4.10E+06
3.40E+05 4.10E+06
3.40E+05 4.10E+06
3.40E+05 4.10E+06
-1 0 0 0 0 0 0
2.1.3 面要素
面要素的存储体可分为三个部分,第一部分表示存储体的主体部分的总段数,第二部分记录了多边形的最小外接矩形的角点坐标,第三部分为存储体主体。其格式如下:
COUNT X0 Y0 X1 Y1
ARC# NODE# POLY# ARC# NODE# POLY#
…………
COUNT X0 Y0 X1 Y1
ARC# NODE# POLY# ARC# NODE# POLY#
…………
面要素存储体含义说明列于表3。
1129
表3 面要素存储体各部分含义说明
COUNT 主体部分的段数,即ARC# NODE# POLY#出现的次数。
多变性最小外接矩形的角点坐标。X0 Y0为左下角坐标,X1 Y1为右上角坐标。坐X0 Y0 X1 Y1
标的表示格式与点要素相同。
面要素存储体的主体。其中ARC#表示对应线要素的记录号,当其为正数时表示从该线要素的第一个点顺序前进,当其为负数是表示从该线要素的最后一个点反向前进。NODE#和POLY#分别为该线要素对应的NODE和POLY编号。当ARC#为正时分ARC# NODE# POLY#
别为FNODE#和LPOLY#,当ARC为负时则分别为TNODE#和RPOLY#。当ARC#为0时NODE#和POLY#也为0。这是一条虚拟线,表示从该段开始,之后的线要素用来在多边形内部围出一个空洞。
下面是一组典型的单精度面要素的存储样例:
PAL 2
5 3.4009988E+05 4.1000000E+06 3.4090012E+05 4.1003995E+06
0 0 0 -1 1 2
-7 2 3 -6 5 3
-3 4 2
4 3.4009988E+05 4.1001995E+06 3.4090012E+05 4.1003995E+06
1 2 1 3 1 1
4 4 4 2 3 3
4 3.4019978E+05 4.1000000E+06 3.4079997E+05 4.1001998E+06
-2 2 2 5 3 4
6 4 1 7 5 1
2 3.4050000E+05 4.1001002E+06 3.4070003E+05 4.1001998E+06
-4 3 2 -5 4 3
-1 0 0 0 0 0 0
2.2 要素属性信息的存储格式
E00中的属性信息存储于属性表中,线要素和点要素分别对应AAT表和PAT表,面要素的属性信息由于是存储在其对应的LAB点中,因此也是存储在相应的PAT表中。
1130
在E00中,所有的属性表具有相同的表达格式。其包含表头、字段定义、属性内容等三个主要部分。其典型格式如下:
TNAME XX NUM NUM LENGTH COUNT
字段1 width start format type -1 -1-1 1-
字段2 width start format type -1 -1-1 2-
…………
记录1
记录2
…………
属性表中字符号含义列表4中。
表4 属性表各部分含义说明
TNAME
XX
NUM
LENGTH
COUNT
字段1(字段2)
width
属性表名称,多为层名.AAT或层名.PAT。
固定项。
字段总数,重复出现两次。
每条记录所占的总长度,以字节记。
记录的总条数。
字段的名称。
该字段所占用的字节数,后跟-1。如某字段占用字节数为4,则width为“4-1”。该字段的开始位置,以字节为单位,后跟4-1。如开始位置为5的字段,其startstart
为“54-1”。
该项又分为两个部分。第一部分为该字段的输出宽度;第二部分对浮点型和十进format 制小数型来说是小数位数,而对于整型、短整型、十进制整数型、字符型来说则是常数“-1”。
type
-1 -1-1
1-(2-)
数据类型。典型格式为“50-1”。详细说明见表5。
固定项。
从1开始的顺序编号。
依照字段定义顺序一次将值记录下来。其中浮点型的记录方式与几何图形中记录记录1(记录2) 坐标的方式一致。其它类型的数据则是以输出宽度为固定宽度的方式表示,当记录内容所需宽度不足输出宽度时则在内容前加空格补足。
1131
下面是一组典型的单精度系统默认AAT表的存储样例:
XX 7 7 28 7
FNODE# 4-1 14-1 5-1 50-1 -1 -1-1 1-
TNODE# 4-1 54-1 5-1 50-1 -1 -1-1 2-
LPOLY# 4-1 94-1 5-1 50-1 -1 -1-1 3-
RPOLY# 4-1 134-1 5-1 50-1 -1 -1-1 4-
LENGTH 4-1 174-1 12 3 60-1 -1 -1-1 5-
MYARC # 4-1 214-1 5-1 50-1 -1 -1-1 6-
MYARC -ID 4-1 254-1 5-1 50-1 -1 -1-1 7-
2 1 0 0 2.0006265E+02 1 2
3 2 0 0 2.0006250E+02 2 3
1 4 0 0 1.0989176E+03 3 1
4 3 0 0 2.0003140E+02 4 4
3 4 0 0 2.8198248E+02 5 6
4 5 0 0 8.2309576E+02 6 7
5 2 0 0 2.2345322E+02 7 5
数据类型说明列于表5中。
表5 数据类型说明
宽度
数据类型
(以字节计)
日期型
字符型
十进制整数型
十进制小数型
短整型
整型
单精度型
双精度型
8
用户定义
用户定义
用户定义
2
4
4
8
D
C
I
N
B
B
F
F
键字 (对应表4的type)
10-1
20-1
30-1
40-1
50-1
50-1
60-1
60-1
在arc/info中定义字段所使用的关Type
1132
3 结束语
Arc/Info软件空间数据模型非常多样非常复杂,其交换文件E00所包含的信息也是很庞大的。本文仅试图分析解释Coverage模型中关于坐标存储及属性信息存储的简单内容。这在整个Arc/Info中仅是九牛之一毛。E00格式文件历经数十载仍然被广泛使用,并且在可以预见的一段时间内仍将作为最主要的交换文件。这主要是由于E00格式文件具备对空间数据描述的完备性、对拓扑关系定义的严谨性以及对属性定义的严格性。因此,学习E00格式,有助于对空间数据库的深入理解。笔者希望本文能够抛砖引玉,引起大家对E00格式的广泛探讨。
参考文献
1 ANALYSIS OF ARC EXPORT FILE FORMAT FOR ARC/INFO (REV 6.1.1)
2 Arc/Info help 7.1.1
3 樊红,詹小国.ARC/INFO应用与开发技术(修订版)[M].武汉:武汉大学出版社,2002.
1133


发布评论