Skip to main content

Hello all,

A tricky question here. I have two datasets, a road network and a collection of speed signs (points).

I need to assign a speed attribute to roads, using the speed signs as input. For each speed sign, I know the speed and the direction the sign is facing.

I'm looking at NetworkCostCalculator. Is there a way of having the calculation go in one direction from the source? And stop when it reaches another source? So I guess one source and multiple sinks?

I don't expect this to be solved in one answer...

 

 

Is your road network simple centerlines, or are there separate lines for separate lanes? Could there be different speed limits on opposite directions of the same road? Do you have speed sign points on one side of the road only, or are there "double" signs, one on each side of the road?

 

 

Your workspace would need to cope with all these eventualities, but basically, I'd propose to start with an AnchoredSnapper (to snap your sign points to the closest road network segment), followed by a PointOnLineOverlayer to break the road network into segments with nodes where the speed limit changes.

 

 

However, you might still have other nodes on the road network, where the speed doesn't change.

Personally I would solve this by using TopologyCalculator as the core Transformer and what I've used to attribute SubNetworks with a common attribute value/identifier. It allows you to group subnetwork elements together, so that if you then know a reference attribute value, like in this case a Speed Limit, then you can attribute the whole subnetwork with this value.

The real work in the workspace however, would be to create a topological representation of the speed subnetworks. TopologyCalculator requires Line End-Point to End-Point snapped together (ie. A Network) and similarly at the points where the speed limit changes, say at the speed signs or at road intersections, then the network needs to be broken by trimming off the end of the ends of lines to force a disconnection in the network.

Something like TopologyBuilder is probably the best network data preparation Transformer to use with the Speed Signs feed in as Nodes. The output will be the Road Edges, and the Road Nodes being road intersections and the speed signs. The Nodes and Edges output ports can be analysed to figure out which nodes are T or X Intersections and which are Speed Signs, and then a Bufferer+Clipper used to create gaps in the road networks at these points to then have TopologyCalculator then provide the unique IDs for the resulting speed limit subnetworks.


@nicholas NetworkAttributePropagator was just added to the FME HUB by @daveatsafe and might be what you're looking for. NeighborFinder to hook the speed sign to road segment and then try the custom transformer. Give us some feedback on whether it meets your needs of if we should make some changes


Reply