Ich baue ein Routenplanungssystem auf, aber ich muss noch entscheiden, welche zugrunde liegende Routing-Engine ich verwenden werde. Bisher habe ich pgrouting und neo4j gefunden.
Ich habe mein Streckennetz in einer postgresql / postgis-Datenbank (aus einem Shapefile importiert). Ich habe Abfragen gemacht, um Knoten zu extrahieren (Endpunkte von Wegen, an denen Sie eine Entscheidung treffen müssen, in welche Richtung oder in Sackgassen) und um Kanten zu extrahieren (die oft aus mehreren aufeinanderfolgenden Wegen bestehen). Alle meine Kanten sind bidirektional.
Mein Hauptziel ist es, Routen in diesem Netzwerk mit einem A-Stern-Algorithmus zu berechnen, bei dem Entfernung = Kosten.
Mein Gefühl sagt mir, dass eine Graph-Datenbank wie neo4j der richtige Weg ist (wie es scheint, für diesen Zweck gemacht zu sein), aber sie scheinen nicht standardmäßig A-Star zu unterstützen und es gibt auch keinen wirklichen Sinn für Geometrie . Es scheint besser für soziale Netzwerke geeignet zu sein als für Karten.
- Würde das Verfugen meine Bedürfnisse erfüllen?
- Ist es schnell genug für On-the-Fly-Abfragen (+ -2000 Knoten, + -4000 Kanten)? Normalerweise wäre dies ein paar ms für A-Star, aber ich bin nicht sicher über diese Implementierung in SQL.
- Gibt mir das Verfugen eines A-Sterns eine Liste von Knoten und Kanten?
- In den meisten Beispielen, die ich über das Verfugen sehe, stelle ich fest, dass es normalerweise eine Liste von Befehlen nach der Berechnung der Route gibt (wie "An X nach links abbiegen, usw."). Produziert Pgrouting dies oder stammt es von einem anderen System?
Hoffentlich kann mir jemand einige Informationen über das zu wählende System geben. Neo4j, Pgrouting oder ein anderes System.
Antworten:
Ich untersuche derzeit das gleiche Problem wie Sie, um einen Forschungsbericht zu verfassen. Bevor ich anfing, diese beiden Datenbanken zu testen, hatte ich die gleiche Annahme wie Sie. Diese Neo4j-Grafikdatenbank wäre die perfekte Lösung für diese Art von Problem. Und teilweise ist es das, aber mit vielen Problemen.
Das erste Problem ist, dass A-Star nur implementiert wird, wenn Sie eine eingebettete Datenbank verwenden, nicht über die REST-API (Server). Wenn Sie Neo4j mit der REST-API verwenden möchten, wird nur der Dijkstra-Algorithmus unterstützt. Das zweite Problem ist der Hardwarespeicherbedarf für Neo4j. Für das Routing (Dijkstra) in "größeren" Netzwerken benötigen Sie viel RAM. Für großes Netzwerk meine ich so etwas wie die Größe der deutschen OSM- Straßendatenbank. Ich habe meine Tests auf einem 6-GB-RAM-Server durchgeführt (das ist alles, was ich derzeit habe) und nur kleinere Netzwerke konnten ohne OutOfMemory-Ausnahmefehler geroutet werden. "Kleine" Netze in meinen Testfällen sind beispielsweise OSM-Straßendatenbanken für Österreich oder Kroatien. Gleichzeitige Abfragen habe ich noch nicht mit Neo4j getestet.
Alle diese Probleme gibt es bei pgRouting nicht. Speicher ist kein solches Problem, aber gleichzeitige Abfragen erhöhen den Speicherbedarf. Wenn Sie beispielsweise zwei gleichzeitige Anforderungen haben, wird die doppelte Menge an Speicher benötigt. Dies war auch für einen deutschen OSM-Datensatz kein Problem, da pgRouting alle gleichzeitigen Anforderungen problemlos weiterleitet.
Leistung: In den meisten Fällen übertrifft Neo4j pgRouting. Aber nur, wenn genügend Speicher für den angegebenen Datensatz vorhanden ist und sich alle Knoten und Beziehungen im Speicher befinden (Hot Start). Die Zunahme / Abnahme der Leistung hängt von vielen Faktoren ab, hauptsächlich jedoch von der Größe des Netzwerks und der Entfernung (Hops) zwischen Quell- und Zielknoten.
Ihre Netzwerkgröße ist recht klein, sodass Sie keine Probleme mit dem Arbeitsspeicher haben sollten. Wahrscheinlich ist Neo4j keine schlechte Wahl, aber Sie müssen sich an ein "kleines" anderes Datenmodell anpassen als in Standardrelationsdatenbanken.
Um Ihnen Fragen zu beantworten:
Ich weiß nicht, ob es Ihnen direkt helfen wird, aber einer der schnellsten Routing-Server, den ich gefunden habe, ist osm2po . Es funktioniert mit OSM-Datenmengen und ist ziemlich schnell. Derzeit ist nur dijkstra implementiert, aber der Entwickler hat auch AStar angekündigt. Ich hoffe, dass Ihnen etwas davon hilft. :)
quelle
Sie können sich auch unser RW Net 4-Paket ansehen (www.routeware.dk). Mit A * kann der kürzeste Pfad direkt aus einer SHP-Datei berechnet werden. Das Basispaket zu 500 € scheint für Ihre Bedürfnisse ausreichend zu sein.
quelle