Skip to main content

Hello,

In the context of working on a GIS database I want to build the topology between existing features, for example transform some intersection points into nodes and some common segments into common edges. How this is done within FME ? I was thinking about using the topology builder but as I've seen in the documentation : ''The TopologyBuilder will not correct data - it will only find relationships and intersections that exist. ''

It seems that the transformer only shows the topology and doesn't build it effectively with the data. Please correct me if I am wrong.

Thank you very much.

 

The TopologyBuilder will break geometries at intersections. At each intersection a node is created that contains topological relationship info. Other than that it will not modify the geometries, e.g. it will not do anything about potential overshoots, undershoots or pseudo nodes.

There are several articles that describe the TopologyBuilder in detail:

 

https://docs.safe.com/fme/html/FME_Desktop_Documentation/FME_Transformers/Transformers/topologybuilder.htm

https://knowledge.safe.com/articles/988/building-topology-calculate-route-length-topologyb.html

https://knowledge.safe.com/articles/698/working-with-networks-topology-and-networktransfor.html


The TopologyBuilder will break geometries at intersections. At each intersection a node is created that contains topological relationship info. Other than that it will not modify the geometries, e.g. it will not do anything about potential overshoots, undershoots or pseudo nodes.

There are several articles that describe the TopologyBuilder in detail:

 

https://docs.safe.com/fme/html/FME_Desktop_Documentation/FME_Transformers/Transformers/topologybuilder.htm

https://knowledge.safe.com/articles/988/building-topology-calculate-route-length-topologyb.html

https://knowledge.safe.com/articles/698/working-with-networks-topology-and-networktransfor.html

Thank you for your answer,

 

I don't know if I have formulated my question properly (please correct me if i'm wrong)

 

For my data, all errors like (overshoots, undershoots, self-intersections, etc) have been corrected.

 

What I want is, for example, if I have 2 intersecting lines, not to break them at the intersection (and get therefore 4 lines). I wanna keep the 2 original lines and indicate that at their intersectin there's a node.

Thank you for your answer,

 

I don't know if I have formulated my question properly (please correct me if i'm wrong)

 

For my data, all errors like (overshoots, undershoots, self-intersections, etc) have been corrected.

 

What I want is, for example, if I have 2 intersecting lines, not to break them at the intersection (and get therefore 4 lines). I wanna keep the 2 original lines and indicate that at their intersectin there's a node.

I'm not sure I understand. How is it a topology if the edges don't connect (meaning that the lines do not break at the intersection)?

You could always use the TopologyBuilder and just keep the nodes and ignore the edges, but I'm not sure that would make much sense?


The TopologyBuilder will break geometries at intersections. At each intersection a node is created that contains topological relationship info. Other than that it will not modify the geometries, e.g. it will not do anything about potential overshoots, undershoots or pseudo nodes.

There are several articles that describe the TopologyBuilder in detail:

 

https://docs.safe.com/fme/html/FME_Desktop_Documentation/FME_Transformers/Transformers/topologybuilder.htm

https://knowledge.safe.com/articles/988/building-topology-calculate-route-length-topologyb.html

https://knowledge.safe.com/articles/698/working-with-networks-topology-and-networktransfor.html

Would it be an option for you to run the topology with TopologyBuilder and then compare the result with the original? Lines that would be split should then show as changed.


@lianaolianov

 

To do that you need to prepare your data.

Mainly prepare and making the intended network clean for Topologybuilding, ma.

Identify which objects should not interact to exclude them from intersection (using some attribute to indicate this) and transform "some segments into common edges" .

When this is done you can use a intersector.

Add some POI points at this stage if required using a PointOnLineOverlayer.

 

Then send all to a topologybuilder with assume data is clean. (if you did it correctly, it shoud be clean at that stage).

 

I do this to for instance not get nodes at tunnels or bridges crossing roads at different levels. POI to map routes containing relevant data to geometry.

Admittedly tricky to build.


Thank you for your answer,

 

I don't know if I have formulated my question properly (please correct me if i'm wrong)

 

For my data, all errors like (overshoots, undershoots, self-intersections, etc) have been corrected.

 

What I want is, for example, if I have 2 intersecting lines, not to break them at the intersection (and get therefore 4 lines). I wanna keep the 2 original lines and indicate that at their intersectin there's a node.

I think maybe that I am misunderstanding the topology concept for linear networks. I tought that 2 lines can be considered as connected at their intersection without being broken there. That's wrong right ?


Reply