Skip to main content
Hi,

 

 

I am trying to create drivetime isochrones from multiple nodes with a routable road network. What I am trying to achieve is a visualisation that looks something like this. 

 

This was created with Qgis + python - Source (http://planet.qgis.org/planet/tag/drive%20time%20isochrones/

 

 

I have managed to work out the drive time isochrone from one node using this example using the network cost calculator (Thanks to the Calculating the emergency response travel time example (https://knowledge.safe.com/articles/Samples_and_Demos/Calculating-emergency-response-travel-times))

 

 

 

 

 

However I am not sure sure how to progress from here as the network cost calculator does not work with multiple source input. 

 

 

I would appreciate if anyone can shed any light on this problem.

 

 

Regards,

 

 

Matt

 

 
Hi Matt,

 

 

Since the NetworkCostCalculator accepts only one souce feature per a group (pair of source and network), you will have to copy the network (lines) for every source.

 

I think the following procedure would bring the required result.

 

 

Add unique ID attribute  to the source features.

 

 

Merge all the source IDs to every network line unconditionally with the FeatureMerger.

 

Lines --> Requestor

 

Sources --> Supplier

 

Join On: 1 to 1 (set the same constant value for both Requestor and Supplier to perform unconditional merging)

 

Process Duplicate Suppliers: Yes

 

Check the "Generate List" checkbox and specify a list name.

 

 

Explode the Matched features (lines) by the list with the ListExploder (Accumulation Mode: Only Use Incoming List). This creates copys of every line for each source. Each resulting line will have a souce ID.

 

 

Send the resulting lines and source features to the NetworkCostCalculator (Output Optimal Cost As: Z-values), and set the source ID attribute to the Group By parameter.

 

 

After that, determine required z-value of each vertex of the lines.

 

Decompose the lines into individual vertices with the Chopper (Mode: By Vertex, Maximum Vertices: 1).

 

 

Extract their current z-values as new attribute with the ElevationExtractor.

 

 

Singulate the vertices being at the same coordinate, and save their z-values into a list attribute with the Matcher (Match Geometry: 2D, List Name on SingleMatched Output: _list).

 

 

For the singulated vertices from the SingleMatched port, extract minimum z-value from the list with the ListRangeExtractor and reset z-coordinate by the minimum value with the 3DForcer.

 

 

Then, send the vertices to the ConterGenerator.

 

 

Hope this helps.

 

 

Takashi
Thanks Takashi, your solution works perfectly!

 

 

Cheers,

 

 

Matt

isolinescreation2.fmwHi there @takashi Thank you for the wonderful help so far, I have tried to run the workspace as you have described but only seem to be getting the result for one of my source locations not all of them. I can't seem to see what I am doing wrong!


Reply