Google maps api 3 在不使用停止顺序的情况下确定正确的GTFS停止顺序?

Google maps api 3 在不使用停止顺序的情况下确定正确的GTFS停止顺序?,google-maps-api-3,google-api,gtfs,Google Maps Api 3,Google Api,Gtfs,我正在为我正在开发的应用程序使用GTFS提要。我正在尝试列出所选路线的所有站点。目前,我正在尝试按stop_顺序对列表进行排序,但这无法正常工作,因为有些行程并没有到达每个站点,并且我收到的数据会使stop_顺序在每次行程的每个站点递增1。这一点的意义在于,stop_序列不考虑可能有更多或更少停靠的其他行程 下面是一个例子: 这是路线的停车顺序(忽略并非每次行程都会在每次停车时停车的事实) 下面是该路线的一些旅行示例: Trip 1: A, B, C, D Trip 2: A, B, E 我的

我正在为我正在开发的应用程序使用GTFS提要。我正在尝试列出所选路线的所有站点。目前,我正在尝试按stop_顺序对列表进行排序,但这无法正常工作,因为有些行程并没有到达每个站点,并且我收到的数据会使stop_顺序在每次行程的每个站点递增1。这一点的意义在于,stop_序列不考虑可能有更多或更少停靠的其他行程

下面是一个例子:

这是路线的停车顺序(忽略并非每次行程都会在每次停车时停车的事实)

下面是该路线的一些旅行示例:

Trip 1: A, B, C, D
Trip 2: A, B, E
我的数据正在做什么:

对于行程1:

Stop A: stop_sequence = 1
Stop B: stop_sequence = 2
Stop C: stop_sequence = 3
Stop D: stop_sequence = 4
对于行程2:

Stop A: stop_sequence = 1
Stop B: stop_sequence = 2
Stop E: stop_sequence = 3
因此,当我尝试为一条路线订购所有可能的站点时,我的结果是:

Stop A
Stop B
Stop C
Stop E
Stop D
这显然是错误的

是否有人知道任何其他可能的想法,以正确的顺序停止,也许使用其他数据随GTFS饲料

使用真实世界的示例进行更新

下面是获取路由915的所有站点的数据库查询的示例输出。 这是上午的时间表

+---------+---------+---------------+------------------------------------------------+
| stop_id | trip_id | stop_sequence | stop_name                                      |
+---------+---------+---------------+------------------------------------------------+
| 11771   | 1269287 |             1 | LOTTE PLAZA US 40 & US 29                      |
| 11772   | 1269280 |             1 | HARPER'S FARM RD & CEDAR LA eb                 |
| 11773   | 1269280 |             2 | LITTLE PATUXENT & GRAY STAR wb                 |
| 11774   | 1269280 |             3 | LITTLE PATUXENT & WHITE CORD WAY wb            |
| 11775   | 1269280 |             4 | LITTLE PATUXENT & BRIGHT PASSAGE eb            |
| 11776   | 1269280 |             5 | LITTLE PATUXENT & HICKORY RID nb               |
| 11777   | 1269280 |             6 | LITTLE PATUXENT & CEDAR LA eb                  |
| 11778   | 1269280 |             7 | LITTLE PATUXENT & HARPER'S FARM opp eb         |
| 11779   | 1269280 |             8 | COLUMBIA MALL & SOUTH RING RD eb               |
| 11782   | 1269280 |             9 | BROKEN LAND & HICKORY RIDGE sb                 |
| 11780   | 1269289 |             9 | LITTLE PATUXENT & GOV WARFIELD nb              |
| 11783   | 1269280 |            10 | BROKEN LAND PARK & RIDE                        |
| 11781   | 1269289 |            10 | LITTLE PATUXENT & VANTAGE PT nb                |
| 11784   | 1269280 |            11 | SCAGGSVILLE PARK & RIDE                        |
| 11785   | 1269280 |            12 | BURTONSVILLE PARK & RIDE                       |
| 11786   | 1269280 |            13 | COLESVILLE RD  & FENTON ST sb                  |
| 11787   | 1269280 |            14 | SILVER SPRING METRO STATION                    |
| 11788   | 1269280 |            15 | WALTER REED HOSP & 16TH ST NW                  |
| 11789   | 1269280 |            16 | 16TH ST & P ST NW                              |
| 11790   | 1269280 |            17 | 16TH ST & M ST NW                              |
| 11718   | 1269280 |            18 | K ST & 16TH ST NW fs eb                        |
| 11719   | 1269280 |            19 | K ST & 14TH ST NW eb                           |
| 11791   | 1269280 |            20 | 13TH ST & H ST NW sb                           |
| 11759   | 1269280 |            21 | PENNSYLVANIA AVE & 12TH ST NW eb               |
| 11793   | 1269280 |            22 | CONSTITUTION AVE & 10TH ST NW fs eb            |
| 12046   | 1269280 |            23 | 7TH ST NW & CONSTITUTION AVE eb                |
| 11650   | 1269280 |            24 | INDEPENDENCE AVE & 7/6 ST SW mid eb            |
| 11601   | 1269280 |            25 | INDEPENDENCE AVE & 4TH/3RD ST SW eb            |
| 13627   | 1269280 |            26 | M ST & 1st ST SE (NAVY YARD) sb                |
| 13628   | 1269280 |            27 | M ST & 4th ST SE (SOUTHEAST FEDERAL CENTER) eb |
| 11569   | 1269280 |            28 | M ST & ISAAC HALL AVE SE eb                    |
| 11795   | 1269280 |            29 | M ST & 8/9TH STS mid eb                        |
+---------+---------+---------------+------------------------------------------------+
这里是许多通勤者目前使用的时间表的pdf链接。两个列表的第一个不同之处是在“哥伦比亚购物中心和南环路eb”之后。

我试图让这个应用程序尽可能地对通勤者友好,但是当车站与通勤者通常使用的相比出现故障时,它可能会引起很多混乱

更新2:

我仍然不知道如何使用拓扑排序来获得正确的序列。是的,它可能给出一个有效的序列,但不能保证它是通勤者容易识别的正确序列。让我们看另一个使用我提供的pdf的示例。我们将看旅行1和5,直到“哥伦比亚购物中心”站。我将创建以下边:

从行程1创建的边

Cedar Lane --> Gray Star Way
Gray Star Way --> White Cord Way
...
Harpers Farm Rd --> Columbia Mall
从行程5创建的边

Lotte Plaza --> Columbia Mall
拓扑排序唯一能确保的是

对于从顶点u到顶点v的每个定向边uv,在排序中,u位于v之前

这意味着有多个有效的排序,但只有一个是我想要的实际正确的排序(但我没有办法从其他有效排序中选择这个排序,至少我想不出来)

有效的顺序可能是(这也是正确的顺序):

甚至

Cedar Lane
Gray Star
...
Lotte Plaza
Columbia Mall
正如你所看到的,根据拓扑排序,这两个都是有效的,但只有一个是我想要的。我想不出一种方法来根据GTFS提要提供的数据一致地选择正确的序列


如果我看得不对,请告诉我。

您可以构造一个有向图(DAG),其中属于路线的每个站点都是一个节点,行程中两个站点之间的每个过渡都是一条边。然后,可以对图()执行拓扑排序,以获得停止的顺序。请注意,拓扑排序仅适用于没有循环的图,但某些行程实际上有循环,因此如果它创建了循环,则不希望添加边

这恰好是OneBusAway应用程序套件用于排序站点的算法:

请注意,有时路线会有分叉或分支,其中有两组站点(每个分支一个)彼此不交互。朴素的拓扑排序可能会任意交错这些停止,但OBA代码使用以下两种启发式方法来获得更自然的排序:

1) 组一起停在同一分支中


2) 当相对地排列两个分支时,首先将分支放在距离分支点较近的位置。

对于遇到此问题的任何人来说,这就是我几年前解决此问题的方法

没有一个正确的序列-这里的目标是产生一个“视觉最佳”序列(在大多数情况下)。而不是看单个停止-我将停止分组到逻辑部分,然后将这些部分合并在一起,在一个与拓扑排序不太相似的过程中

然后,您可以向不相关的部分添加其他规则/权重,以确定哪个部分应优先于另一个部分。e、 g.ABC--->CDE或GHI


我会试试这个,让你知道它是怎么回事。当创建GTFS提要的人可以更智能地使用stop_sequence字段时,所有这些额外的工作都是需要的,这真是太痛苦了。我不确定这是否会起作用,因为如果从一个站点到另一个站点的每次转换都来自同一行程,那么就只存在数据。因此,我无法正确地在不同行程的站点之间绘制边界。为了将这一点与我的示例联系起来,我无法确定
Stop C
实际上应该在
Stop E
之前(至少我不知道)。为什么Stop C应该在Stop E之前(英语字母除外)?也许你的路线末端有一个分支,一半的巴士去C-D,另一半去E。在这种情况下,真的有“正确”的车站顺序吗?哈哈,对不起,布莱恩!我没有试图对我在谷歌群组上的帖子不尊重。我将用另一个例子来更新我的原始帖子,因为我无法在这篇评论中正确回应。请记住,stop_序列只能用于排序属于同一行程的站点(在stop_times.txt中,也就是具有相同行程id的行)。正如我在下面提到的,要在不同的行程中创建更一般的站点顺序(也就是不同的站点顺序),您需要使用我在下面概述的方法。我添加了另一个更新,解释了为什么我无法想象拓扑排序将如何实现我想要的结果。也许这个图表可以
Lotte Plaza,
Cedar Lane
Gray Star
...
Columbia Mall
Cedar Lane
Gray Star
...
Lotte Plaza
Columbia Mall