Feature Representation

This section discusses the way geometry and attributes are defined on features which represent the records in the various files within an E00 file.

There is a difference between the features that the E00 reader emits, and those formed from the automatically-generated workspace. This topic focuses primarily on the raw output from the E00 reader. Output Feature Types provides a description of the feature that the generated workspace creates.

There is also a difference between the features that the reader emits and those which the writer expects to be given to write out. Most notably, the reader uses the name of the subfile as the feature type of each FME feature read from an E00 file, whereas the writer uses the FME feature type to determine the name of the E00 file to which the feature will be written. In addition, the reader defines certain attributes on features read from E00 files – such as, E00_FEAT_ROLE and E00_RECORD_NUM – which are unused by the E00 writer.

In addition to the generic FME feature attributes that FME Workbench adds to all features (see About Feature Attributes), this format adds the format-specific attributes described in this section.

Geometry Composition

There are essentially four types of geometry defined in E00 files:

  • arcs (lines)
  • points
  • polygons
  • text

The geometries are formed by forming relations between certain standard subfiles and certain info files. The reader itself does not form these relations, but provides the attributes on the features allowing the workspace to form the relations. Workspaces that have been automatically generated to read from E00 files form the necessary joins between the subfiles and the info files, and are a good starting point when customizing workspaces to read E00 data. See Feature Types Output for a description of the features output.

The following table summarizes the geometry types and lists the additional attributes required to fully define the geometry, as is the case for text features.

Geometry Type

Description

Additional
Attributes Required

e00_arc

A string of geographic points that does not join or cross with itself. Features read from the ARC subfile contain arcs as their geometry.

None

e00_poly

A solid area, with an outer boundary and zero or more holes. No features is given a polygon geometry by the reader. They must be formed by factories in the mapping file.

None

e00_point

A simple (x,y) coordinate. The E00 reader creates points for features read from CNT and LAB standard subfiles.

None

e00_text

Defines annotation text at a particular location, with a rotation measured in degrees counterclockwise from the horizontal and text height measured in ground units. The geometry portion of a text feature is the single (x,y) point that defines its position.

e00_text_string

e00_rotation

e00_text_height

e00_no_geom

Feature has no associated geometry.

None

Feature Types

The E00 reader and the E00 writer view feature types differently:

  • The features emitted from the E00 reader have a feature type dependent on the subfile or the info file from which the feature originated.
  • The E00 writer uses a feature type based on the name of the E00 file.

The following table summarizes the feature types generated for each subfile. If a subfile name in the table below contains an asterisk, then it is really a pattern to match info file names. This convention is required because the names of info files vary from coverage to coverage.

The + symbol is used for an alternate asterisk for files containing two wildcard expressions. Therefore, the info file defining text attributes for the ERR annotation layer of the HYDR_SUR coverage is named HYDR_SUR.TATERR, and is referred to as *.TAT+ in the following table. References in the rest of the table row expand * to HYDR_SUR and + to ERR.

Note: The Reader Feature Type listed in the table applies only when reading E00 data, not when writing it. As discussed above, the E00 interprets the feature type as the name of the target E00 file. Controlling E00 Output describes a method for redirecting features to a particular subfile.

Subfile Name

Reader Feature Type

Geometry

Additional Attributes

ARC

e00_arcdef

e00_arc

E00_FEAT_ROLE = “e00_arc_def”
LPOLY = <id of left polygon>
RPOLY = <id of right polygon>
FNODE = <id of start node>
TNODE = <id of end node>
cover_id = <id of arc in coverage>
cover_num = <sequence # of arc in coverage>

CNT

e00_centroid

e00_point

E00_FEAT_ROLE = e00_poly_cnt

LAB

e00_label

e00_point

E00_FEAT_ROLE = “e00_label”
poly_id = <id of polygon containing label>
boundBoxMin.x = <min x of bounding box>
boundBoxMin.y = <min y of bounding box>
boundBoxMax.x = <max x of bounding box>boundBoxMax.y = <max y of bounding box>

LOG

e00_log

e00_no_geom

text = <whole line of text from log file>

MTD

e00_mtd

e00_no_geom

FME currently skips this subfile

PAL

e00_polyarc

e00_no_geom

E00_FEAT_ROLE = “e00_poly_arc”
arcnum{n} = <record number of ARC record for segment #n>
arc{n}.arcnum = <record number of ARC record for segment #n>
arc{n}.fnode = <start node of ARC record for segment #n>
arc{n}.lpoly = <left polygon id of ARC record for segment #n>
boundBox.minX = <min x coordinate of bounding box>
boundBox.minY = <min y coordinate of bounding box>
boundBox.maxX = <max x coordinate of bounding box>
boundBox.maxY = <max y coordinate of bounding box>

PRJ

e00_projection

e00_no_geom

E00_FEAT_ROLE = “e00_proj”
datum = <Name of datum>
projection = <Name of projection>
units = <Unit type>
xshift = <Shift in x coordinate>
yshift = <Shift in y coordinate>
zunits = <YES/NO>
zone = <UTM zone number>
unknown_param{n}.name = <name of non-standard parameter #n>
unknown_param{n}.value = <value of non-standard parameter #n>

RPL

e00_polyarc

e00_no_geom

E00_FEAT_ROLE = “e00_region_arc”
arcnum{n} = <record number of ARC
record for segment #n>
arc{n}.arcnum = <record number of ARC record for segment #n>
arc{n}.fnode = <start node of ARC record for segment #n>
arc{n}.lpoly = <left polygon id of ARC record for segment #n>
boundBox.minX = <min x coordinate of bounding box>
boundBox.minY = <min y coordinate of bounding box>
boundBox.maxX = <max x coordinate of bounding box>
boundBox.maxY = <max y coordinate of bounding box>
e00_region_subclass = <name of region subclass>

(See Region Support for a description of region-related records.)

RXP

e00_regionxref

e00_no_geom

E00_FEAT_ROLE = “e00_region_xref”
name = <name of tolerance type>
id = <numeric id of tolerance type>
state = <state of tolerance>
value = <value of tolerance>

(See Region Support for a description of region-related records.)

TOL

e00_tolerance

e00_no_geom

E00_FEAT_ROLE = “e00_tolerance”
name = <name of tolerance type>
id = <numeric id of tolerance type>
state = <state of tolerance>
value = <value of tolerance>

(See Tolerance Values for a description of tolerance records.)

TXT

e00_text

e00_text

E00_FEAT_ROLE = “e00_text_def”
e00_anno_name = “”
e00_anno_id = <record number within TXT file>
<Attributes for text geometry>

(See Text Representation for information about text geometry.

TX6 or TX7

e00_text

e00_text

E00_FEAT_ROLE = “e00_text_def”
e00_anno_name = <name of anno subclass>
e00_anno_id = <position within anno subclass>
e00_anno_level = <level number of text feature>
e00_num_coords = <number of coordinates defining text position>
parameter{} = <unnamed TX6/TX7 parameters>
<Attributes for text geometry>

(See Text Representation for information about text geometry.

 

e00_textarrow

e00_arc

E00_FEAT_ROLE = “e00_text_arrow”
e00_anno_name = <name of anno section>
e00_anno_id = <position within anno section>

LNK

LNK

e00_point

E00_FEAT_ROLE = “LNK”

*.AAT

*_arcattr

e00_no_geom

E00_FEAT_ROLE = “e00_arc_attr”
FNODE_ = <Start node cover#>
TNODE_ = <End node cover#>
LPOLY_ = <Left polygon cover#>
RPOLY_ = <Right polygon cover#>
*_ID = <arc identifier>
*# = <coverage # of arc>
LENGTH = <length of arc>
<User-defined attributes>

*.BND

*_bounds

e00_no_geom

E00_FEAT_ROLE = “e00_bounds”
XMIN = <min x of bounding box>
YMIN = <min y of bounding box>
XMAX = <max x of bounding box>
YMAX = <max y of bounding box>

Reprojectable: Yes (XMIN,YMIN,XMAX,YMAX)

*.PAT

*_polyattr

e00_no_geom

E00_FEAT_ROLE = “e00_poly_attr”
AREA = <area of polygon>
PERIMETER = <perimeter of polygon>
*_ID = <id of polygon>
*# = <coverage # of polygon>
<User-defined attributes>

 

*_pointattr

e00_no_geom

E00_FEAT_ROLE = “e00_point_attr”
AREA = 0.0
PERIMETER = 0.0
*_ID = <id of point>
*# = <coverage # of point>
<User-defined attributes>

*.TIC

*_tic

e00_no_geom

E00_FEAT_ROLE = “e00_tic_point”
IDTIC = <TIC point identifier>
XTIC = <TIC point x coordinate>
YTIC = <TIC point y coordinate>

Reprojectable: Yes (XTIC, YTIC)

*.TAT+

*_+_textattr

e00_no_geom

E00_FEAT_ROLE = “e00_text_attr”
e00_anno_name = <name of annotation layer>
*# = <coverage number for text>

*.XCODE

*_textattr

e00_no_geom

E00_FEAT_ROLE = “e00_text_attr”
e00_anno_name = “”
*# = <coverage number for text>

*.+

*.+

e00_no_geom

E00_FEAT_ROLE = “.+”
<User-defined attributes>

In addition to the attributes shown in this table, all features read from an E00 file have an attribute named E00_RECORD_NUM, whose value corresponds to the position within the subfile of the record defining the feature. The record numbers start at 1 for each file, and are incremented for each record. This number provides the positional information required to define the relationships between certain geometries and their attributes.

Note: See Text Representation for details about numbering of text features.

Note: The reader also assigns features of most feature types an E00_FEAT_ROLE attribute, which defines the role of the feature within the coverage. This is required to make it easier to create a generic mapping file, when different files processed by that mapping file might have different info file names. For example, the file BART.E00 might have an info file named BART.TIC where JOSIE.E00 has an info file named JOSIE.TIC. The features emitted for these two info files would have a type of BART_tic and JOSIE_tic, respectively, but the features for both info files would have the value of e00_tic_point for their E00_FEAT_ROLE attribute. The role is given to features from the standard subfiles, as well as the info files which have one of the known suffixes – .AAT, .BND, .PAT, .TIC, .TAT+.

If features from a subfile have a particular type of geometry, then they will have an attribute named e00_type, whose value is the geometry type. For example, features from the ARC subfile will have line geometry attached, and will have an e00_type attribute with the value e00_arc.

Text Representation

The main geometry for text features is defined from records in the TX6, TX7, or TXT subfiles of the E00 coverage. This geometry consists of a text string, a location at which to draw the text, and optionally a string of points that form a curved line along which to place the characters. Additionally, text features from the TX6 or TX7 subfile might have arrows associated with them1Note that the E00 writer does not currently support any form of text arrow associated with text features. This capability may be added in a later release. Neither does the writer support TXT-style text records; only TX6-style text may be generated..

When these features are read into FME, the form changes slightly. If the Reader parameter Text Curves is set to Ignore, the start and end points of the text line are used to compute the average rotation of the characters, and the first point in the line becomes the text's position. The text feature's geometry is a point which defines the position, along with the following attributes to define the rest of the feature.

Attribute Name

Description

e00_anno_name

Name of annotation layer (subclass) containing text.

e00_anno_id

Sequence number of text features within its annotation layer.

e00_rotation

Rotation of text display, measured in degrees counterclockwise from horizontal.

Reprojectable: Yes

e00_text_height

Height of one line of text, measured in ground units.

Reprojectable: Yes

e00_text_width

Height of the line of text, measured in ground units. When features contain multiple lines of text, this will be the width of the longest line of the text.

Reprojectable: Yes

e00_tbox_height

Height of entire text block, measured in ground units. If the text contains carriage return characters, and thus spans multiple lines, this number will be greater than the value for e00_text_height; otherwise the two will have the same value.

Reprojectable: Yes

e00_text_string

String of text being displayed.

e00_text_just

(Optional) Justification of text feature relative to its baseline. This is an integer with a value between 1 and 12, inclusive. The default justification value will be “1”, indicating that the bottom of the text character is aligned with the first point of its defining arc.

e00_num_coords

(Optional) When writing TX6 or TX7 features, this attribute defines how many coordinates are to be used to define the text’s position. Its value is an integer between 1 and 3 (inclusive); if no e00_num_coords attribute is present, three coordinates will be used to represent the text location.

e00_text_level

(Optional) Numeric value representing the level of the text feature.

e00_text_symbol

(Optional) Numeric value representing the symbology ArcInfo will use to render the text.

If the Reader parameter Text Curves is set to Fit, and the text feature is defined by more than two coordinates, FME computes a position and rotation of each character of text, generating a separate feature for each character. (No features are generated for whitespace characters.) In this case, all features corresponding to a given ArcInfo text element will have identical values for the e00_anno_nameattribute, and for the e00_anno_id attribute, and will also contain two additional attributes:

Attribute Name

Description

e00_whole_text_string

The original text string, from which this feature’s single character was taken.

e00_pos_in_whole_text

The position of this feature’s character within the original text string. The first character has a position of “1”, the second has a position of “2”, and so on.

The contents of a TX6 or TX7 subfile within an E00 coverage may contain annotation in several different annotation layers (subclasses). Each feature belongs to one subclass, and this subclass’ name is contained in the feature's e00_anno_name attribute. The features within a given subclass are numbered as they are read and the e00_anno_id attribute is assigned the feature's sequence number, starting at 1, within the layer.

If there are no named annotation subclasses in the coverage – as is always the case with annotation from the TXT subfile – all text features will have an empty string (“”) as the value for their e00_anno_name attribute.

If the text has an associated arrow, a separate line feature is generated. This feature is type e00_textarrow, and contains the same values for its e00_anno_name and e00_anno_id attributes as the associated e00_text feature.

Every text feature defined in a TX6 or TX7 subfile of an E00 coverage has an associated set of user-defined attributes from a particular info file. Each record of the info file is returned from the E00 reader as a feature with the attributes defined on it. The features have an E00_FEAT_ROLE attribute of e00_text_attr and a feature type of <prefix>_<anno_name>_textattr, where <prefix> is an arbitrary prefix, and <anno_name> is the name of the annotation layer containing the feature. If the annotation layer is unnamed, the features defining the user attributes simply have a feature type of <prefix>_textattr.

The text geometries are associated with their user-defined attributes according to their position within the file. In other words, there is a one-to-one relationship between the text geometries and the features defining the user attribute. This relationship is formed by joining the text feature's e00_anno_name and e00_anno_id attributes with the attribute feature's e00_anno_name and E00_RECORD_NUM attributes.

Text features from TXT subfiles do not have named annotation subclasses, and consequently behave like text features from TX6 or TX7 files whose e00_anno_name contains an empty string.

Note: The user attributes for text defined in the TXT subfile come from a different info file than those for text from the TX6/TX7 subfile – *.XCODE rather than the *.TAT+ info file – but the E00 reader forms the features generated from the two info files identically.

Tolerance Values

E00 coverages contain a list of ten tolerance values, which have a specific meaning within ArcInfo. Each tolerance has a numerical identifier in the range 1..10, a state, and a floating point value.

The E00 reader generates ten features from the TOL subfile. Each feature contains the following attributes:

Attribute Name

Description

id

Original numerical id given to the tolerance.

name

A standard name given to the tolerance record. This name provides a description of the tolerance in question, and is really just a textual version of the above ID.

1=>FUZZY

2=>GENERALIZE

3=>NODE_MATCH

4=>DANGLE

5=>TIC_MATCH

6=>EDIT

7=>NODESNAP

8=>WEED

9=>GRAIN

10=>SNAP

state

The state of the tolerance.

1= tolerance has been verified

2 = tolerance has not been verified

value

The size of the tolerance. This is a floating point number, typically smaller than 1.0.

Projections

An E00 coverage may contain a subfile named PRJ, that defines the geographic projection of the coordinates within the coverage. The E00 reader gathers all of the information in this subfile into a single feature of the type e00_projection. The attributes of this feature are listed above, in Feature Types.

The PRJ subfile contains a list of named parameters, followed by a list of apparently unnamed parameters. Any of the named parameters, whose names are recognized, are defined as standard attributes – datum, projection, units, etc. on the e00_projection feature. Named parameters, whose names are not recognized by the reader, are placed into the attributes unknown_parameter{}.name and unknown_parameter{}.value. Unnamed parameters are placed into the attribute list param{}.value.

The E00 attempts to interpret the coordinate system information from the projection feature. If the parameters in the E00 file are from a known coordinate system or projection, the coordinate system information will be passed on the rest of the FME for normal processing. Otherwise a warning message will be logged in the log file. In either case, a feature describing the PRJ file will be passed-in to the FME feature stream.

Likewise, the E00 writer attempts to create a PRJ record from the coordinate system information attached to the features it is writing. The features must all belong to a single coordinate system for this to work. If no mapping can be found from the FME coordinate system to an E00 projection record, a warning will be written to the log file.