I'm in the process of creating an accessibility map that identifies where a pedestrian sidewalk network overlaps with different features along the network (e.g. whether the network overlaps with stairs, ramps, crosswalks etc.). I've flagged segments of the pedestrian network with a "1" if they overlap with these features. The first screenshot below shows an example of the data table that I'm working with.

I'd like to find the shortest route between buildings that account for 1) length and 2) that add an additional cost for segments of the route that overlap with inaccessible barriers (e.g. stairs).

I've created a workflow in FME below where I've been able to find the shortest route, but I can't figure out how to add a cost that would indicate to not optimize the route if stair_flag==1. Does anyone know a workaround?

Screenshot 1

enter image description here


The obvious solution is to use a Tester to drop those features entirely, if you don't want them included in the route. Otherwise...

Like Dan says, there isn't any tool to ignore a specific feature in the ShortestPathFinder. You can set a cost, but if you do then FME no longer uses length as a measure.

So, what you have to do is use a LengthCalculator to calculate the length of all features and use that as the cost attribute in the ShortestPathFinder. A workspace would look like this:

enter image description here

For features with stairs=true, you could then apply a multiplier value to increase the cost before finding the path. You can actually do this inside the LengthCalculator:

enter image description here

In fact, your flag could actually be a cost multiplier rather than a single boolean value.

So the actual cost is length * stairs * ramps * etc

The field could actually even be the number of staircases (+1) so a path with length 50 metres, 2 stairs, 1 ramp, and 0 crosswalks would be: 50 * 3 * 2 * 1 = 300

So you aren't absolutely excluding those paths, but increasing the cost quite heavily.

The value needs to be applied both forwards and backwards in the ShortestPathFinder (unless you absolutely know each path will only be used in one direction):

enter image description here

  • Thanks, Mark! I tried your suggestion by adding +20 to the stair segments and +1 to any other non-stair segments using the AttributeValueMapper. I then used the same settings that you applied in the LengthCalculator and ShortestPathFinder tools. However, after running the tool, no paths could be identified. I set the tolerance to 300 feet in the ShortestPathFinder tool, but I still can't seem to figure out why no shortest paths have been identified. Any idea what could be going on? – JMD Jan 25 '18 at 21:58
  • Likely that your start and end points aren't an exact match for a node on the network. Be sure to use the option to snap them (in the ShortestPathFinder parameters). Give a bigger tolerance than you really need to ensure that solves the problem, then dial it back to what is realistic for your data. – Mark Ireland Jan 25 '18 at 22:49

instead of 1, set those no-go sections like stairs to a really high number, and everything else to its length. You could scale ramps somewhere in-between.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.