从.CSV格式的AVL(GPS)数据创建伪GTFS数据集

时间:2016-04-22 16:00:08

标签: python r csv gps gtfs

我有一个城市公共交通系统.csv格式的自动车辆定位(AVL)数据集。我想使用此AVL数据集来构建GTFS dataset,以便运行可访问性分析。

我已经看到了如何根据SQL databasehere)中存储的GPS数据创建GTFS数据集的解决方案,但是当GPS数据存储在GPS数据中时我还没有找到解决方案.csv格式,就是这种情况。我很乐意对此提供任何帮助,但如果解决方案可以在RPython进行,我会很高兴。

我已经拥有GTFS的stops.txt文件,但我想我需要创建文件shapes.txttips.txtroutes.txtstop_times.txt

这就是我的GPS.csv数据集的样子:

             timestamp  order  line      lat      long      speed route_name
1: 2016-02-24 00:04:56 B27084   905    -22.9     -43.3      32.00   12860326
2: 2016-02-24 00:05:07 B41878  2302    -22.9     -43.2       0.19   12860386
3: 2016-02-24 00:04:37 B75563   928    -22.9     -43.2       0.00   12867184
4: 2016-02-24 00:05:17 D86084   852    -23.0     -43.6      24.26   12860043
5: 2016-02-24 00:04:58 C41420          -22.9     -43.2       0.00         NA
6: 2016-02-24 00:04:47 C30084          -23.0     -43.3       0.00         NA

1 个答案:

答案 0 :(得分:2)

有五个必填文件:agency.txtroutes.txttrips.txtstop_times.txtstops.txt。对于仅用于计算可访问性的伪GTFS,可以省略所需文件中的许多可选字段以及所有可选文件。但是,您可能希望复制真实的或构建它们,因为它们可用于此目的(例如,人们在选择旅行时会考虑票价,因此您可以使用fares.txt)。

仔细阅读specification

agency

如果想象所有路线都由同一个机构提供服务是可以接受的,那么您可以简单地做到:

agency_id,agency_name,agency_url,agency_timezone,agency_lang,agency_phone
XXX,My Awesome Agency,http://example.com,,,

即。你只需要前三个字段。

agency.txt旨在重复:

  

提供此Feed中数据的一个或多个公交机构。

routes

你需要:

  • route_id(主键)
  • route_short_name
  • route_long_name
  • route_type(必须在0-7范围内;表示模式)

示例:

route_id,agency_id,route_short_name,route_long_name,route_desc,route_type,route_url,route_color
12860326,XXX,12860326,12860326,,3,,
12860386,XXX,12860386,12860386,,3,,
12867184,XXX,12867184,12867184,,3,,

我不知道如何处理在示例数据中没有分配路由的路由。我也不知道order指的是什么。也许order是路线的名称?只要你能提出与" route"相同的概念。标识符,你可以使用它。作为参考,"路线"定义为:

  

路线是一组作为一个单独向乘客显示的行程   服务。

trips

  

旅程是在特定时间发生的两个或多个停靠的序列。

你需要:

  • trip_id(主键)
  • route_id(外键)
  • service_id(外键)

示例:

route_id,service_id,trip_id,trip_headsign,direction_id,block_id,shape_id
12860326,1,1,,1,,12860326
12860326,1,2,,1,,12860326
12860386,1,1,,1,,12860386
12860386,1,2,,2,,12860386

direction_id,虽然是可选的,但往往非常有用,而且我已经有几个应用程序在摄取GTFS时需要它,尽管它具有可选状态。

service_id很棘手,与日历日期一起使用。它允许GTFS轻松表示,例如,"正常"平日服务,节假日服务,平日假期。出于您的目的,您可以只使用1用于所有内容,但这取决于您的应用程序以及何时收集AVL数据。当我处理类似的应用程序时,我在我的数据库中维护了一个查找表,告诉我某个特定日期是公共假日,和/或学校假期,和/或大学期间,因为公交路线改为适合学生

shape_id是可选的,但如果您想在地图上绘制路线或使用OpenTripPlanner等工具,这将是至关重要的。

stop_times

  

每次旅行时车辆到达和离开的时间。

您将需要:

  • stop_id(主键)
  • trip_id(外键)
  • arrival_time
  • departure_time
  • stop_sequence

这需要脚本编写时的大部分工作。它将比所有其他文件组合大几个数量级。

stop_idtrip_id愉快地与已经确定的停靠点和行程相关。 departure_timearrival_time将位于AVL数据的两行中,并且在许多情况下实际识别服务何时到达停靠点是此任务中最困难的方面。访问乘客智能卡数据更容易,当服务实际停止时,您可能会找到AVL记录的空间群集,因为车辆在特定时间段内不会移动。然而,如果停止是空的并且没有人想要下车,则很难确定服务何时实际到达"在停止 - 特别是因为如果他们不打算在安排一个人时停止行动(例如,如果他们看不到任何人等待,则行驶得更快或走捷径),驾驶员的行为有时会发生变化。在您的情况下,speed值可能会有所帮助,但请注意不要将乘客站点与交叉点混淆。

stop_sequence是可选的,但是应用程序通常期望它存在的另一种情况。无论如何,如果您的脚本无法识别stop_sequence,那么您可能无法正确发明此文件。

示例:

trip_id,arrival_time,departure_time,stop_id,stop_sequence,stop_headsign,pickup_type,drop_off_type,shape_dist_traveled
1,00:05:07,00:05:54,22018,1,,1,1,0
1,00:07:16,00:08:01,22557,2,,1,1,39
1,00:10:56,00:10:56,22559,3,,1,1,76

指示停留时间是可选的,因此,如果这很难解决,arrival_timedeparture_time可以有效地成为同一时刻。

在实践中,pickup_typedrop_off_type非常有影响力,但通常无法单独从AVL数据中确定,除非您的AVL收藏家真的考虑过在他们的档案中支持GTFS ......不幸的是非常不可能。您可能只需要允许两者,除非您有其他信息可以插入(例如"工作日晚上4号站点之后的所有旅程都只允许乘客离开")。

stops

  • stop_id(主键)
  • stop_name
  • stop_lon
  • stop_lat

你说你已经拥有了这个,这很棒。挑战实际上是通过stop_times外键使其与stop_id接口。幸运的是,我已经确定了AVL数据,这些数据是在服务停止时确定的,以及它们停止在什么位置,使用与计划的GTFS表示相同的代码。

calendar

要使用OpenTripPlanner等工具获得良好效果,您可能需要包含calendar.txt文件。如果您采用建模定义的时间段的方法,这也有助于确定伪GTFS的有效期。例如:

service_id,monday,tuesday,wednesday,thursday,friday,saturday,sunday,start_date,end_date
1,1,1,1,1,1,0,0,20160224,20160226
2,0,0,0,0,0,1,1,20160224,20160226
3,0,0,0,0,0,1,0,20160224,20160226

这表明这些服务的建模时间为2016-06-24至2016-06-26。在该范围之外请求的任何路线都有不确定的旅行时间。我建议您选择不超过一周的时间:超过这个时间,使用GTFS的应用程序将开始挣扎于数据量。真正的GTFS数据受益于这种"伪"数据不能。

shapes

不要担心shape_dist_traveled,我只是使用虚拟信息(单调增加):它可以从形状推断出来,除非形状过于笼统。

示例:

shape_id,shape_pt_lat,shape_pt_lon,shape_pt_sequence,shape_dist_traveled
12860386,-22.9,-43.3,1,1
12860386,-22.0,-42.9,2,2

注意

一般的想法是使用手头的AVL数据来满足规范会议运输饲料的最低要求。您可能需要编写自己的脚本来创建这些文件,因为AVL数据没有标准。您可以创建一些信息,并且您可能需要:当您尝试使用不完整的Feed时,大多数应用程序都会引发异常。事实上,根据我的经验,很多应用程序实际上会遇到只满足最低要求的Feed的问题,因为程序很差,大多数现实世界的数据都超出了最低标准。

您可能会发现AVL数据存在缺陷,使其难以使用。最值得注意的情况是运行的路线,但AVL不起作用。在这种情况下,您的伪GTFS将无法在实践中准确地表示运输系统。这些几乎不可能被发现。

在这种情况下,我不了解您的orderlineroute字段之间的差异。您需要确定最合适的位置;我忽略了他们,因为我不明白他们代表的是什么。您需要将AVL架构与GTFS的概念相匹配。

过境系统往往非常复杂,有很多例外。你最终可能会排除一些特别不正常的案件。

您的纬度和经度值看起来不太精确:如果这是真实数据,您可能无法使用shapes.txt。尝试要求更高精度的车辆位置。