続いて時刻表表示の課題を記しておきます。今の私の頭の中にあるものです。
もちろん、ご提案があればどしどしどうぞ。
一人でアイディア出そうとしていても見方が狭くて限界があります。
駅とスケジュール上の指定点が完全に同じオブジェクトでは無いことに起因する問題:
Simutransの仕組み上、列車(他の乗り物も含む) の停車は、スケジュール上では
マップの中の点 (koord3d) として記憶されます。で、実際にその点が駅かどうかは
その点にホームがあるかどうかで判断されます。(内部では実は頻繁にこの判定をやっている)
またホームがあることによって、駅は三次元上のホームのある点の集合としても定義されます。
駅間距離の計算が完全ではない今は最初に登録された編成のスケジュール点を使って駅間距離を計測しています。
またこの距離も、その編成が走行したとしてでルート計算しています。
これが問題になる例としては:
計測に使った編成がディーゼル車で非電化路線を含めて近道で計算したが、後に追加した列車が電車だとこの距離では走れない
(逆の順番でも同様。この場合、ディーゼル車にとっては実際より長い距離が示されます)
また、列車と自動車を並べて表示させる場合などには、駅の基準点が、線路か道路かどちらかのものになってしまい、
他種別のものの計算では困ったことになります。
(でも、時刻表の上で「このバスは、この列車に接続しているか?」なんて見てみたいですよね:)
アシスタントでの時間見積り今の計算は 見積時間 = (駅間距離+若干マージン) / 編成最高速度
- 上の問題に付随して、距離が正確でないから時間も正確じゃなくなります。
-また距離は妥当であっても、発進時、停車時、積載量、コーナリングでの減速などが加味されていません。
いわゆる、最高速度と評定速度の差が出てしまいます。(評定速度の目安を見積りたい)
今は固定的に若干のマージンを足していますが、固定値ではほとんど意味がない。
というわけで、実際に走行させて計測した方がはるかに信頼できる値が出せます。
通過判定ある普通列車 L があり、L は駅 A、B、C に停車します。
また急行列車 E があり、E は駅 A と C に停車します。
この時、時刻表上で E x B の欄をどう考えるかという問題です。
選択は二つ、「通過」か「経路外」かです。 (日本の時刻表(冊子) だと 「レ」か「||」 かと言えばいいのかな?)
理想的には以下のように定義して区別したい。
E が B の構内 (通過線を含む) を通って A から C へ移動するのであれば、この列車はBを「通過」する。
E が B の構内を通らないのであれば、この列車はB については「経路外」である。
実際には、Eの走行経路は計算で求められますが、その各点が「Bの構内であるか否か」という判定が難しい。
なぜなら、通過線を通る場合はその各点は「駅」の情報の中に入っていないからです。(Simutransのデータ構造の問題)
今は A→B、B→C、A→C の走行経路から求まる距離を三角不等式にあてはめて
AB + BC ≦ AC+ε (εは誤差吸収用の係数)
であれば、B を経由(通過する) と判定しています。
左辺が大きすぎれば「B駅を通ろうとするのは、実際の走行よりも遠回りしすぎだ。通るわけがない」という判定です。
ここで ε (誤差?)が発生する要因は:
- B駅の認識点が、実際に走行するところより外れている (普通のために退避ホームが指示されているなど)
- 走行経路がA駅、C駅の指定点の事情で若干変化している (急行は優等ホームから発車、など)
比較的軽めでそこそこ悪くない判定だと思いますが、ここでεというパラメータが必要なのが厄介なところ。
(ちなみに走行経路の計算は、必ず走行方向に合わせて計算する必要があります。信号や一方通行指示で走行方向によって経路が異なるためです。また実際にそこを走行する編成によって経路が異なるのは前述の通りです。その他にも速度制限標識の影響なども)
前項に関係している問題:
編成が表の上のどの駅行に「止まる」と判断するかが難しいために起こる問題です。
途中折り返し路線の表示(例えば、関東では京浜東北線のような折り返しパターンを考えてみるといいのでしょうか。)
A - B - C - D - E
とあって、
A - B - C
B - C - D
C - D - E
という折り返し列車を同時に表示して、期待通りに表示できるかという問題です。
さらに快速運転で、
A ----- D --E なんて加えてみるとどうなるでしょう。
周期400で、脳内ダイヤを組むと以下のような感じです。(快速の特に A-D間が160なのは速すぎな気もするけど)
| 列1 | 列2 | 列3 | 快9 |
駅A | 0 | | | 350 |
駅B | 100 | 20 | | v |
駅C | 200 | 120 | 40 | v |
駅D | | 220 | 140 | 110 |
駅E | | | 240 | 150 |
駅D | | | 340 | 190 |
駅C | | 320 | 40 | v |
駅B | 300 | 20 | | v |
駅A | 0 | | | 350 |
まず、今のロジックでこのように表示できるかという問題と、
さらに「折り返したところで時間表示が飛ぶのは見づらい」という問題があります。
(後述の「停車と駅間を区別」ができれば少しは解決します。)
その他、情報取り扱いの問題:
着発の分離実際の時刻表だと、主要駅 (始終点、退避・接続駅) では、着時と発時が分離されて掲示されますね。
今の TTT は 駅間+停車 の合計の区間時間しか設定できないので「着時(予定)」を掲示することができません。
つまり、原始情報が足りていないのです。
データ構造的にこの分離をするのか (下手すると設定の面倒さが増す)、
擬似的に表示させたければ、駅手前に中継点を設定して、ここに時間を割当てるかです。
(後者の場合は特に、前の記事で書いた「中継点での取り扱い」を実現する必要があります。)
実績時間の取り扱い今だと、その区間が「計測済みか」どうかがわからないし、
できれば(計画が設定されているのであれば) 先行しているか遅れているかを色分けや差分表示で見てみたいですね。
つまり、今の表は縦方向には差分が表示できているが、横方向の値の関係も表示できるといい、ということです。
あんまりやり過ぎると、表計算ソフトを作り出すようなことになりますのでほどほどにしないといけませんが。
他にも気になるところはあったはずなのですが、思い出したら後で追記します。