2017-06-06 6 views
0

Hallo ich experimentiere mit dem Routing mit neo4j, aber ich habe Probleme mit der Anpassung von apoc.algo.dijkstra. Ich möchte nicht nur von A nach B gehen, sondern über C auch von A nach B gehen und dabei eine Gewichtung der Verbindung berücksichtigen.Neo4j - apoc.algo.dijkstra - kürzester Weg von a nach b, aber über c, d, e usw.

Die AB-Abfrage ist ...

MATCH (startNode:road_node {id:'59030214550942348742a27d'}), (endNode:road_node {id:'59030215550942348742a610'}) 
call apoc.algo.dijkstra(startNode, endNode, 'ROADLINK', 'min_travel_time') YIELD path, weight 
return path, weight/60 

ich ein paar Möglichkeiten versucht, eine über c einschließlich, aber kann es nicht ...

MATCH (startNode:road_node {id:'59030214550942348742a27d'}), (endNode:road_node {id:'59030215550942348742a610'}) 
call apoc.algo.dijkstra(startNode, endNode, 'ROADLINK', 'min_travel_time') 
with path, weight 
MATCH (startNode)-[*]-(via:road_node {id:'59030215550942348742a666'})-[*]-(endNode) 
return path, weight 

Irgendwelche Ideen zum Beispiel an die Arbeit oder Vorschläge, wie man von A nach B via C routet, wobei man eine Gewichtung der Links in Betracht zieht, wäre sehr hilfreich.

Antwort

1

Sie können den Dijkstra-Algorithmus einfach zweimal aufrufen, indem Sie via als Endknoten im ersten Aufruf und dann als Startknoten im zweiten Aufruf verwenden. Das Ergebnis hat 2 Teilwege und 2 Teilgewichte (geteilt durch 60).

MATCH (start:road_node {id:'59030214550942348742a27d'}), (end:road_node {id:'59030215550942348742a610'}), (via:road_node {id:'59030215550942348742a666'}) 
CALL apoc.algo.dijkstra(start, via, 'ROADLINK', 'min_travel_time') YIELD path, weight 
WITH end, via, path AS p1, weight/60 AS w1 
CALL apoc.algo.dijkstra(via, end, 'ROADLINK', 'min_travel_time') YIELD path, weight 
return p1, path AS p2, w1, weight/60 AS w2; 
+0

sehr ordentlich, danke. Funktioniert gut – SAB

+0

Großartig. Bitte denken Sie daran, [Antwort] (https://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work) die Antwort zu akzeptieren, die Ihnen am besten bei einer Frage hilft, die Sie stellen. – cybersam

Verwandte Themen