LoginSignup
5
4

More than 3 years have passed since last update.

JupyterにGTFS Realtimeの位置情報をプロットしたい!(バルーン付き)

Posted at

はじめに

バスの現在位置は、Google Mapからでも見られる時代ですが、自分の手でマッピングしてみましょう。pythonにfoliumというWeb地図表示プラグインを用いて表示してみます。
地図のアイコンはクリッカブルで、詳細な情報を表示することも可能です。

実装

realtimebus.py3
from google.transit import gtfs_realtime_pb2
import urllib.request, urllib.error
import folium
import pandas as pd

#GTFS-RTの公開されているURL(宇野バスさん)
url ='http://www3.unobus.co.jp/GTFS/GTFS_RT-VP.bin'
#カラム名の宣言
list_df = pd.DataFrame(columns=['id' , 'vehicle_id', 'trip_id','vehicle_timestamp','longitude','latitude','occupancy_status'])
feed = gtfs_realtime_pb2.FeedMessage()

#データダウンロードとフォーマット変換
with urllib.request.urlopen(url) as res: #データダウンロード
    feed.ParseFromString(res.read()) #プロトコルバッファをDeserialize
    for entity in feed.entity:
        tmp_se = pd.Series( [
              entity.id,                         #車両ID
              entity.vehicle.vehicle.id,         #車両ナンバー
              entity.vehicle.trip.trip_id,       #路線番号?
              entity.vehicle.timestamp,          #車両時刻
              entity.vehicle.position.longitude, #車両緯度
              entity.vehicle.position.latitude,  #車両経度
              entity.vehicle.occupancy_status   #混雑度
        ], index=list_df.columns )
        list_df = list_df.append( tmp_se, ignore_index=True )

#地図の中心地点を算出
average_pos = list_df.mean()
# 中心座標付近の地図を作成
m = folium.Map(location=[average_pos['latitude'], average_pos['longitude']], zoom_start=11)
# 各バスをプロット(色は青)
list_df.apply(lambda row:
             folium.Marker(
                 location=[row['latitude'], row['longitude']],
                 popup='<table border="1"><tr><th>occupancy_status</th></tr><tr><td>'
                 +str(row['occupancy_status'])
                 +'</td></tr></table>',
                 icon=folium.Icon(color='blue',icon='bus', prefix='fa')
             ).add_to(m), axis=1)
m

結果

ダウンロードされたリアルタイム位置情報が地図上にプロットされました

スクリーンショット 2020-08-08 22.43.47.png

実行したタイミングは22時半過ぎてますが、まだバス動いているのですね。。。

5
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
4