Ich arbeite derzeit mit Isochronen auf Neo4j und PostGIS.Neo4j Isochrones Verbesserung
Mein Problem in Neo4j ist, dass meine Abfrage zur Berechnung von Isochronen nicht wirklich effizient ist.
match (n:node) where n.id_gis='155'
with n
match path=(n)-[*0..15]-(e)
with e, min(reduce(cost=0.0, r IN rels(path) | cost + toFloat(r.cost2)*3600)) as cost
where cost < 30
return cost, collect(e) as isochrones
order by cost
Wie Sie im Code sehen können über i für maximalen Hops derzeit eine Grenze haben sonst, weil es für alle möglichen Pfade in der Datenbank suchen, bevor die maximal Kosten zu berechnen.
Hat jemand eine Idee, wie ich meine Abfrage ändern/verbessern kann, so dass es in einer "normalen" Zeit ausgeführt wird und ohne die Anzahl der Beziehungen zu begrenzen?
danke, das scheint wie eine gute Lösung. Wie kann ich eine Karte für jeden einzelnen Pfad speichern? – roman11
Warum eine Karte für jeden Pfad? Die Karte stellt die Aggregation der beiden erreichbaren Knoten und Kosten dar und ist per Definition einzigartig. –
Ich denke, ich habe es. Weißt du, ob es einen Weg gibt, um zu gehen, abhängig von der "Kosten" -Eigenschaft der Beziehungen (wie dijkstra) anstelle von depthFirst? Ich habe etwas über die Implementierung eines eigenen CostEvaluators und/oder PathExpanders gelesen, aber das scheint sehr kompliziert zu sein. – roman11