如何在 GTFS 数据中为每次行程具有多个形状的路线构建折线

How To Build Polyline For A Route with Multiple Shapes Per Trip in GTFS data

我正在尝试解析 GTFS 数据并为单个路线构建折线形状(纬度和经度对数组)。但在我的示例 GTFS 数据中,我发现一次旅行的一条路线有多个形状 ID。这是来自 GTFS 数据的一段话:

routes.txt


    route_id,agency_id,route_short_name,route_long_name,route_desc,route_type,route_url,route_color,route_text_color
    90,YRT,90,LESLIE,3,FDAE35,FFFFFF

trips.txt


    route_id,service_id,trip_id,trip_headsign,trip_short_name,direction_id,block_id,shape_id,wheelchair_accessible,bikes_allowed
    90,1,1286467,里士满格林中学 - NB,0,131905,59628,1,1
    90,1,1286468,里士满格林中学 - NB,0,131907,59628,1,1
    90,1,1286380,里士满格林中学 - NB,0,131906,59629,1,1
    90,1,1286469,里士满格林中学 - NB,0,131908,59628,1,1
    90,1,1286381,里士满格林中学 - NB,0,131904,59629,1,1
    90,1,1286382,里士满格林中学 - NB,0,131905,59629,1,1
    ...
    90,1,1286399,里士满格林中学 - NB,0,131960,59629,1,1
    90,1,1286400,里士满格林中学 - NB,0,131961,59629,1,1
    90,1,1286470,里士满格林中学 - NB,0,131921,59630,1,1
    90,1,1286471,里士满格林中学 - NB,0,131922,59630,1,1
    90,1,1286401,里士满格林中学 - NB,0,131962,59629,1,1
    90,1,1286402,里士满格林中学 - NB,0,131960,59629,1,2

shapes.txt


    shape_id,shape_pt_lat,shape_pt_lon,shape_pt_sequence,shape_dist_traveled
    59628,43.902752,-79.398992,72,7.2214
    59628,43.902585,-79.399005,73,7.2405
    59629,43.775996,-79.346326,1,0.0000
    59629,43.775987,-79.346238,2,0.0071
    ...
    59629,43.902752,-79.398992,317,15.7832
    59629,43.902585,-79.399005,318,15.8022
    59630,43.811197,-79.360774,1,0.0000
    59630,43.812373,-79.361259,2,0.1364

我期待每次旅行一个形状,或者至少形状是按顺序排列的。但是这个旅行数据让我失望:


    route_id,service_id,trip_id,trip_headsign,trip_short_name,direction_id,block_id,shape_id,wheelchair_accessible,bikes_allowed
    90,1,1286400,里士满格林中学 - NB,0,131961,59629,1,1
    90,1,1286470,里士满格林中学 - NB,0,131921,59630,1,1
    90,1,1286471,里士满格林中学 - NB,0,131922,59630,1,1
    90,1,1286401,里士满格林中学 - NB,0,131962,59629,1,1

如果您注意到,#59629 形状之后是 #59630。但在那之后我们再次看到#59629。我怎样才能理解这一点?是数据问题吗?

形状与路线无关,形状仅与个人行程相关。一条路线包含两个或更多形状是很常见的。

事实上,由于形状明确编码了运动方向,因此路线总是至少有 2 种形状,它们被分成 "there-and-back" 对旅行(这是简单公交路线最常见的方法)实践)。更复杂的可能性包括具有多个分支的路线,或具有一些短途旅行的路线。

此外,形状 ID 没有暗示排序;即 59630 是 "before" 或 "after" 59629 是没有意义的。原则上,这些是任意字符串。

简而言之,您正在使用的数据看起来不错,只是没有明确的方法可以为一般情况做您想做的事情。但是,根据您的具体情况,可以采用更手动的方法并将多个形状组合成一条连贯的多段线。