帮助选择合适的路由引擎


16

我正在构建一个路由计划系统,但是我仍然必须决定我将使用哪种底层路由引擎。到目前为止,我已经发现了pgrouting和neo4j。

我的路由网络位于postgresql / postgis数据库(从shapefile导入)中。我进行了一些查询,以提取节点(必须决定要走的方向或死角的方式的端点)并提取边缘(通常由几种连续的方式组成)。我所有的边缘都是双向的。

我的主要目标是使用距离=成本的A-star算法来计算该网络上的路由。

我的感觉告诉我,像neo4j这样的图形数据库是行之有效的方法(因为它似乎是为此目的而创建的),但是它们似乎默认情况下并不支持A-star,并且也没有真正的几何意义。 。似乎更适合社交网络而非地图。

  • 灌浆能满足我的需求吗?
  • 它足够快地进行即时查询(+ -2000个节点,+-4000个边缘)吗?通常,对于A-star,这将是几毫秒,但是我不确定在sql中的实现。
  • 向A-star灌浆是否给了我节点和边的列表?
  • 在大多数示例中,我看到有关灌浆的信息,我注意到通常在计算路线后会有一系列命令(例如“在X处向左转,等等”)。灌浆是产生还是从其他系统产生?

希望有人可以给我一些有关选择哪种系统的信息。Neo4j,灌浆或其他系统。


3
我认为大多数路由算法都不以“几何感”来操作,而是计算几何属性并将其用作成本(即折线的距离度量)。我从未使用过Neo4j,但它看起来确实很强大,我可能很快就会使用它。我只是看了看文档,它看起来可以使用星: docs.neo4j.org/chunked/stable/graph-algo.html docs.neo4j.org/chunked/stable/... pgRouting也能干,我非常喜欢它。比较这两种解决方案的性能将很有趣。
艾伦·阿黛尔

首先,我建议看Urbansim一个开源的土地使用模型。至于您的路由问题,如果这是正在计划的应用程序,那么我建议您先查看TransCAD,CUBE,PLANAR或EMME / 2之类的软件,以获取功能和用户界面。他们通常会发布1个小时或2个小时的软件演示CD(您可以运行一两个小时来试用该软件)。如果您想构建一些供在线使用或桌面使用的东西,请查看pgRouting。但是,从经验来看,有时并不像研讨会/教程所描绘的那样容易。
dassouki 2011年

我因某位明星的工作而垂头丧气,这太棒了!在我的前三个问题中回答是。我还是想知道这里的人是否对生成详细的导航方向一无所知。是否有一些可与注浆配合使用的工具,可根据计算出的路线的输出生成详细的方向(“在200m后左转,等等”)?
2011年

Answers:


8

为了研究论文的目的,我目前正在探讨与您相同的问题。在开始测试这两个数据库之前,我的假设与您相同。Neo4j图形数据库将是解决此类问题的完美解决方案。部分是,但是有很多问题。

第一个问题是仅在使用嵌入式数据库而不是通过REST API(服务器)时才实现A-Star。如果要将Neo4j与REST API一起使用,则仅支持Dijkstra算法。第二个问题是Neo4j的硬件内存要求。对于“较大”网络上的路由(Dijkstra),您需要大量RAM。对于大型网络,我的意思是类似德国OSM道路数据库的大小。我已经在6GB RAM服务器上运行了测试(这就是我目前所拥有的),并且只有较小的网络可以进行路由,而没有OutOfMemory异常错误。在我的测试案例中,“小型”网络是奥地利或克罗地亚的OSM道路数据库。并发查询我还没有用Neo4j进行测试。

所有这些问题在pgRouting中都不存在。内存不是问题,但并发查询会增加所需的内存量。例如,如果您有两个并发请求,则需要两倍的内存。即使对于德国OSM数据集,这也不是问题,pgRouting路由所有并发请求都没有任何问题。

性能:在大多数情况下,Neo4j优于pgRouting。但是仅当给定数据集有足够的内存并且所有节点和关系都在内存中(热启动)时。性能的增减取决于许多因素,但主要取决于网络的大小以及源节点与目标节点之间的距离(跳)。

您的网络规模很小,因此内存应该不会有任何问题。Neo4j可能不是一个不错的选择,但与标准关系数据库相比,您必须适应“很少”的不同数据模型。

要回答您的问题:

  • 在pgRouting中,您不必担心已经实现的sql中的AStar实现。
  • 是的,pgRouting可以为您提供节点和边的列表
  • 我认为pgRouting不会为您提供此类信息,而无需围绕查询进行一些自定义工作。但是也许我错了,也许有人这样做了,可以为您提供更多有关此问题的信息。

我不知道它是否会直接为您提供帮助,但是我发现最快的路由服务器之一是osm2po。它可以与OSM数据集一起使用,并且速度很快。目前仅实现了dijkstra,但开发人员也宣布了AStar。我希望其中一些可以帮助您。:)


很高兴听到实际上已经测试过这两个系统的人的来信。同时,我在灌浆方面有很多经验。我注意到,pgrouting为每个查询构建了整个图形,这对于大型网络(德国大小)来说相当慢,因此我不明白为什么pgrouting比Neo4j需要更少的内存。我的下一个尝试将是使整个图在ram中静态并在其上路由(使用neo4j,nx_spatial等),以确保对实时路由更快的响应。
2011年

是的,图表越大,灌浆和neo4j之间的差异就越大。如果将整个图形存储到内存中可能是最快的解决方案,那么这毫无疑问。当所有图形都加载到内存中时,Neo4j的速度非常快。不知道nx_spatial,我还没有测试过,但也许会。我相信它甚至可以胜过Neo4j。但是,如果您的应用程序可接受此解决方案是好的。
Mario Miler

1
@mrg不确定您是否仍然遇到问题,但是有OSRM(C ++)和GraphHopper(Java)。两者都可以缩放到世界范围的图形,例如德国(我是作者)的GraphHopper需求在1gb以下
Karussell

Karussell,谢谢您的信息!我已经找到OSRM,但是GraphHopper对我来说是新的。
2013年

0

您也可以查看我们的RW Net 4软件包(www.routeware.dk)。它可以直接从SHP文件使用A *进行最短路径计算。500欧元的基本套餐似乎足以满足您的需求。


感谢您的快速响应,但是我不确定我的项目是否值得立即花钱。另外,我还对数据进行处理,因此目前未知问题已得到解决。
mrg 2011年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.