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

我已经看到了如何基于存储在SQL databasehere)中的GPS数据创建GTFS数据集的解决方案,但是当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

最佳答案

有五个必需的文件: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是路线的名称?只要您能提出与“路线”标识符相同的概念,就可以使用它。作为参考,“路线”定义为:


路线是一组旅行,这些旅行会作为一个整体显示给骑手
服务。


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停靠1号线的所有行程只允许乘客下车”),否则您可能永远只能允许两者兼而有之。

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。尝试要求提高车辆位置的精度。

关于python - 根据.CSV格式的AVL(GPS)数据创建伪GTFS数据集,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36798464/

10-12 16:40
查看更多