Hmmm. That's an interesting one. I don't think we have functionality or a transformer designed for that. But I do have an idea to get started...
- Turn your DEM into points (if it isn't already). If it's raster then the RasterCellCoercer will help.
- Use a Counter to give an ID to each point
- Extract the Z values of each point into an attribute (_z)
- Use the NeighborFinder on each point to locate x neighbors (say 8 for a grid) and create a list
- Sort the list in order of _z values, descending
Now we can go from point to point, finding the next point from the first entry in the list. Does that make sense?
I suspect you would use a ListIndexer to pull the ID from the first item in the list, then delete the list with an AttributeRemover. Use an Aggregator to merge all points into one feature, with a list of all their "next ID" points.
Then you can use a Loop in a custom transformer to go from your starting point, to the next one, creating a string of ID numbers that form the line.
That's the best I can come up with right now. I can see some issues depending on how good the DEM is (does each point have a neighbor with a lower Z value?) but it's a start.
You might also consider trying R. There's a good shortest-path type tool in there, so it might also have this sort of DEM pathfinding functionality too.
Interesting approach, I figured there should be a raster or 3d shortest path piece somewhere in FME... I will need to think about this some more. Thanks for your thoughts.
Interesting approach, I figured there should be a raster or 3d shortest path piece somewhere in FME... I will need to think about this some more. Thanks for your thoughts.
I suppose you could turn the DEM into a network of connections, where the cost is related to the fall in elevation, then run it through the ShortestPathFinder. But the ShortestPathFinder needs an end point to go to; it won't start at point X and see where it ends up (be nice if it did).