前記事では、OpenTripPlannerとQGISプラグインにより、GTFSに含まれるバスルートや停留所の簡単表示を試みたが、到達圏解析(isochrone)をしようとすると、OTPを1系に落とさなくてはならなかったり(現在のOTPバージョン2.9)なかなか厄介なハマり点が出てきたため、もう一つの解析エンジンConveyal社のR5を使ってみる。
1.必要ツール
1. Python(推奨:3.11系)
Python公式サイト:
Python Downloads
初めてPythonインストールなら、インストール時に Add Python to PATH にチェックを入れる。
※Windowsなら、直接3.11.9の実行型インストーラダウンロードでもよい
Python 3.11.9 Windows installer (64-bit)
※2つ以上のバージョンを共存させるなら、Add Python to PATH を入れずに c:\Python311 などのフォルダを作成し、そこにインストールする。(R5実行時に指定)
コマンドプロンプトで確認。 python --version
※D:ドライブにPython311フォルダを作成し、そこにインストールした場合の確認。
D:\Python311\python --version
2. Java(推奨:Java 17 LTS)
R5 は内部で Java を利用して動作する。
コマンドプロンプトで確認。 java -version
3. r5py 関連ライブラリ
コマンドプロンプトで以下を実行する。
pip install r5py geopandas pyogrio
※使用するPythonを明示したい場合は、
Ⅾ:\Python311\Scripts\pip install r5py geopandas pyogrio など
2. R5の作業フォルダ整備
作業用フォルダを (ここでは外部SSDに r5フォルダ作成)用意
(例えば)D:¥r5
この下に、kiyobusなどのフォルダを作成し、GTFSとOSMデータを配置。
同じフォルダに、出力用 output フォルダと キャッシュ用 cache フォルダなども作成しておくとよい。
3.解析用プログラムテンプレート
ファイル位置や解析したい場所情報、出力先などを決める必要がある。
make_iso.py ファイルの冒頭に下記テンプレートを配置しておくとよい(わかりやすい)。
- OSMファイル
- GTFSファイル
- 目的地(清瀬駅など)
- 出発地点
- 出発時刻
- 出力先
# ============================================
# R5 到達時間解析テンプレート
# きよバスgtfsである場所(Origin01)から清瀬駅まで
# Origin01の座標は、QGISとQGIS-GOから取得
# ============================================
import datetime
import geopandas as gpd
import r5py
from shapely.geometry import Point
# ============================================
# OSM / GTFS
# ============================================
OSM_FILE = r"D:/r5/kiyobus/kanto-260511.osm.pbf"
GTFS_FILE = r"D:/r5/kiyobus/kiyobus.gtfs.zip"
# ============================================
# 出力先
# ============================================
OUTPUT_FILE = r"D:/r5/kiyobus/output/travel_time.gpkg"
# ============================================
# 目的地(清瀬駅)
# ============================================
DEST_NAME = "KiyoseStation"
DEST_LON = 139.5265
DEST_LAT = 35.7857
# ============================================
# 出発地点
# ============================================
ORIGIN_NAME = "Origin01"
ORIGIN_LON = 139.497806
ORIGIN_LAT = 35.775772
# ============================================
# 出発時刻
# ============================================
DEPARTURE_YEAR = 2026
DEPARTURE_MONTH = 5
DEPARTURE_DAY = 19
DEPARTURE_HOUR = 8
DEPARTURE_MINUTE = 0
# ============================================
# 条件
# ============================================
MAX_TRAVEL_MINUTES = 60
TRANSPORT_MODES = ["WALK", "TRANSIT"]
# ============================================
# 歩行速度(m/s)
# ============================================
WALK_SPEED = 1.0
# ============================================
# R5 ネットワーク生成(冒頭に続く本体)
# ============================================
print("R5 network 作成中...")
network = r5py.TransportNetwork(
OSM_FILE,
[GTFS_FILE]
)
print("R5 network 作成完了")
# ============================================
# 目的地
# ============================================
destinations = gpd.GeoDataFrame(
{
"id": [DEST_NAME]
},
geometry=[
Point(DEST_LON, DEST_LAT)
],
crs="EPSG:4326"
)
# ============================================
# 出発地点
# ============================================
origins = gpd.GeoDataFrame(
{
"id": [ORIGIN_NAME]
},
geometry=[
Point(ORIGIN_LON, ORIGIN_LAT)
],
crs="EPSG:4326"
)
# ============================================
# 到達時間計算
# ============================================
print("到達時間計算中...")
travel_times = r5py.TravelTimeMatrix(
transport_network=network,
origins=origins,
destinations=destinations,
transport_modes=TRANSPORT_MODES,
departure=datetime.datetime(
DEPARTURE_YEAR,
DEPARTURE_MONTH,
DEPARTURE_DAY,
DEPARTURE_HOUR,
DEPARTURE_MINUTE
),
max_time=datetime.timedelta(
minutes=MAX_TRAVEL_MINUTES
)
)
# ============================================
# 結果表示
# ============================================
print(travel_times)
# ============================================
# 保存
# ============================================
travel_times.to_file(
OUTPUT_FILE,
driver="GPKG"
)
origins.to_file(
r"D:/r5/kiyobus/output/origins.gpkg",
driver="GPKG"
)
destinations.to_file(
r"D:/r5/kiyobus/output/destinations.gpkg",
driver="GPKG"
)
origins.to_file(
r"D:/r5/kiyobus/output/origins.gpkg",
driver="GPKG"
)
print("===================================")
print("出力完了")
print(OUTPUT_FILE)
print("===================================")
4.解析実行例
Pythonの実行
D:\Python311\python D:\r5\kiyobus\make_iso.py
※javaが見つからないなどのエラーが出た場合は、set JAVA_HOME=C:\java などで
一時的にJAVA_HOME の場所を設定
実行成功すると
出力完了
D:/r5/kiyobus/output/travel_time.gpkg
などで終了する。
主な解析例
- 公共交通到達圏(Isochrone)
- 時間帯別到達圏比較
- 徒歩+公共交通解析
- 到達人口分析
- 医療・避難施設アクセシビリティ解析
など。