バス停マッピング

投稿者: | 2017年10月10日

かなり間が空いてしまいましたが、一ヶ月ほど前からマッピング活動を再開しました。
現在は、主にバス停のマッピングを中心に行っていますが、ある程度手順が確立できたので整理しておきます。

バス停をマッピングする際の課題:

  • コンビニや交差点情報はある程度の位置が特定できれば、航空写真等で地図上の位置が特定できるので、走行中にGPS情報を使ってwaypointを記録しておけば、後は机上で正確にマッピングできる。
  • 以前の記事に書いたように、アクションカム等で撮影した写真・動画やMapillary上の画像を使ってマッピングも可能だが、バス停を検出するのは結構面倒(個人的意見:これで挫折した)。
  • 特に単純にMapillaryの画像だけで探すのは、ネットワーク性能の問題もあり、かなり苦痛。

で、あまり真面目に取り組んでなかったのですが、SOTMで国土交通省が公開しているバス停情報を使うというヒントを頂いたので、以下の流れでマッピングを行うことにしました。

  1. マッピング候補のバス停位置情報一覧を作成しスマホに入れておく
  2. スマホを参照しつつ、実走してストリートビュー画像を撮影
  3. 撮影した画像を処理を用いてマッピング

それぞれの手順を、備忘録的に以下にまとめておきます。

マッピング候補のバス停情報の準備・表示

試しているスマホアプリは「MAPS.ME」と「Galileo」です。いずれもKML形式のウェイポイント情報をブックマークとして読み込めます。参考とするバス停情報は国土数値情報ダウンロードサービスを使用し、現状は周囲100m以内にバス停(highway=bus_stop)がなければ「未マッピング」と見なしてKML形式のブックマークを作成しています。なお、shapeファイルがよくわかっていないので、一旦GPXに変換してから加工しています(実は直接扱うためのperl/Pythonライブラリとかあるのかも?)。

MAPS.MEだとこんな感じで表示されます。アプリの比較はまた機会をあらためて。

【覚え書き】Shape file(*.shp) をGPXに変換する方法

  • QGISで”Layer”→”Add Vector Layer”で *.shpファイル選択
  • Layersから読み込んだレイヤーを右クリック→”Save As”でGPX形式出力

※他にも方法がもっと簡単な方法があるかもしれないのですが、1度やればいいのであまり深追いしてません。

【TODO】
こちらのサイトでOSMのバス停カバレッジ情報が公開されているので、将来的にはこのデータを利用。

ストリートビュー画像の撮影と加工

撮影方法は基本的に以前の記事と一緒ですが、現状はタイムラプス間隔を「2秒」から「1秒」にしています。意外とバス停は目立ちにくいところに立ってたりするんですよね。

また、こちらの記事で紹介したスクリプトも若干更新しました。画像とGPSトラックデータの時刻ずれ補正が、少し簡単にできるようになりました。

1) 地図上の正確な位置を特定できる画像を選択

ここでは、Linux上で画像をmirage、GPSトラックをgpspruneで表示しています。

2) その画像のシーケンス番号とGPSトラック上での時刻を指定して、より正確な位置情報を付加

サンプルソース(PathやIntervalは適当に変更してください):

#!/bin/bash

TOOL_PATH=/home/osm/work/mapillary_tools/python

if [ $# -ne 5 ]
then
echo “Usage: correlate.sh <track_file> <path_to_photos> <photo_seq> <YYYY-MM-DD> <hh:mm:ss>”
exit
fi

PHOTO_PATH=$2
INTERVAL=1
TRACK_FILE=$1
OFFSET=$3
BASE_DATE=$4
BASE_TIME=$5

python ${TOOL_PATH}/add_fix_dates.py ${PHOTO_PATH}/ “${BASE_DATE} ${BASE_TIME}” ${INTERVAL} ${OFFSET}
exiftool -overwrite_original -geotag ${TRACK_FILE} ${PHOTO_PATH}/
python ${TOOL_PATH}/interpolate_direction.py ${PHOTO_PATH}
python ${TOOL_PATH}/remove_duplicates.py -d 10 -p 80 -a 40 -t 70 ${PHOTO_PATH}/ trash/

使用例:

$ ./correlate.sh
Usage: correlate.sh <track_file> <path_to_photos> <photo_seq> <YYYY-MM-DD> <hh:mm:ss>
$ ./correlate.sh Tracks/b20171008_2.gpx work/20171008_2 21 2017-10-08 15:29:36

なお、本対応にあたりMapillary提供のツールadd_fix_dates.pyを若干拡張しています。修正版はgithubにアップしてあります。

git clone https://github.com/charilab/mapillary_tools.git

OSMのデータ編集

上記で作成した画像群と未マッピングデータをJOSM上に表示することで、狙ってバス停情報を探すことができます。必要ならMapillary上のデータも重ね合わせてもいいでしょう。