事实是,大多数人都使用A *算法的自定义变体。您会在大多数“大人物”中看到这一点(我不能说他们在公共论坛上是谁,但我可以告诉您您可能使用了其中的一个-保证),其中启发式的修改是非常依赖于他们使用的数据集。
您已经提到过灌浆,我认为这是“传统”的选择。这对于执行简单的路由算法和大多数问题非常有用。它也易于使用,并且在后端使用传统数据库。
但是,这实际上取决于要解决的问题的规模和类型,而布线是图形问题。
再一次,“大佬”通常会拥有许多与他们的图表相关的数据(例如,交通数据,公交路线,人行道),这些数据会影响路由算法。这些被称为多模式旅行计划者(在这里,您还可以选择“模式”的计划-没有自行车道-只有公共交通-这种事情)。你可以想怎么行程规划也成为一个时间敏感的问题(例如,如果你走回来的几个边缘回来,你将能够赶上,把你带到目的地的地铁前锋比,如果你只是试图向前导航边缘快得多使用最低的费用)。
“大佬”本身并不将数据存储在传统数据库中,而是使用预先计算的图(欢迎使用hadoop / mapreduce集群!)。可以想象,这些图非常大,因此知道如何连接相邻图的边缘可能是一个挑战。
无论如何,我建议您看一些多模式路由图项目:
Graphserver浮现在脑海。没有太多的文档,但是有很多纯净的代码编写能力(AFAIK,我相信MapQuest在某些路由产品中使用了该项目的变体)。
另一个选择是OpenTripPlanner,它背后有很多聪明的人(包括来自graphserver的人)。