See Sarus Lifting and the GraphDash engineering team plot the move of a massive wind turbine tower from south of Denver to its new happy and windy home in northern Colorado!
Click to Watch - You can Full Screen the Video in HD!
Wind Turbine blades need to move - the enemy low bridges, tight turns and continual construction.
Saurus and Neo4j have got your back.
Sarus provides the world’s oversize loads with advanced route planning and permitting.
GraphDash provides innovative graph engineering that can provide a more than 400% ROI.
Let’s look at getting a massive wind turbine tower from a tower factory south of Pueblo to up north to a wind farm near the Colorado Wyoming Border. A bridge height of 18 feet works great for a turbine tower. 12 feet - not so much.
Let’s write the query.
Cypher - a developer’s best friend - makes this easy.
We’ve loaded the open source map data for all major roads in Colorado into a Neo4j graph database.
Wherever a low bridge or tight corner exists, we’ll set the bridge_height and corner_radius properties for that node.
//Set bridge height
match(n {osmid: 8748366720})
set n.bridge_height = 12
return n
//Set corner max length
match(n {osmid: 8748366720})
set n.corner_max_length = 150
return n
For this trip, the tower we want to move is 17 feet tall and 170 feet long.
The Neo4j Graph Data Science library allows us to project the nodes we want to work with into computer memory.
//Graph Data Science - Project only the nodes that will allow the wind turbine tower to pass into computer memory
MATCH (source:Intersection where source.bridge_height >=18 and target.corner_max_length >160)-[r:ROAD_SEGMENT]->(target:Intersection where target.bridge_height >=18 and target.corner_max_length >160)
WITH gds.graph.project(
'myGraph',
source,
target,
{ relationshipProperties: r { .length } }) AS g
RETURN
g.graphName AS graph, g.nodeCount AS nodes, g.relationshipCount AS rels
In this case, we’ll only project nodes that will allow the tower to pass.
During the projection - see how the WHERE query excludes all the nodes where the bridge is too low or corner too tight?
Now that we have only the passable nodes in memory - we run the GDS DJK algorithm.
And bam - - out comes the list of nodes that are great for this tower to pass right through.
//Graph Data Science - Use the GDS shortest path dijkstra algorithm to generate the route
MATCH (source:Intersection {osmid:177852639}), (target:Intersection {osmid:55767161})
CALL gds.shortestPath.dijkstra.stream('myGraph', {sourceNode: source, targetNode: target,
relationshipWeightProperty: 'length'
})
YIELD index, sourceNode, targetNode, totalCost, nodeIds, costs, path
RETURN
totalCost,
[ n in nodes(path) |[n.`location.latitude`, n.`location.longitude`]] as path
Query Output - the Path to Take [[38.1637134, -104.6415003], [38.1588222, -104.6457252], [38.1316705, -104.6682707], [38.1251484, -104.6710434], [38.1171885, -104.6722202]... The Route to Northern Colorado
Using the latitude and longitude properties to place these nodes on the map gives us clear and safe travel.
This wind turbine tower is now on its way from the edge of Denver to it’s new happy and windy home in northern Colorado.
Thanks to Saurus, Neo4j and the GraphDash engineering team - a new wind farm will soon be providing more than a thousand megawatts of power every day to homes in Colorado and California.
Click to Watch - You can Full Screen the Video in HD!
Comments