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