粉山葵様開発のBVE Trainsim マップ製作支援スクリプト『Tsutsuji trackcomputer』では空中写真(航空写真)を用いた配線を行うことができます。
ここでは私ハチキハなりの製作手順を共有できればと考えております。
準備
まずは作る区間を決めましょう。ここでは私が公開している芸備線下り、狩留家駅周辺を作ってみようと思います。
狩留家駅は1面2線+側線1線の構造をしています。
鳴踏切(備中神代起点136K176M)を基準に製作していきます。
必要となる値は基準とする製作範囲より手前の箇所のキロ程(直線の地点、踏切が最も分かりやすい)です。基準とできる箇所がすぐ近くになければある箇所まで遡ります。
駅構内の曲線設定値(半径R,緩和曲線長TCL,曲線長CCL,カントC)、分岐器番数(制限速度から推測可能)はあった方がより精密に作ることができます。
駅中心地点は参考にはなりますが使いません。
設定ファイルの作成
製作用のフォルダを作り、以下の作業を行っていきます。
緯度・経度を調べる
基準地点の緯度・経度を googlemap(地理院地図より有効数字が大きい) 上で右クリックし、表示されるサブメニューから取得します。
今回基準とする鳴踏切の場合、緯度34.487677692204436, 経度132.5791784769175 でした。
設定ファイルを作る
設定ファイル(setting.cfg)の 8-20 行目で航空写真(国土地理院地図)を読み込んでいます。
項目 | 解説 |
---|---|
owntrack | 最後に自線として出力する軌道の名称 |
unit_length | 計算の刻み幅 |
origin_distance | 配線の基準となる箇所の距離程 |
offset_variable | 上記を代入する変数 分かりやすい名前をつけましょう。 RP:Reference Point(基準点)の略 |
output_path | 出力先 |
[@TSUTSUJI_GENERAL]
owntrack = Karuga_2
unit_length = 1
origin_distance = 136176
offset_variable = P09_RP
output_path = ./2
[@MAPTILE]
# 緯度・経度
latitude = 34.487677692204436
longitude = 132.5791784769175
x0 = 0
y0 = 0
alpha = 1
# 表示倍率 18もしくは17を推奨
zoomlevel = 18
# オルソ画像 or シームレス 適宜見えやすい方を使う
template_url = https://cyberjapandata.gsi.go.jp/xyz/ort/{z}/{x}/{y}.jpg
# template_url = https://cyberjapandata.gsi.go.jp/xyz/seamlessphoto/{z}/{x}/{y}.jpg
toshow = True
autozoom = False
[Karuga_2]
file = Karuga_2.txt
# 自線扱いとするのでTrue(絶対座標)
absolute_coordinate = True
x = 0
y = 0
z = 0
angle = 0
color = aqua
BveTs Map 2.02:utf-8
#【記載区間】狩留家駅2番線(下り本線)
#----------基本線形----------
0;
Curve.SetGauge(1.067);
Curve.SetCenter(1.067/2);
Curve.SetFunction(1);
0;
distance + 300;
まずは一旦読み込んでみます。座標(0,0)地点から右に軌道 Karuga_2 が伸びていますが、実際の向きとは異なることが分かります。
下り本線(自軌道)を配線する
向きを調整する
Karuga_2 の向きを調整していきます。手順は上記公式サイトと全く同様です。
適宜位置や表示倍率の変更を行ってください。
- Measure ウィンドウを開く
- カーソル(ここでは A)の track を Karuga_2 にセット
- カーソルを 0m地点にセット
- Track を absolute に変更
- Dir. をクリックし下り側線路方向へセット
- 角度が表示される(細かなずれが後々響くので丁寧に、ここでは 94.434)
- 軌道 Karuga_2 の angle を 94.434 に変更
- 再読み込み(F5)
[Karuga_2]
file = Karuga_2.txt
absolute_coordinate = True
x = 0
y = 0
z = 0
angle = 94.434
color = aqua
画面上での向きが一致したのが分かると思います。
この線を基準として配線していきますので、補助線という形で残しておきましょう。
以下を設定ファイルに追加します。
absolute_coordinate=False, parent_track=Karuga_2 とすることで親軌道Karuga_2の0m地点から補助直線を伸ばしています。
[guide]
file = guide.txt
absolute_coordinate = False
parent_track = Karuga_2
origin_kilopost = 0
x = 0
y = 0
z = 0
angle = 0
color = pink
BveTs Map 2.02:utf-8
#【記載区間】補助線
#----------基本線形----------
0;
Curve.SetGauge(1.067);
Curve.SetCenter(1.067/2);
Curve.SetFunction(1);
0;
distance + 300;
10番両開き分岐器左カーブ
まず最初に登場する曲線である分岐器を作ります。
分岐器開始地点は踏切から14m離れた地点(136K190M)とします(googlemapを用いて測定、ポイントモーターなど目印となるものを見つける)。
以下のように書き換え再読み込みします。分岐器なのでカントは0となります。
BveTs Map 2.02:utf-8
#【記載区間】狩留家駅2番線(下り本線)
#----------基本線形----------
0;
Curve.SetGauge(1.067);
Curve.SetCenter(1.067/2);
Curve.SetFunction(1);
0;
14;
Curve.Begin(-370.7);
distance +20;
Curve.End();
# 以下は適宜記述を切り替え
# distance + 300;
BveTs Map 2.02:utf-8
#【記載区間】補助線
#----------基本線形----------
0;
Curve.SetGauge(1.067);
Curve.SetCenter(1.067/2);
Curve.SetFunction(1);
0;
Track['guide2'].Position(-3,0);
distance + 300;
ver.1.7.1 より対応した Track構文を用いています。
補助線を2本引くことができました。
新たに作った軌道 guide2 は下り本線となる箇所に重ねています。
次は下り本線とこの補助線を繋げ、下り本線を延長していきます。
右カーブ (1)
Track構文を用いた箇所にも同様にカーソルを設置することができます。
カーソルAを Karuga_2 の分岐器曲線終端(34m地点), Bを guide2 の適当な位置にあわせ R=500,TCL=15,CCL=10,C=15 の曲線を CurveTrack Solver Mode3-1 を用いて生成します。
Mode3-1 : TCL, R固定
# 出力結果
$pt_a = 34.000000;
$pt_a +24.637841;
$cant = 0.015;
Curve.SetFunction(1);
Curve.Interpolate(0.000000,0);
$pt_a +39.637841;
Curve.Interpolate(500.000000, $cant);
$pt_a +51.613832;
Curve.Interpolate(500.000000, $cant);
$pt_a +66.613832;
Curve.Interpolate(0.000000,0);
CCL≒12より許容範囲でしょう。
出力結果では実際は $cant=0 となりますが、実際の値に修正しておきます。
右カーブ(2)、10番両開き分岐器左カーブ
駅前後が一直線(軌道 guide)上に無いですが、一手間加え基準点を作り配線していきます。
分岐器の先の直線を引く
カーソルB を分岐器終端付近からこの先の直線向きに設定します。
今回の場合はすぐに右曲線が始まっていますが、今後微調整可能です。
このときの点Bの座標は(-42.45, 325.20, angle=106.20) です。
補助軌道 guide3, guide_curve を引きます。
軌道 guide3 は自軌道扱いとして設定ファイルに記述することにより座標を指定して表示できるようにしています。
座標系に注意してください。
また、guide_curve は進行方向と逆向き(angle=180)です。
[guide3]
# 軌道名を変えれば同じファイルを再利用可能
file = guide.txt
absolute_coordinate = True
x = 325.20
y = 0
z = -45
angle = 106.2
color = pink
[guide_curve]
file = guide_curve.txt
absolute_coordinate = False
parent_track = guide3
origin_kilopost = 0
x = 0
y = 0
z = 0
angle = 180
color = deeppink
BveTs Map 2.02:utf-8
#【記載区間】補助曲線
#----------基本線形----------
0;
Curve.SetGauge(1.067);
Curve.SetCenter(1.067/2);
Curve.SetFunction(1);
0;
Curve.Begin(370.7);
20;
Curve.End();
曲線を引く
CurveTrack Solaver Mode3-2 を用いて以下を繋げていきます。
- R=300,TCL=25,CCL=50,C=30
- R=-370.7(分岐器)
空中写真とのずれが大きい場合は軌道 guide3 の角度(angle)を調整し再度行います。
$pt_a = 190.000000;
$pt_a +7.771180;
$cant = 0.030;
Curve.SetFunction(1);
Curve.Interpolate(0.000000,0);
$pt_a +32.771180;
Curve.Interpolate(300.000000, $cant);
$pt_a +85.563407;
Curve.Interpolate(300.000000, $cant);
$pt_a +110.563407;
Curve.Interpolate(0.000000,0);
$pt_a +119.687887;
$cant = 0;
Curve.Interpolate(0.000000,0);
$pt_a +119.687887;
Curve.Interpolate(-370.700000, $cant);
$pt_a +139.687887;
Curve.Interpolate(-370.700000, $cant);
$pt_a +139.687887;
Curve.Interpolate(0.000000,0);
ターミナルの出力結果では以下も確認できます。
2曲線間を結ぶ直線の距離 L int = 9.124480
CCL1 (R=500のCCL) = 52.792227
少し CCL1 が長いですが、許容とします。
カントも忘れずに設定しておきましょう。
最後に Karuga_2.txt に記述し、再読み込みを行います。
軌道 guide3, guide_curve は後ほど使うので残しておきましょう(画像では非表示)。
上り本線(自軌道扱い)を引く
狩留家駅は1・2番線ともに上下両方向への出発・到着が可能となっています。
そこで、上り本線も自軌道として配線します。
両開き分岐器右カーブ
設定ファイルに以下を追加します([Karuga_2]の次)。
[Karuga_1]
file = Karuga_1.txt
absolute_coordinate = True
x = 0
y = 0
z = 0
angle = 94.434
color = red
BveTs Map 2.02:utf-8
#【記載区間】狩留家駅1番線
#----------基本線形----------
0;
Curve.SetGauge(1.067);
Curve.SetCenter(1.067/2);
Curve.SetFunction(1);
0;
14;
Curve.Begin(370.7);
distance + 20;
Curve.End();
左カーブ
補助線を引く
Karuga_1 の0m地点から 4m 右側に補助線を引きます。
この線が後ほど Karuga_1 の一部となります。
# [Karuga_1]より後に記述
[guide]
file = guide.txt
absolute_coordinate = False
parent_track = Karuga_1
origin_kilopost = 0
x = 4
y = 0
z = 0
angle = 0
color = pink
曲線を引く
CurveTrack Solver Mode3-1を用いて R=800, TCL=15, CCL=15, C=16 の左曲線を作ります。
A: Karuga_1 34m地点(分岐器曲線終端)
B: guide 適当、目安は左曲線終端より先
$pt_a = 34.000000;
$pt_a +35.087230;
$cant = -0.016;
Curve.SetFunction(1);
Curve.Interpolate(0.000000,0);
$pt_a +50.087230;
Curve.Interpolate(-800.000000, $cant);
$pt_a +78.248816;
Curve.Interpolate(-800.000000, $cant);
$pt_a +93.248816;
Curve.Interpolate(0.000000,0);
CCL = 28 と大きく実際の値からずれています。
このような場合、本来は修正・調査すべきですが、空中写真とほぼ一致していることからこのまま継続します。
基本的には半径を信頼するようにしています。
出力結果を反映し、延長したものを再読み込みします。
軌道 guide は必要ないのでコメントアウトしました。
右カーブ、両開き分岐器右カーブ(合流)
軌道 Karuga_2 のときと同様に CurveTrack Solver Mode3-2 を用います。
軌道 guide_curve の半径Rを -370.7 に変更します。
軌道 Karuga_1 と guide3 (guide_curve) を
- R=500, TCL=30, CCL=55, C=22
- R=370.7
で繋げていきます。
ここで軌道 Karuga_2 は距離程が小数となっているので、繋げる基準としては使いません。
整数値の軌道 guide3, guide_curve を常に使います。
A: Karuga_1 曲線始端より手前の直線上適当な位置(10の倍数にしておくと分かりやすい)
B: guide3 始端
C: guide_curve 終端(向き注意)
Results:
L int.: 10.941503
CCL1: 45.701728
CCL2: 20.000000
startpt: (-18.813144, 190.877096)
shift from pt. α: 41.852284
$pt_a = 150.000000;
$pt_a +41.852284;
$cant = 0.022;
Curve.SetFunction(1);
Curve.Interpolate(0.000000,0);
$pt_a +71.852284;
Curve.Interpolate(500.000000, $cant);
$pt_a +117.554012;
Curve.Interpolate(500.000000, $cant);
$pt_a +147.554012;
Curve.Interpolate(0.000000,0);
$pt_a +158.495516;
$cant = 0;
Curve.Interpolate(0.000000,0);
$pt_a +158.495516;
Curve.Interpolate(370.700000, $cant);
$pt_a +178.495516;
Curve.Interpolate(370.700000, $cant);
$pt_a +178.495516;
Curve.Interpolate(0.000000,0);
CCL1 = 45 となり、今回は 10m足りませんが許容とします。
結果を反映しました。
軌道 guide3, guide_curve はコメントアウトしています。
側線
最後に側線(軌道 Karuga_1side)を作ります。
この軌道は進入することがないので他軌道扱いとできます。
8番右片開き分岐器
R=118, CCL=15 の分岐器曲線を作ります。
# [Karuga_1] の次に記述
[Karuga_1side]
file = Karuga_1side.txt
absolute_coordinate = False
parent_track = Karuga_1
origin_kilopost = 49
x = 0
y = 0
z = 0
angle = 0
color = gold
Measure ウィンドウで測定し軌道 Karuga_1 の 49m 地点から分岐させます。
ちょうど Karuga_1 の初めの両開き分岐器右カーブが終わってから 15m の地点です。
BveTs Map 2.02:utf-8
#【記載区間】狩留家駅1番線脇側線
#----------基本線形----------
0;
Curve.SetGauge(1.067);
Curve.SetCenter(1.067/2);
Curve.SetFunction(1);
0;
Curve.Begin(118);
15;
Curve.End();
左カーブ
軌道 Karuga_1side は最終的に Karuga_1 から 4m 平行移動した箇所となります。
平行な直線が必要となるときは必ず補助線を引きます。
[guide]
file = guide.txt
absolute_coordinate = False
parent_track = Karuga_1
# 平行となる箇所を指定
origin_kilopost = 150
x = 4
y = 0
z = 0
angle = 0
color = pink
今回作る曲線は全くデータがありません。
このようなときは TCL=10(側線、個人規定) としてから R を変化させ適切な値を探っています。R=160 としていることが多いです。
特に拘りがなければ曲線始点から Mode1 を使うと良いでしょう。
カントは適当にゆるめの値を設定しておきましょう。
最後に適当に延長して完成です。
軌道 Karuga_1 の右曲線よりは手前で止めておきます。
変換
generate を押下することで自軌道を Karuga_2、他を他軌道とした Mapファイルが生成されます。
Karuga_1 に切り替える際には owntrack = Karuga_1, output_path = ./1 としリロード後再実行します。
自軌道を Karuga_2 として BVE に読み込んでみました。
うまくいったようです。
歪みが気になる場合などは設定ファイルにて supplemental_cp を用いることで計算点を増やし再変換してやりましょう。
今回は地平駅のため勾配を一切設定していませんが、マップファイルに記述することで同様に読み込むことが可能です。
しかしながら、基準点を切り替えながら勾配を設定するのは高さ面での誤差が生じやすくなると考え Tsutsuji で配線する際には書かないこととしています。
必要であれば出力が終わってから個別にマップファイルに手を加えています。
このように空中写真を用いることで路線製作をより効率的に進めることができます。
参考にしていただければ幸いです。
また、この場をお借りして『Tsutsuji trackcomputer』開発者である粉山葵様にお礼申し上げます。
ご覧いただきありがとうございました。