まず第一に、少し背景。
私は地域の交通機関で働いています。フィーダーバスサービスの「診断」を行っています。車を利用する代わりにバスを利用して駅まで行くことができるユーザーの割合を知りたいのですが。これは何度かパスで行われましたが、現在はgtfsをメインデータソースとして使用しているため、方法論を再考する必要があります。
電車に「餌をやる」と見なされるには、バス路線が駅から一定の距離内に止まる必要があります(赤いバッファ)。また、バスが電車の30分前に駅に到着した場合、待ち時間が長すぎるため、朝20分以上眠って車に乗る必要があるため、電車サービスとの同期が非常に重要です。
12番線でラインA(青)に乗ったとします。13番バスでバスを降りると、バスは13番の停留所に到着します。それはとても良いことです。つまり、1から13までの停留所でそのバス路線を利用する全員が、その電車の5分前に到着するということです。
次に、列車は、学校や交差点がたくさんある非常に人口密度の高いエリアを通過するため、速度が大幅に低下します。一方、バスは14〜17番の停留所で乗客をピックアップし、その列車の10分前に第2駅に到着します。そのため、14〜17番の停留所でバスに乗車する乗客は、駅に到着したら、すべて10分の待ち時間があります。したがって、そのバス路線に沿って、1番から13番のバスに乗る乗客は5分の待ち時間を持ち、14番から17番のバスに乗る乗客は10分の待ち時間を持っています。
線路の反対側にあるラインBは、鉄道駅#1の近くを通過しますが、その停留所は、「給餌」鉄道駅#1を考慮するには遠すぎます。電車の7分前に駅#2に到着します(朝のラッシュアワー中に電車ごとに行ってください。非常によく同期しています)。したがって、B線沿いの乗客は、バスを停車場1から59までどこにでも連れて行くのに7分の待ち時間があります。
さて、私の質問です。LineA.13とLineA.17の停車地が私の列車に供給していることを確認したら(PostGISでは空間的に行われています)、#13の前の停留所でバスに乗るときの待ち時間は5分ですが、その後は待ち時間が10分の場合、すべてのストップにその待ち時間を割り当てるにはどうすればよいですか?
Postgres / PostGIS(pl / pgsqlまたはpl / python)で実行したいのですが、純粋なpython(OSまたはarcpy)も使用できます。
逆にループできると思います。したがって、適切なストップ(ここではLineA.17)を見つけたら、同じ待機時間を16に割り当て、次に15 ...基準に合う別のストップ(LineA.13)を見つけて、残りを割り当てます。ストップの数は13と同じです。
しかし、そのようなループを作成する方法はわかりません。SQLではできないと思うので、PostgreSQLで手続き型言語を使用する必要があります。
私はpgRoutingを使用して各フィーダーストップ間のルートを見つけることで、ラインAが2つに分割されるようにしました(ストップ1から13、次にストップ13から17)。それは簡単でしょうか?
次のステップは、pgRoutingを使用して、待ち時間のあるすべてのストップからの運転時間を計算し(LineA.18以上に申し訳ありません!)、それをバスのスケジュールと比較して、競争力を計算します(5車でそれよりバスで数分?)
何か案は?私は通常、これまでに行った努力を示すために、長い進行中のスクリプトを投稿していますが、行き詰まっています!