TopologyBuilder
Computes topology on input point, line, and/or area features.
This transformer does not assume that all input data is clean and noded properly unless Assume Clean Data is set to Yes. It takes any data and constructs the resulting topology after computing any intersections that are present in the input data.
Input Ports
Output Ports
Each topological primitive is output with attributes describing its topological relationships.
Note: Unlike most transformers, you cannot name these attributes.
Topologically significant nodes (point geometries) are output through this port.
Attribute | Description |
---|---|
_node_number |
A unique identifier for each node. |
_node_angle{} |
List attribute describing the topological relationship of each edge connected to the node. The edges in this list are ordered counterclockwise. |
_node_angle{}.fme_arc_id |
The ID of the edge connected to this node. The magnitude of the ID corresponds to the _edge_id of the connected edge. If the ID is positive, the start of the edge is connected to the node. If the ID is negative, the end of the edge is connected to the node. |
_node_angle{}.fme_arc_angle |
The angle of the tangent line of the edge at the node. |
Topologically significant edges (curve geometries) are output via this port.
Attribute | Description |
---|---|
_edge_id |
A unique identifier for each edge. |
_right_face |
The _face_id of the face to the right of this edge. |
_left_face |
The _face_id of the face to the left of this edge. |
_right_edge |
The _edge_id of the edge that is found when traveling along this edge and turning right at the _to_node. If the ID is positive, the right edge is going away from the _to_node. If the ID is negative, the right edge is coming towards the _to_node. |
_left_edge | The _edge_id of the edge that is found when traveling backwards along this edge and turning right at the _from_node. If the ID is positive, the left edge is going away from the _from_node. If the ID is negative, the left edge is coming towards the _from_node. |
_from_node | The _node_number of the node at the start of this edge. |
_to_node | The _node_number of the node at the end of this edge. |
_faces | Comma-separated list of the IDs of the faces this edge borders. The magnitude of the ID corresponds to the _face_id of the bordered face. If the ID is positive, the face boundary contains this edge. If the ID is negative, the face boundary contains the reverse of this edge. |
Topologically significant faces (area geometries) are output through this port.
Attribute | Description |
---|---|
_face_id |
A unique identifier for each face. |
_faces |
Comma-separated list of _face_ids for each face this face shares an edge with. |
_perimeter |
The length of the outline of the face in 2D. |
_area |
The area of the face in 2D. |
_edges |
Comma-separated list of the IDs of the edges that compose this face. A 0 entry separates edges of different boundaries. The magnitude of the ID corresponds to the _edge_id of the contained edge. If the ID is positive, the face boundary contains this edge. If the ID is negative, the face boundary contains the reverse of this edge. The edge IDs are in the same order that the edges are used to make the boundary of the face. Note: The Provide Bounding Arcs on Output Polygons parameter changes the behaviour of the _edges attribute. For more information, see the section below that describes this parameter. |
The output area, by subtraction, represents everything not covered by the faces.
Attribute | Description |
---|---|
_face_id |
The unique face identifier of the universe is always 0. |
_perimeter |
The length of the outline of the universe in 2D. |
_area |
The area of the universe in 2D. |
_edges |
Comma-separated list of the IDs of the edges that compose the universe. A 0 entry separates edges of different boundaries. The magnitude of the ID corresponds to the _edge_id of the contained edge. If the ID is positive, the universe contains this edge. If the ID is negative, the universe contains the reverse of this edge. The edge IDs are in the same order that the edges are used to make the boundary of the universe. Note: The Provide Bounding Arcs on Output Polygons parameter changes the behaviour of the _edges attribute. For more information, see the section below that describes this parameter. |
Features without point, text, curve, or area geometries are output through this port along with an additional attribute, fme_rejection_code, to indicate the reason for rejection.
Parameters
Transformer
The input features may be grouped into separate topology sets based on attribute values. All attributes are carried across from the input features to the output features.
Note: How parallel processing works with FME: see About Parallel Processing for detailed information.
This parameter determines whether or not the transformer should perform the work across parallel processes. If it is enabled, a process will be launched for each group specified by the Group By parameter.
Parallel Processing Levels
For example, on a quad-core machine, minimal parallelism will result in two simultaneous FME processes. Extreme parallelism on an 8-core machine would result in 16 simultaneous processes.
You can experiment with this feature and view the information in the Windows Task Manager and the Workbench Log window.
Yes: This transformer will process input groups in order. Changes on the value of the Group By parameter on the input stream will trigger batch processing on the currently accumulating group. This will improve overall speed if groups are large/complex, but could cause undesired behavior if input groups are not truly ordered.
No: This is the default behavior. Processing will only occur in this transformer once all input is present.
Parameters
The number indicates the maximum length to output any edge. If any line contains more than this number of coordinates, it will be broken into pieces which are output separately, each with their own edge IDs, and correctly noded. A value of 0 indicates an unlimited number of coordinates per edge.
If set to Yes, the transformer enters a mode where no collinear edges or overlapping nodes are output at all, whether they came from source linear features or from the borders of source area features or input points, or calculated as intersection points. In this mode, all output edges or nodes which were overlapping with at least one direct input will contain a list attribute (_overlapping_input_data) with information about each input with which it was overlapping. This keyword sets the fieldname of the list attribute to contain all the attributes (except geometry attributes that start with fme_) from all of the input lines or points that were overlapping with the final output edge or node.
A side effect of this option is that only edges that form part of a face boundary will be considered in the calculation of _left_edge and _right_edge. (All edges originating only from line input will have their own ID supplied as their left edge ID, and the negation of this as their right edge ID.)
When this parameter is set to All, the transformer does the following:
- All of the edges from the output face will be listed in the comma-separated _edges attribute. A 0 entry separates edges of different boundaries. An example _edges attribute is "1,2,-3,0,5,0,7".
- If the universe consists of multiple disjoint areas, it will be returned as a single feature with a MultiArea geometry.
When this parameter is set to First Per Boundary, the transformer does the following:
- The first edge of each boundary will be in the _edges list attribute. An example list is _edges{0} = 1, _edges{1} = 5, _edges{2} = 7.
- The value will always be positive, regardless of the direction of the edge.
- If the universe consists of multiple disjoint areas, a different feature will be returned for each area.
When this parameter is set to First Per Outer and Disjoint Inner Boundary, the transformer does the following:
- The first edge of each outer and disjoint inner boundary will be in the _edges list attribute. If an inner boundary is topologically connected to the outer boundary, it is not considered disjoint. If two inner boundaries are topologically connected to each other, only one is considered disjoint. An example list is _edges{0} = 1, _edges{1} = 5.
- The value will always be positive, regardless of the direction of the edge.
- If the universe consists of multiple disjoint areas, a different feature will be returned for each area.
If Propagate All Attributes From Input is set to Yes, attribute lists are added to each output feature, composed of attributes from the relevant input features. For each node, this will be a list of edges and a list of faces touching the node; for edges, there will be a list of nodes and a list of faces; and for faces, a list of nodes and a list of edges.
For nodes:
- Edge attributes will be stored in the _node_angle{} list. This list is ordered counterclockwise.
- Face attributes will be stored in the _faces{} list. This list is not ordered.
For edges:
- Node attributes will be stored in the _nodes{} list. The start node’s attributes will be the first entry in the list. If the end node is different from the start node, the end node’s attributes will be the second entry in the list.
- Face attributes will be stored in the _faces{} list. This list is not ordered.
For faces:
- Node attributes will be stored in the _nodes{} list. This list is not ordered.
- Edge attributes will be stored in the _edges{} list. The edges in this list are in the same order that the edges are used to make the boundary of the face.
If set to Yes, input features will be deaggregated by flattening all levels of aggregate and multi geometries. Composite geometries will not be split and geometry instances will not be exploded. If set to No, input features will not be deaggregated and will be accepted or rejected based on their root level geometry.
Preserve Internal Edges (Advanced) specifies that coordinate "cycles" within a face are allowable and will be preserved. A "cycle" is an edge that occurs twice in the same face's boundary (once in each direction); the edge's ID will appear twice in that face's edge list, positive in one instance and negative in the other.
Assume Clean Data (Advanced) specifies that the input is topologically clean and noded properly and therefore no intersection will be performed. To be topologically clean, the data must contain no un-noded self intersections; this may be confirmed using the appropriate Self Intersection rule inside GeometryValidator. Similarly, all intersections between geometries that should be acknowledged must have a coordinate at the intersection point. If Assume Clean Data is false, the intersections of the data are computed prior to constructing the topology.
Example
Editing Transformer Parameters
Using a set of menu options, transformer parameters can be assigned by referencing other elements in the workspace. More advanced functions, such as an advanced editor and an arithmetic editor, are also available in some transformers. To access a menu of these options, click beside the applicable parameter. For more information, see Transformer Parameter Menu Options.
Transformer Categories
Search FME Knowledge Center
Search for samples and information about this transformer on the FME Knowledge Center.
Tags Keywords: connectivity hub Topologizer