make_gtfsを使って仮のGTFS(時刻表)を生成する (山陽電鉄の一部)
実際の発車時刻とは異なるが、1時間あたりの本数はなるべく合わせた時刻表。
駅の緯度経度や線路(ルート)形状の情報は、 国土数値情報 鉄道データを利用。
指定したbounding box内の駅のみを対象とする。
uv run python withinbbox.py 134.963436,34.623885,135.170288,34.738791 N02-24_RailroadSection.shp
grep -e '本線.*山陽電気鉄道' N02-24_RailroadSection.134.963436,34.623885,135.170288,34.738791.geojson \
| sed -e '1i {"type":"FeatureCollection","features":[' -e '$s/,$/]}/' >sanden.geojson
uv run python linemerge.py sanden.geojson
sed -e '1i {"type":"Feature","properties":{"shape_id":"shp1"},"geometry":' -e '$a }' sanden.linemerge.geojson >shapes.geojson1本のLineStringにマージしてshapes.geojsonを作成。 (linemerge.pyは https://gist.github.com/deton/3508b7a291b81d1f9bbedad8ea26dccf と同じ)
NAVITIMEで駅の時刻表を見て(列車種別で絞り込みしつつ)、 各曜日・各時間帯・上り/下りの本数を調べて記入。
1時間あたりの本数が同じ時間が続く場合は1行にまとめられる。
(とりあえず、列車種別:普通、平日を対象に手作業)
駅のgeometryとして、midpointの緯度経度に変換
uv run python withinbbox.py 134.963436,34.623885,135.170288,34.738791 N02-24_Station.shp
uv run python midpoint.py N02-24_Station.134.963436,34.623885,135.170288,34.738791.geojsonとりあえず、重複するstop_idや駅名は手で削除。
grep -e '本線.*山陽電気鉄道' N02-24_Station.134.963436,34.623885,135.170288,34.738791.midpoint.geojson | sed -e 's/,$//' > stops.ndjson
vim stops.ndjson(参考:同名駅のグループに属すものを検索。 緯度経度が同じなら、N02_005gの値をstop_idとして使う。)
grep -v 'N02_005c": "\([^"]*\)", "N02_005g": "\1"' N02-24_Station.134.963436,34.623885,135.170288,34.738791.midpoint.geojsonecho 'stop_id,stop_name,stop_lon,stop_lat,zone_id' > stops.csv
jq -r '[.properties.N02_005c,.properties.N02_005,.geometry.coordinates[0],.geometry.coordinates[1],.properties.N02_005c]|@csv' stops.ndjson >>stops.csvuv run make_gtfs data/sanden_local output/sanden_local.zip運賃表PDFを見て、下記の内容のfare.csvを作成。
price,min_km,max_km
170,0,2
200,2,4
250,4,7
320,7,10
390,10,13
470,13,17
540,17,21
600,21,25
uv run python make_gtfs_fare.py output/sanden_local.zip fare.csv生成されるfare_rules.txtとfare_attributes.txtをGTFS zipに含める。