我正在处理的项目涉及移动应用程序中的静态脱机GTFS数据。所有GTFS数据都可以在领域对象(或SQLite,如果需要)中使用。
现在,我想建立从A到B的所有列车或公共汽车连接(在某个出发时间之后开始)。
如何查询GTFS数据以获得从A到B的连接???
我重新开始从A出发。 我意识到要在这次旅行中获得所有的电台名称,包括时间。
但我发现在两个位置A和B之间获取连接信息非常困难。为了获取该信息,我必须设置哪些SQL查询?
任何帮助表示赞赏!
答案 0 :(得分:0)
如果您只是想动态计算静态集线器之间的最短行程路线,在离线应用程序中,确定如下图所示,您可以使用以下公式:
(Source)
1 function Dijkstra(Graph, source):
2
3 create vertex set Q
4
5 for each vertex v in Graph: // Initialization
6 dist[v] ← INFINITY // Unknown distance from source to v
7 prev[v] ← UNDEFINED // Previous node in optimal path from source
8 add v to Q // All nodes initially in Q (unvisited nodes)
9
10 dist[source] ← 0 // Distance from source to source
11
12 while Q is not empty:
13 u ← vertex in Q with min dist[u] // Node with the least distance
14 // will be selected first
15 remove u from Q
16
17 for each neighbor v of u: // where v is still in Q.
18 alt ← dist[u] + length(u, v)
19 if alt < dist[v]: // A shorter path to v has been found
20 dist[v] ← alt
21 prev[v] ← u
22
23 return dist[], prev[]
<子>(Source)子>
好吧,我承认到目前为止,我的答案是 tad 滑稽......
我怀疑你没有意识到 是多么复杂 是你要做的事情,特别是在离线环境中。像谷歌和微软这样的公司已经花费了数百万美元用于大量数据科学家的研究。
如果这是你认真对待的事情,我建议你从一个10×10的网格开始,并开始从“A点→B点”开始的逻辑在随机位置添加障碍(这种模拟道路开始和结束)。最近,我感到惊讶的是,我回答的看似简单,有点相关的 Stack Overflow“管道大小转换”question是多么复杂。
如果您没有“离线”条件,我建议您考虑获取Google Web Services Directions API的[免费] API密钥。基本上你告诉它A点A&amp; B是,它通过运输或其他方法为您提供详细的路线信息。
Google的许多API可能会有所帮助Snap to Roads API,它会将部分或错误路径变为可驱动路径。
研究 路线逻辑 和 最短路径逻辑 实际上是 真正令人着迷的东西 ,有一些令人惊叹的资源可供学习相关理论(见下文),包括video from Google解释他们如何去做。
...但不幸的是,这不是用简单的 SQL查询来实现的。
维基百科:Dijkstra's algorithm