U1201 早稲田大学創造理工学部建築学科卒業論文 指導教授 渡辺仁史
スマートフォンを用いた行動追跡調査手法の開発 Sensing technology of human behavior by smartphone. 近江 俊祐
Department of Architecture, School of Science and Engineering, Waseda University
はじめに
0
スマートフォンを用いた行動追跡調査手法の開発
はじめに
0
0 はじめに 2009 年 8 月 iPhone3GS を手に入れた。 3 年以上の日々をスマートフォンと過ごしているわけだが、それ以前の日々を思い出 すことは難しい。 携帯電話がなかった頃を思い出せないように。 iPhone によって、情報へのアクセスがかつてないほど容易になった。 情報革命は日進月歩で進んでいることは記憶を振り返ると確認できる。 建築空間よりも身近にあるスマートフォンを用いれば、空間をセンシングすることも 可能になるだろう。 推測ではなく確信に近い思いを持って、この研究をしようと決めた。 The future is everywhre around you. 身の回りに未来は溢れている。
2
スマートフォンを用いた行動追跡調査手法の開発
目次
目次 はじめに
2
第1章 研究背景
5
1.1 Human Probes
6
1.1.1 Human Probes とは
6
1.1.2 Human Probes の活用
7
1.2 行動追跡調査
8
1.3 スマートフォンの普及
9
1.4 オープンソースの時代
10
1.1.2 Human Probes の活用
10
1.1.2 Human Probes の活用
11
1.5 ビッグデータの可視化
第2章 研究概要
12 13
2.1 研究目的
14
2.2 既往研究
15
2.3 本研究の位置付け
16
第3章 研究方法
17
3.1 研究フロー
18
3.2 行動追跡調査システム
19
3.2.1 システム概要 3.3 スマートフォンを使ったセンシングシステム 3.3.1 システム概要 3.4 可視化システム
19 21 21 23
3.4.1 システム概要
23
3.4.2 Processing を用いた可視化
24
第4章 調査 : 実証実験
25
4.1 実験概要
26
4.2 実験方法
27
第5章 検証・結果
30
5.1 システム検証
31
5.2 移動経路と速度の 2D 描写
32
5.2.1 概要
32
5.2.2 吉祥寺
33
5.2.3 渋谷
36
3
スマートフォンを用いた行動追跡調査手法の開発
5.2.4 銀座 5.3 区域ごとの平均速度の 2D 描写
目次
39 42
5.3.1 概要
42
5.3.2 吉祥寺
43
5.3.3 渋谷
44
5.3.4 銀座
45
5.4 移動経路の 3D 描写
49
5.4.1 概要
49
5.4.2 吉祥寺
50
5.4.3 渋谷
52
5.4.4 銀座
54
第6章 分析・考察
56
6.1 可視化されたイメージからの分析
57
6.2 可視化システムの考察
60
第7章 まとめ
61
7.1 本研究のまとめ
62
7.2 課題
63
7.3 展望
64
謝辞
65
参考文献
66
資料編
67
4
研究背景
1
スマートフォンを用いた行動追跡調査手法の開発
研究背景
1
1.1 Human Probes 1.1.1 Human Probes とは 外部空間における人間の歩行行動を記録するには、たとえば駅などの群集 の映像を撮影しそれを平面座標へ変換する方法や、商業施設などでは対象者 の経路を目視で図面に記録していく方法などがある。昨今ではセンサ技術の 進歩により、外部空間では GPS により歩行行動を追尾することが可能となり、 内部空間では赤外線で人間の入退出を感知したり、人間もしくは空間にタグ を設置しリーダでタグを読み込むことでその移動をトレースする技術なども 登場してきた。こうした中、空間ではなく人間にセンサを持たせることで人 間自身がセンサノードとなり動的にセンシングを行う Human Probe の概念 が登場した。 HumanProbes とは " 近年、センサ技術や MEMS の発達により無線インタフェースを備え、人が 携帯したり、装着できるサイズのセンサデバイスが登場し始めています。セ ンサの種類としては、ゲーム機や携帯電話などの小型デバイスに内蔵される もの、心拍センサのように体に装着し生体情報を収集するもの、GPS データ を取得し位置情報に関連つけたものなど、多種多様なセンサが開発され車に 搭載されるだけでなく『人がセンサを持ち歩く』ことが可能な時代になった *1) ヒューマンプローブ研 究会 http://ieicehpb.info/index. php?%A5%D2%A5%E5% A1%BC%A5%DE%A5%F 3%A5%D7%A5%ED%A1 %BC%A5%D6%B8%A6% B5%E6%B2%F1%A1%A 1Human%20Probes%20 %28HPB%29
といえます。" (*1) 様々な携帯端末の開発や情報技術の発展に伴い、かつてでは不可能だった 細かな情報の収集が可能となっている。全てのスマートフォンには GPS が搭 載され、これによって位置情報が取得できる。また多くのスマートフォンに 搭載されている加速度センサーを用いれば、生活中での行動をセンシングす ることも可能である。端末を持つ全ての人がセンサーとして利用できるとい うことは、より大規模でより詳細なモデル化が可能であるということである。 建築の分野で特に期待できるのは、街での人の行動特性の分析、建物内での 人の行動パターン分析などである。かつては人間が観察し収集しなければい けなかったようなデータをスマートフォンなどの情報端末を持っているだけ でデータを収集することが可能になる。大規模なデータの集積は、より正確 でより詳細な分析を可能とするものである。
6
スマートフォンを用いた行動追跡調査手法の開発
研究背景
1
1.1.2 HumanProbes の活用 HumanProbes を用いて、空間における人間の行動からその人の状態を予 測することにより以下の 3 つのようなことが可能になる。 【空間における行動のモニタリング】 各種センサなどを用い、人間の位置、速度、加速度のモニタリングを行う。 【行動と人間の状態との関係モデル】 行動の変化から、心理、意志など人間の状態を予測するモデルを構築する。 【状態に合わせたサービスの提供システム】 行動より状態を予測し、携帯電話などを用いて状態に合わせた的確なサービ スの提供を行う。 このような技術を用いることで、人の行動のより細かい分析や人の行動に よって変化する空間といったものが可能になる。
7
スマートフォンを用いた行動追跡調査手法の開発
研究背景
1
1.2 行動追跡調査の手法
ある空間における人間の行動特性を把握するために、様々な手法で行動追 跡調査が行われてきた。追跡調査の手法として、大まかにまとめる以下の 4 つのようにまとめられる。 1. 人間による追跡 2. 映像を用いた追跡 3. 空間にセンサー設置した追跡 4. 人にセンサーを設置した追跡 また、それぞれの手法の特徴は図 1.4-1 のように表される。 様々手法があり、それぞれの目的にあわせた調査方法が選択されている。
広い
調査対象空間
人間による追跡
人にセンサーを設置した追跡
高い
低い
データ精度
空間にセンサー設置した追跡
映像を用いた追跡
狭い 図 1.4-1
8
スマートフォンを用いた行動追跡調査手法の開発
研究背景
1
1.3 スマートフォンの普及
スマートフォンには GPS や各種センサーが搭載され、パソコンの機能をベー スに作られた多機能携帯電話である。 それぞれの端末がオペレーションシステム (OS) を搭載しているが、OS の 種類は代表的なもので数種類ある。 ・Android *1) オープンソース 章 1-3 にて詳説する。
米 Google 社が開発した OS。オープンソース (*1) が特徴の OS であり。 ・iOS 米 Apple 社が開発した OS。Apple 社の Mac OS X をベースとした OS であり、 Apple 社の製品に搭載されている。 ・Windows Phone 米 Microsoft 社が開発した OS。Android、iOS より後発の OS である。 ・BlackBerry OS 加 RIM 社が開発した OS。RIM 社が販売する BlackBerry 端末に搭載されてい る OS であり、スマートフォン OS の先駆けとなった。 これ以外にも様々な OS があるが、現在主流である OS はこの 4 つである。 日本国内における、スマートフォン普及率は 2012 年 7 月の推定値 18.0% で
*2) 日経 BP コンサルティ ング社調べ 2012 年 7 月 25 日 http://consult. nikkeibp.co.jp/consult/ news/2012/0726sp/
ある。(*2) まだ、携帯電話端末を持っている人の中でも多数とは言えない現 状であるが、今後更なる普及が期待されている。 2011 年度の出荷台数比率ではすでに 55.8% がスマートフォン ( 図 1.2-1) で あり、過半数を占めている。全体の比率では 2014 年度末には 50% を超える と予測されている。( 図 1.2-2)
図 1.2-1 スマートフォン出荷台数の推移・予測
図 1.2-2 スマートフォン契約者集の推移・予測
出典 ) MM 総研調べ 2012 年 3 月 13 日 http://www.m2ri.jp/newsreleases/main. php?id=010120120313500
出典 ) MM 総研調べ 2012 年 3 月 13 日 http://www.m2ri.jp/newsreleases/main. php?id=010120120313500
9
スマートフォンを用いた行動追跡調査手法の開発
研究背景
1
1.4 オープンソースの時代 1.4.1 オープンソースとは オープンソースソフトウェアを促進することを目的とする組織である Open *1) Open Source Group Japan http://opensource.jp/
Source Initiative(*1) は、オープンソース・ライセンスの要件として、以下の ような定義 "The Open Source Definition" を掲げている。 1. 自由な再頒布ができること 2. ソースコードを入手できること 3. 派生物が存在でき、派生物に同じライセンスを適用できること 4. 差分情報の配布を認める場合には、同一性の保持を要求してもかまわない 5. 個人やグループを差別しないこと 6. 適用領域に基づいた差別をしないこと 7. 再配布において追加ライセンスを必要としないこと 8. 特定製品に依存しないこと 9. 同じ媒体で配布される他のソフトウェアを制限しないこと 10. 技術的な中立を保っていること 狭義では上記のような細かな定義がされているが、一般的に使われる言葉 の意味としては「全ての人が、いかなる隔たりなく、アクセスでき、再利用 できる」といった意味である。
10
スマートフォンを用いた行動追跡調査手法の開発
研究背景
1
1.4.2 オープンソースの歴史 オープンソースは 1970 年代から,ソースコードをオープンにしたフリー ソフトを BBS などの通信を利用して配布したり,実験ネットワークとして始 まったインターネットにおいて大学,研究機関の成果のソフトウェアのソー スコードを公開する流れから始まっている。 現在では、オープンソースによる製品開発・ビジネスモデルはコンピュー タ業界だけでなく様々な分野で、非営利組織、営利企業、国・自治体の議会・ 行政機関の連携により普及が進行し、オープンなテクノロジーによる製品開 発・ビジネスモデルへの変革・転換が進行中である。2012 年現在では、世 界の多くの国において、多種多様な分野でオープンソースで開発されて使用 している。 オープンソースの代表例として挙げられるのは、"Linux" である。Linux は ,1991 年にフィンランドのリーナス・トーバルズが開発した OS である。 オープンソースと公開されたことにより、世界中のプログラマにより現在も 開発が続けられている。オープンな環境で開発されることにより、かつての 製品のようなコストをかけることなく開発が可能になり、ユーザーはその恩 恵を受けることが可能となった。オープンソースによる開発は、ユーザーに とって大きな恩恵があることが Linux によって示された。 また、Google が開発したスマートフォン OS"Android" はオープンソースの典 型の一つとして知られている。
11
スマートフォンを用いた行動追跡調査手法の開発
研究背景
1
1.5 ビッグデータの可視化
ビッグデータ (Big Data) とは、単に量が多いだけでなく、様々な種類・形 式が含まれるデータであり、さらに日々膨大に生成・記録される時系列性・ リアルタイム性のあるようなデータのことである。今までは管理しきれない ため見過ごされてきたが、そのようなデータ群を記録・保管して即座に解析 することで、新たな仕組みやシステムを生み出すことができるとして期待さ れている。 *1) Flickr( フリッカー ) 個人で撮った写真をイン ターネット上で共有する サイト。全世界で 5000 万人以上のユーザーをも つ。
例として、図 1.5-1 がある。Flickr(*1) に投稿された写真データを元に地図 上に、観光客と地元住民が訪れる場所を可視化したものである。このように データを活用することにより人の行動を可視化することができる。
図 1.5-1
12
研究概要
2
スマートフォンを用いた行動追跡調査手法の開発
研究概要
2
2.1 研究目的
本研究では、スマートフォンを用いた行動追跡調査の手法を開発し、人の行動の分析 を可能とするシステムを構築することを目的とする。
センシング
データ収集 HumanProbes
可視化情報の提供 可視化 システム
14
スマートフォンを用いた行動追跡調査手法の開発
研究概要
2
2.2 既往研究
文 1) 大内一成、土井美和 子:加速度と音で日々の 生活行動を認識する
● HumanProdes を用いた行動解析に関する既往研究
*1) 行動・体験のデジタル データとしての記録
行っている。また、松浦ら ( 文 2) は、スマートフォンに搭載されているセンサーを用いて
文 2) 松浦寛、西山裕之: 高機能携帯電話を用いた ライフログ収集手法の提 案及び状況推測に関する 研究 文 3) 渡辺 仁史、池原義郎、 中村良三、吉田克之、泉 千佳子:空間における行 動特性の研究 : その 1・行 動の構造のマトリックス 表現
大内ら ( 文 1) は携帯電話に搭載されている加速度センサーを用いて生活行動の分析を ライフログ (*1) の取得に関する研究を行っている。 ●行動追跡調査に関する既往研究 行動追跡調査の手法として、渡辺ら ( 文 3) は追跡による行動軌跡からマトリックスを用 いて人の行動特性を分析した。また、限定した空間での追跡調査は数多く行われている。 本研究では、追跡からマトリックスによる可視化までを自動化するシステムを開発する ことによって調査に必要なコストを大幅に下げることを目標とする。
15
スマートフォンを用いた行動追跡調査手法の開発
研究概要
2
2.3 本研究の位置付け
従来の手法ではなく HumanProbes を用いることによって、大規模なデータを低コス トかつ高精度で収集することを可能とする。また、プログラミングを用いることによっ て行動調査の可視化を様々な形で瞬時に表示することが可能になる。以上 2 つの観点か ら本研究では新たな行動追跡調査の手法を検討する。( 図 2.3-1)
行動追跡調査 HumanProbes 大容量 高精度
本研究
低コスト リアルタイム
図 2.3-1 研究の位置付け
16
研究方法
3
スマートフォンを用いた行動追跡調査手法の開発
研究方法
3
3.1 研究フロー
本研究の流れは図 3.1-1 に示す。
システム関連
行動追跡調査
スマートフォン市場の動向 web テクノロジー プログラミング言語の傾向
従来の調査手法 マッピング手法 背景・既往研究
システム設計・開発
ユーザーサイドの設計 サーバーサイドの設計 可視化方法の検討
検証実験
行動データの収集
システム検証
データ精度の検証 改良点の検討
分析・考察
可視化されたデータの考察 可視化方法の検討
展望
システムの使用方法の提案
図 3.1-1 研究フロー
18
スマートフォンを用いた行動追跡調査手法の開発
研究方法
3
3.2 行動追跡調査システム 3.2.1 システム概要 本研究で開発したシステムの概要は以下の図 3.2.1-1 である。 また本システムの詳細な構成は図 3.2.1-2 の通りであり、次項以降でその詳細に関し て説明する。なおソースコードは資料編に記す。 Android、iPhone のどちらでもアクセス可能なように、HTML5 を用いて位置情報・ *1) ネイティブアプリ 各 OS に合わせて作られた アプリケーション。他の OS では使用できないた。
加速度など端末の情報を取得できるシステムを構築した。ネイティブアプリ (*1) は進 歩中の HTML5 に比べて実行速度速いが、それぞれの OS ごとに作成しなければならず、 さらにそれをユーザーがダウンロードして使用するという煩わしさがある。そこで、実 行速度に劣るが、両 OS からブラウザで手軽にアクセス可能で、今後多くの人に利用し てもらうため、HTML5 を採用した。
ユーザーサイド
センシングシステム
スマートフォンを持った個人
建築家・研究者・学生など
サイトにアクセス
サイトにアクセス
HTML JavaScript
リアルタイムの可視化情報
HTML JavaScript
データを送信 ( 位置 , 加速度 )
可視化情報の要求
Google Mpas API
PHP
データの送信 データの取得
データを保存
可視化情報の提供
Processing 取得データを可視化
データを呼出
MySQL 各個人の歩行データを蓄積
サーバーサイド 図 3.2.1-1 システム概要
【HTML】 web 上のドキュメントを記述するための言語。HTML5 は HTML の 5 回目の改定版であ り、web アプリケーションやマルチメディア要素が新たに加わった。 【JavaScript】 オブジェクト指向プログラミング言語。高機能なウェブアプリケーション開発言語の一 つとして注目を集めている。 【PHP】 サーバーサイド・スクリプト言語として広く利用されている。大規模な開発にも広く用 いられている。
19
スマートフォンを用いた行動追跡調査手法の開発
研究方法
3
【MySQL】 米オラクル社が開発するリレーショナルデータベースを管理、運用するシステム。世界 でもっとも普及しているオープンソース・データベースである。 【Google Maps API】 米グーグル社が提供しているアプリケーション。API を利用することによって、様々な 形式で Google Maps が利用できる。 【Processing】 電子アートとビジュアルデザインのための開発されたプログラミング言語。広汎な利用 のために単純化されている。
データをサーバに送信
図 3.2.1-2 システム構成
ユーザーログイン処理
データの処理・保存
出力・検索処理 検索画面の設定 GoogleMap に出力
トップ画面 ページレイアウト
図 3.2.1-3 システム構成
20
スマートフォンを用いた行動追跡調査手法の開発
研究方法
3
3.3 スマートフォンを使ったセンシングシステム 3.3.1 システム概要 まずユーザーは図 3.3.1-1 に示すログイン画面にアクセスし、ログインすると図 3.3.1-2 の画面が表示される。ユーザーがこの画面にアクセスするとスマートフォンか らユーザーのスマートフォンの位置情報、加速度がサーバーに送信される仕組みになっ ている。このサイトは、HTML5 と JavaScript をベースとしており、指定された時間間 隔で定期的にデータが送信される仕組みなっている。 *1) 資料編 P68-69
*2) 資料編 P70
データの送信を行っているプログラム (*1) は、JavaScript で記述されている。 サーバーに送られたデータは PHP を介して MySQL( 図 3.3.1-3)(*2) に蓄積され、必要に 応じてデータの参照が可能な形となっている。携帯から送信されたデータは、ID, 緯度 , 経度 , 加速度 (3 方向 ), 時刻であるが、位置情報から速度を算出したデータも保存される。
図 3.3.1-1 ログイン画面
図 3.3.1-2 トップ画面
21
スマートフォンを用いた行動追跡調査手法の開発
研究方法
3
図 3.3.1-3 MySQL 画面
22
スマートフォンを用いた行動追跡調査手法の開発
研究方法
3
3.4 可視化システム 3.4.1 システム概要 図 3.2.1-1 で示したシステムの可視化システムについて解説する。 ユーザーは検索画面 ( 図 3.4.1-1) にアクセスし、検索条件を指定する。検索条件は 「検索ユーザー」:自分のみ、すべてのユーザ 「現在時刻かどうか」:現在時刻、時刻を指定 「時刻指定」:年、月、日、時、分 「検索時間範囲 ( 分 )」:すべて、10 分、20 分、30 分 「検索件数」:すべて、最新の 1 件のみ 「出力媒体」:googlemap で見る、csv で出力する *1) 資料編 P75-76 *2) 資料編 P71-72
GoogleMap にデータを表示する方法 ( 図 3.4.1-2)(*1) と csv ファイルに出力する方法 (*2) が選択できる。csv ファイルを Processing にて読み込むことにより、可視化できる。
図 3.4.1-1 検索画面
図 3.4.1-2) GoogleMap
23
スマートフォンを用いた行動追跡調査手法の開発
研究方法
3
3.4.2 Processing を用いた可視化 csv で出力されたデータを Processing に読み込むことによってデータを可視化する。 csv には、[ID][ 緯度 ][ 経度 ][ 速度 ][x 加速度 ][y 加速度 ][z 加速度 ][ 時刻 ] のデータが記 載されている。 *1) GoogleMaps から静的 な地図画像を読み込むた めの API
緯 度 経 度 の 中 心 か ら、StaticMapsAPI(*1) を 経 由 し て 100px × 100px の 地 図 画 像 を読み込み、読み込んだ画像を貼り合わせることによって、指定したサイズの地図画 像を用意する。緯度経度から変換することによって、その地図上の xy 座標を用意す ることによって、可視化された画像を作成する。地図画像の読み込み、座標変換は
*2) http://googlemapper. pt.vu/ *3) 資料編 P78-79
GoogleMapper for Processing(*2) という外部ライブラリによって行われている。 今回用意した可視化の手法は、 1. 移動経路と速度の 2D 描写 (*3) 2. 区域ごとの平均速度の 2D 描写 (*4)
*4) 資料編 P80-82
3. 移動経路の 3D 描写 (*5)
*5) 資料編 P83-84
の 3 種類である。可視化ごとの詳しい処理は、5 章の各節で解説する。
24
調査:実証実験
4
スマートフォンを用いた行動追跡調査手法の開発
調査 : 実証実験
4
4.1 実験概要
被験者自身のスマートフォンでセンシングシステムを利用してもらい街を歩行するこ とでデータを収集することを目的とした。実験終了後にアンケート調査を行い、各個人 の属性も収集した。 ●実験日程 日程 2012/09/30 2012/10/05 2012/10/07 2012/10/14 2012/10/17 2012/10/18 2012/10/19
時間 天候 13:00〜16:30 雨のち晴れ 13:00〜16:30 曇り 13:00〜16:30 晴れ時々曇り 13:00〜16:30 曇り時々雨 13:00〜16:30 曇り 13:00〜16:30 雨 13:00〜16:30 曇り
気温 25.7°C 27.1°C 20.9°C 19.5°C 23.4°C 20.6°C 20.1°C
●実験場所 都内 3 ヶ所 ( 吉祥寺 , 渋谷 , 銀座 ) ●被験者 10 代〜 30 代の男女 19 名を被験者とした。( 表 4.1-1) 表 4.1-1 被験者リスト
被験者ID 09301 09302 09303 10051 10052 10053 10071 10072 10073 10074 10141 10142 10143 10171 10172 10173 10181 10191 10192
実験日 2012/09/30 2012/09/30 2012/09/30 2012/10/05 2012/10/05 2012/10/05 2012/10/07 2012/10/07 2012/10/07 2012/10/07 2012/10/12 2012/10/12 2012/10/12 2012/10/17 2012/10/17 2012/10/17 2012/10/18 2012/10/19 2012/10/19
性別 男性 女性 女性 男性 男性 男性 女性 男性 男性 男性 男性 男性 女性 男性 女性 男性 女性 男性 男性
年齢 21 22 22 22 25 26 21 19 20 20 23 20 18 20 27 22 22 26 33
実験場所1 吉祥寺 吉祥寺 吉祥寺 渋谷 渋谷 渋谷 銀座 銀座 銀座 銀座 渋谷 渋谷 渋谷 吉祥寺 吉祥寺 吉祥寺 銀座 渋谷 渋谷
実験場所2 渋谷 渋谷 渋谷 吉祥寺 吉祥寺 吉祥寺 渋谷 渋谷 渋谷 渋谷 銀座 銀座 銀座 渋谷 渋谷 渋谷 渋谷 銀座 銀座
実験場所3 銀座 銀座 銀座 銀座 銀座 銀座 吉祥寺 吉祥寺 吉祥寺 吉祥寺 吉祥寺 吉祥寺 吉祥寺 銀座 銀座 銀座 吉祥寺 吉祥寺 吉祥寺
26
スマートフォンを用いた行動追跡調査手法の開発
調査 : 実証実験
4
4.2 実験方法
●実験装置 ・スマートフォン (iOS4.0 以上、Android2.3 以上搭載 ) ・ケース ( 図 4.2-1) ・ストラップ ・データ確認用ノート PC スマートフォンをケースに入れ、ストラップを用いて腰にケースを装着した。( 図 4.2-2) スマートフォンの位置を固定することにより、加速度データのバラツキがないように配 慮した。
図 4.2-1 ケース
図 4.2-2
●実験場所 今回の実験場所の条件として人の往来の多い繁華街を対象とした。 ( 文 1)
よりそれぞれ特徴の異なる 3 ヶ所を選んだ。 文 1) 奥山信一、稲用隆一、 都市のイメージに関する研究 似鳥俊平、四ヶ所高志、 塩崎太伸:Google EARTH 【渋谷】 における写真の分布と内 人の関心を寄せる範囲は、駅を中心にして周縁にまで広がっている。 容 : 都市のイメージ形成に 関する枠組みの研究 特定の建築物やオブジェではなく街並みから街のイメージが形成されている。 【銀座】 銀座から有楽町・新橋・新日本橋まで連続した街並みが形成されている。 建築物、オブジェ、街並みといった複合的な要因からイメージが形成されている。 【吉祥寺】 駅を中心としたエリアにある、建築物やオブジェを中心として街のイメージが形成され ている。 データの偏りをなくすため実験場所の順番に配慮した。 スタート地点は、実際の利用を想定して駅の出口周辺をスタート地点とした。 ・吉祥寺:JR 吉祥寺駅南口周辺 ( 図 4.2-3) ・渋谷:京王線渋谷駅出口周辺 ( 図 4.2-4) ・銀座:地下鉄銀座駅 A1 出口周辺 ( 図 4.2-5)
27
スマートフォンを用いた行動追跡調査手法の開発
調査 : 実証実験
4
スタート地点
図 4.2-3 JR 吉祥寺駅南口周辺
スタート地点
図 4.2-4 京王線渋谷駅出口周辺
スタート地点
図 4.2-5 地下鉄銀座駅 A1 出口周辺
28
スマートフォンを用いた行動追跡調査手法の開発
調査 : 実証実験
4
●実験内容 スタート地点より 15 〜 30 分間歩行をするように指示し、終了時はこちらからメー ルにて連絡した。実際に歩行してもらった時間は 20 分を目安とした。時間を事前に教 えなかったのは、時間を告知していると、後半は到着地点に戻ってくることが目的とな り前半と歩行のパターンが異なってしまう可能性を考慮したためである。 ●アンケート調査 終了後アンケートに回答してもらい、被験者の属性を収集した。アンケートによって、 調査した属性は、「性別」「年齢」「実験場所への訪問頻度」「街の印象」「散策の頻度」 である。 アンケート内容は以下の通りである。 0-1) 性別 [ 男 / 女 ] 0-2) 年齢 [ ] 歳 1-1) 実験場所 1 [ 吉祥寺 / 渋谷 / 銀座 ] 1-2) 実験場所 1 は、以前来たことはありますか? [ ある / ない ] 1-2-1)[ ある ] 何回ぐらい来ますか ? [ 毎日 /( 週・月・年 ) に ( ) 回 ] 1-2-2)[ ある ] 街を訪れる目的 [ 買い物・映画等の娯楽・食事・特に目的無し・その他 ] 1-3) 実験場所 1 の街の印象 [ 好き / 嫌い ] 1-3-1)[ 好き / 嫌い ] の理由 [( 自由回答 )] 1-4) 歩きやすい街だったか? [ はい / いいえ ] 1-4-1)[ はい / いいえ ] の理由 [( 自由回答 )] 2-1) 実験場所 2 [ 吉祥寺 / 渋谷 / 銀座 ] 2-2) 実験場所 2 は、以前来たことはありますか? [ ある / ない ] 2-2-1)[ ある ] 何回ぐらい来ますか ?
[ 毎日 /( 週・月・年 ) に ( ) 回 ]
2-2-2)[ ある ] 街を訪れる目的 [ 買い物・映画等の娯楽・食事・特に目的無し・その他 ] 2-3) 実験場所 2 の街の印象 [ 好き / 嫌い ] 2-3-1)[ 好き / 嫌い ] の理由 [( 自由回答 )] 2-4) 歩きやすい街だったか? [ はい / いいえ ] 2-4-1)[ はい / いいえ ] の理由 [( 自由回答 )] 3-1) 実験場所 3 [ 吉祥寺 / 渋谷 / 銀座 ] 3-2) 実験場所 3 は、以前来たことはありますか? [ ある / ない ] 3-2-1)[ ある ] 何回ぐらい来ますか ?
[ 毎日 /( 週・月・年 ) に ( ) 回 ]
3-2-2)[ ある ] 街を訪れる目的 [ 買い物・映画等の娯楽・食事・特に目的無し・その他 ] 3-3) 実験場所 3 の街の印象 [ 好き / 嫌い ] 3-3-1)[ 好き / 嫌い ] の理由 [( 自由回答 )] 3-4) 歩きやすい街だったか? [ はい / いいえ ] 3-4-1)[ はい / いいえ ] の理由 [( 自由回答 )] 4) 普段街を歩くとき、目的を持たずに散策することはありますか? [ ある / ない ] 4-1)[ ある ] どのくらいの頻度ですか? [ 毎日 /( 週・月・年 ) に ( ) 回 ] 4-2)[ ある ] どの街が多いですか? [ 上位三ヶ所 ( )( )( )]
29
検証・結果
5
スマートフォンを用いた行動追跡調査手法の開発
検証・結果
5
5.1 システム検証
吉祥寺 4 名、渋谷 5 名、銀座 7 名のデータの精度が低かった。また 3 名はいずれの 都市においてもデータの精度が低かった。他の被験者に関しても、10 秒に一回間隔で データを送信する設定にしていたがデータが送信されていないケースがあった。 全ての街で正確なデータが取得できなかった 3 名に関しては、スマートフォンの機種 に由来する原因が考えられるが、同機種を使った他の被験者においては問題がなかった ことから、各自の端末ごとに何かしらの原因があると考えられる。また、銀座のように 街全体で正確なデータが取れなかった比率の高い場所もあることから、ビルなどによる 電波の干渉、混雑による通信障害なども原因として考えられる。 可視化システムに関しては、正確なデータが取得できた場合は正確に可視化すること ができていた。
31
スマートフォンを用いた行動追跡調査手法の開発
検証・結果
5
5.2 移動経路と速度の 2D 描写 5.2.1 概要 緯度経度から変換された xy 座標が線として結ばれ、移動経路が線として表示される。 点上での速度が円の大きさとして表示される。速度が極端に速い場合は、10km/ 時 ( 小 走り時の速度 ) を超えないように処理してある。また、PC やスマートフォン上では円 が時間経過とともに動くアニメーションとしても表示できるようになっている。 また、アンケートから集計した属性毎に可視化することによって、属性毎に異なる歩 行パターンが表れるかも併せて検証した。今回使用した属性は、性別、街の印象 ( 好き / 嫌い )、散策経験 ( 有る / 無し ) である。
32
スマートフォンを用いた行動追跡調査手法の開発
検証・結果
5
5.2.2 吉祥寺 被験者 ID10053、10071、10141、10171 は位置情報の精度が低かったため、全体 の図から除外した。( 図 5.2.2-1) 全体の図は図 5.2.2-2、性別毎が図 5.2.2-2 と図 5.2.2-3、街に対する印象毎が図 5.2.2-4 と図 5.2.2-5、散策経験毎が図 5.2.2-6 と図 5.1.2-7 である。
被験者 ID 10053
被験者 ID 10071
被験者 ID 10141
被験者 ID 10171 図 5.2.2-1【吉祥寺】除外者 ( 移動経路と速度の 2D 描写 )
33
スマートフォンを用いた行動追跡調査手法の開発
検証・結果
5
図 5.2.2-2【吉祥寺】全体 ( 移動経路と速度の 2D 描写 )
34
スマートフォンを用いた行動追跡調査手法の開発
検証・結果
図 5.2.2-3【吉祥寺】性別:男性 ( 移動経路と速度の 2D 描写 )
図 5.2.2-4【吉祥寺】性別:女性 ( 移動経路と速度の 2D 描写 )
図 5.2.2-5【吉祥寺】街の印象:好き ( 移動経路と速度の 2D 描写 )
図 5.2.2-6【吉祥寺】街の印象:嫌い ( 移動経路と速度の 2D 描写 )
図 5.2.2-7【吉祥寺】散策経験:有る ( 移動経路と速度の 2D 描写 )
図 5.2.2-8【吉祥寺】散策経験:無し ( 移動経路と速度の 2D 描写 )
5
35
スマートフォンを用いた行動追跡調査手法の開発
検証・結果
5
5.2.3 渋谷 被験者 ID10052、10053、10141、10142、10171 は位置情報の精度が低かったため、 全体の図からは除外した。( 図 5.2.3-1) 全体の図は図 5.2.3-2、性別毎が図 5.2.3-3 と図 5.2.3-4、街に対する印象毎が図 5.2.3-5 と図 5.2.3-6、散策経験毎が図 5.2.3-7 と図 5.2.3-8 である。
被験者 ID 10052
被験者 ID 10053
被験者 ID 10142
被験者 ID 10171
被験者 ID 10141
図 5.2.3-1【渋谷】除外者 ( 移動経路と速度の 2D 描写 )
36
スマートフォンを用いた行動追跡調査手法の開発
検証・結果
5
図 5.2.3-2【渋谷】全体 ( 移動経路と速度の 2D 描写 )
37
スマートフォンを用いた行動追跡調査手法の開発
検証・結果
図 5.2.3-3【渋谷】性別:男性 ( 移動経路と速度の 2D 描写 )
図 5.2.3-4【渋谷】性別:女性 ( 移動経路と速度の 2D 描写 )
図 5.2.3-5【渋谷】街の印象:好き ( 移動経路と速度の 2D 描写 )
図 5.2.3-6【渋谷】街の印象:嫌い ( 移動経路と速度の 2D 描写 )
図 5.2.3-7【渋谷】散策経験:有る ( 移動経路と速度の 2D 描写 )
図 5.2.3-8【渋谷】散策経験:無し ( 移動経路と速度の 2D 描写 )
5
38
スマートフォンを用いた行動追跡調査手法の開発
検証・結果
5
5.2.4 銀座 被験者 ID10052、10053、10071、10072、10074、10141、10171 は位置情報の 精度が低かったため、全体の図からは除外した。( 図 5.2.4-1) 全体の図は図 5.2.4-2、性別毎が図 5.2.4-3 と図 5.2.4-4、街に対する印象毎が図 5.2.4-5 と図 5.2.4-6、散策経験毎が図 5.2.4-7 と図 5.2.4-8 である。
被験者 ID 10052
被験者 ID 10053
被験者 ID 10071
被験者 ID 10072
被験者 ID 10074
被験者 ID 10141
被験者 ID 10171 図 5.2.4-1【銀座】除外者 ( 移動経路と速度の 2D 描写 )
39
スマートフォンを用いた行動追跡調査手法の開発
検証・結果
5
図 5.2.4-2【銀座】全体 ( 移動経路と速度の 2D 描写 )
40
スマートフォンを用いた行動追跡調査手法の開発
検証・結果
図 5.2.4-3【銀座】性別:男性 ( 移動経路と速度の 2D 描写 )
図 5.2.4-4【銀座】性別:女性 ( 移動経路と速度の 2D 描写 )
図 5.2.4-5【銀座】街の印象:好き ( 移動経路と速度の 2D 描写 )
図 5.2.4-6【銀座】街の印象:嫌い ( 移動経路と速度の 2D 描写 )
図 5.2.4-7【銀座】散策経験:有る ( 移動経路と速度の 2D 描写 )
図 5.2.4-8【銀座】散策経験:無し ( 移動経路と速度の 2D 描写 )
5
41
スマートフォンを用いた行動追跡調査手法の開発
検証・結果
5
5.3 区域ごとの平均速度の 2D 描写 5.3.1 概要 地図を設定した数のグリッド上に分割し、その区域ごとの平均速度によって色の濃淡 で塗り分けられる。速度が極端に速い場合は、10km/ 時 ( 小走り時の速度 ) を超えない ように処理してある。今回はグリッドの数を 10 × 10 で設定した。グリッド数の設定 はそのつど行えるようになっている。 また、アンケートから集計した属性毎に可視化することによって、属性毎に異なる歩 行パターンが表れるかも検証した。今回使用した属性は、性別、街に対する印象 ( 好き / 嫌い )、散策経験 ( 有る / 無し ) である。
42
スマートフォンを用いた行動追跡調査手法の開発
検証・結果
5
5.3.2 吉祥寺 被験者 ID10053、10071、10141、10171 は位置情報の精度が低かったため、全体 の図から除外した。( 図 5.2.2-1) 全体の図は図 5.2.2-2、性別毎が図 5.2.2-2 と図 5.2.2-3、街に対する印象毎が図 5.2.2-4 と図 5.2.2-5、散策経験毎が図 5.2.2-6 と図 5.1.2-7 である。
図 5.3.2-1【吉祥寺】全体 ( 区域ごとの平均速度の 2D 描写 )
43
スマートフォンを用いた行動追跡調査手法の開発
検証・結果
5
図 5.3.2-2【吉祥寺】性別:男性 ( 区域ごとの平均速度の 2D 描写 )
図 5.3.2-3【吉祥寺】性別:女性 ( 区域ごとの平均速度の 2D 描写 )
図 5.3.2-4【吉祥寺】街の印象:好き ( 区域ごとの平均速度の 2D 描写 )
図 5.3.2-5【吉祥寺】街の印象:嫌い ( 区域ごとの平均速度の 2D 描写 )
図 5.3.2-6【吉祥寺】散策経験:有る ( 区域ごとの平均速度の 2D 描写 )
図 5.3.2-7【吉祥寺】散策経験:無し ( 区域ごとの平均速度の 2D 描写 )
44
スマートフォンを用いた行動追跡調査手法の開発
検証・結果
5
5.3.3 渋谷 被験者 ID10052、10053、10141、10142、10171 は位置情報の精度が低かったため、 全体の図からは除外した。 全体の図は図 5.3.3-1、性別毎が図 5.3.3-2 と図 5.3.3-3、街に対する印象毎が図 5.3.3-4 と図 5.3.3-5、散策経験毎が図 5.3.3-6 と図 5.3.3-7 である。
図 5.3.3-1【渋谷】全体 ( 区域ごとの平均速度の 2D 描写 )
45
スマートフォンを用いた行動追跡調査手法の開発
検証・結果
5
図 5.3.3-2【渋谷】性別:男性 ( 区域ごとの平均速度の 2D 描写 )
図 5.3.3-3【渋谷】性別:女性 ( 区域ごとの平均速度の 2D 描写 )
図 5.3.3-4【渋谷】街の印象:好き ( 区域ごとの平均速度の 2D 描写 )
図 5.3.3-5【渋谷】街の印象:嫌い ( 区域ごとの平均速度の 2D 描写 )
図 5.3.3-6【渋谷】散策経験:有る ( 区域ごとの平均速度の 2D 描写 )
図 5.3.3-7【渋谷】散策経験:無し ( 区域ごとの平均速度の 2D 描写 )
46
スマートフォンを用いた行動追跡調査手法の開発
検証・結果
5
5.3.4 銀座 被験者 ID10052、10053、10071、10072、10074、10141、10171 は位置情報の 精度が低かったため、全体の図からは除外した。 全体の図は図 5.3.4-1、性別毎が図 5.3.4-2 と図 5.3.4-3、街に対する印象毎が図 5.3.4-4 と図 5.3.4-5、散策経験毎が図 5.3.4-6 と図 5.3.4-7 である。
図 5.3.4-1【銀座】全体 ( 区域ごとの平均速度の 2D 描写 )
47
スマートフォンを用いた行動追跡調査手法の開発
検証・結果
5
図 5.3.4-2【銀座】性別:男性 ( 区域ごとの平均速度の 2D 描写 )
図 5.3.4-3【 銀座】性別:女性 ( 区域ごとの平均速度の 2D 描写 )
図 5.3.4-4【銀座】街の印象:好き ( 区域ごとの平均速度の 2D 描写 )
図 5.3.4-5【銀座】街の印象:嫌い ( 区域ごとの平均速度の 2D 描写 )
図 5.3.4-6【銀座】散策経験:有る ( 区域ごとの平均速度の 2D 描写 )
図 5.3.4-7【銀座】散策経験:無し ( 区域ごとの平均速度の 2D 描写 )
48
スマートフォンを用いた行動追跡調査手法の開発
検証・結果
5
5.4 移動経路の 3D 描写 5.4.1 概要 緯度経度からから変換した xy 座標に加え、時間を z 軸にし 3D モデル化する。z 軸は 上向きを正とし各自の行動開始 0 秒が原点とした。(x 座標 ,y 座標 , 時間 ) で表される点を、 時間順に結んでいき、移動経路を 3D で表示する。 また、アンケートから集計した属性毎に可視化することによって、属性毎に異なる歩 行パターンが表れるかも検証した。今回使用した属性は、性別、街に対する印象 ( 好き / 嫌い )、散策経験 ( 有る / 無し ) である。
49
スマートフォンを用いた行動追跡調査手法の開発
検証・結果
5
5.4.2 吉祥寺 被験者 ID10053、10071、10141、10171 位置情報の精度が低かったため、全体の 図から除外した。 全体の図は図 5.4.2-1、性別毎が図 5.4.2-2 と図 5.4.2-3、街に対する印象毎が図 5.4.2-4 と図 5.4.2-5、散策経験毎が図 5.4.2-6 と図 5.4.2-7 である。
図 5.4.2-1【吉祥寺】全体 ( 移動経路の 3D 描写 )
50
スマートフォンを用いた行動追跡調査手法の開発
検証・結果
図 5.4.2-2【吉祥寺】性別:男性 ( 移動経路の 3D 描写 )
図 5.4.2-3【吉祥寺】性別:女性 ( 移動経路の 3D 描写 )
図 5.4.2-4【吉祥寺】街の印象:好き ( 移動経路の 3D 描写 )
図 5.4.2-5【吉祥寺】街の印象:嫌い ( 移動経路の 3D 描写 )
図 5.4.2-6【吉祥寺】散策経験:有る ( 移動経路の 3D 描写 )
図 5.4.2-7【吉祥寺】散策経験:無し ( 移動経路の 3D 描写 )
5
51
スマートフォンを用いた行動追跡調査手法の開発
検証・結果
5
5.4.3 渋谷 被験者 ID10052、10053、10141、10142、10171 は位置情報の精度が低かったため、 全体の図からは除外した。 全体の図は図 5.4.3-1、性別毎が図 5.4.3-2 と図 5.4.3-3、街に対する印象毎が図 5.4.3-4 と図 5.4.3-5、散策経験毎が図 5.4.3-6 と図 5.4.3-7 である。
図 5.4.3-1【渋谷】全体 ( 移動経路の 3D 描写 )
52
スマートフォンを用いた行動追跡調査手法の開発
検証・結果
図 5.4.3-2【渋谷】性別:男性 ( 移動経路の 3D 描写 )
図 5.4.3-3【渋谷】性別:女性 ( 移動経路の 3D 描写 )
図 5.4.3-4【渋谷】街の印象:好き ( 移動経路の 3D 描写 )
図 5.4.3-5【渋谷】街の印象:嫌い ( 移動経路の 3D 描写 )
図 5.4.3-6【渋谷】散策経験:有る ( 移動経路の 3D 描写 )
図 5.4.3-7【渋谷】散策経験:無し ( 移動経路の 3D 描写 )
5
53
スマートフォンを用いた行動追跡調査手法の開発
検証・結果
5
5.4.4 銀座 被験者 ID10052、10053、10071、10072、10074、10141、10171 は位置情報の 精度が低かったため、全体の図からは除外した。 全体の図は図 5.4.4-1、性別毎が図 5.4.4-2 と図 5.4.4-3、街に対する印象毎が図 5.4.4-4 と図 5.4.4-5、散策経験毎が図 5.4.4-6 と図 5.4.4-7 である。
図 5.4.4-1【銀座】全体 ( 移動経路の 3D 描写 )
54
スマートフォンを用いた行動追跡調査手法の開発
検証・結果
図 5.4.4-2【銀座】性別:男性 ( 移動経路の 3D 描写 )
図 5.4.4-3【銀座】性別:女性 ( 移動経路の 3D 描写 )
図 5.4.4-4【銀座】街の印象:好き ( 移動経路の 3D 描写 )
図 5.4.4-5【銀座】街の印象:嫌い ( 移動経路の 3D 描写 )
図 5.4.4-6【銀座】散策経験:有る ( 移動経路の 3D 描写 )
図 5.4.4-7【銀座】散策経験:無し ( 移動経路の 3D 描写 )
5
55
分析・考察
6
スマートフォンを用いた行動追跡調査手法の開発
分析・考察
6
6.1 可視化されたイメージからの分析
5.4 で示した可視化から各実験場所における行動の特性を分析した。 なお、加速度に関しては有意な差がなかった。これに関しては、行動が歩行のみだっ たことが原因と考えられる。同じく属性ごとの可視化も有意な差がなかった。これに関 してはデータ量が少なかったことが原因と考えられる。 【吉祥寺】 ・北西方向から見るとつぼ型になっている。( 図 6.1-1) →五日市街道、井の頭公園の池で引き返している人が多い。
図 6.1-1
57
スマートフォンを用いた行動追跡調査手法の開発
分析・考察
6
【渋谷】 ・南西方向から見ると逆山型になっている。( 図 6.1-2) →引き返す行動が少ない。 ・駅周辺は平均速度が遅い。 →人が多いなどの要因が考えられる。
図 6.1-2
【銀座】 ・外堀通りと昭和通りの間に線が集中している。( 図 6.1-3) →外堀通りと昭和通りで引き返している人が多い。 ・北東方向と南西方向から見るとつぼ型になっている。( 図 6.1-4) →東京高速道路にあたる場所で引き返している人が多い。 ・大きな道路にあたると、引き返す行動をとっている人が多い。
58
スマートフォンを用いた行動追跡調査手法の開発
分析・考察
6
図 6.1-3
図 6.1-4
59
スマートフォンを用いた行動追跡調査手法の開発
分析・考察
6
6.2 可視化システムの考察
移動経路の 3D 表示では様々な角度から見ることができることで、平面的な表示では 現れない行動を発見することができた。今回の実証実験では 20 分間歩き続けたため可 視化では表れなかったたが、角度が緩やかだと速度が速く、急だと速度が遅いことから 立ち止ってる間は線が垂直になることから、人が立ち止まりやすい場所などを調査する 際にも有用であると思われる。 街ごとに異なる街区の形状や道路の配置、道の混雑具合などを歩行によってセンシン グし、それを 3D モデル化することによって、様々な街をモデル化することができるこ とがわかった。今回の 3 都市では、逆山型とつぼ型の 2 つのモデルが発見できた。その 他にも、渦巻き型やひょうたん型などといった様々なモデルがそれぞれの街で発見でき るのではないだろうか。 属性ごとの 3D モデルにおいては目立った発見をすることができなかったが、大量の データを収集することによってある属性が作るモデルのようなものを発見できるかも知 れない。例えば、「異なる街でも散策好きの人が作るモデルは逆山型になりやすい」と いう様な形で、その属性の人たちが持つ行動特性を 3D モデルとして表すことができる と考えた。
60
まとめ
7
スマートフォンを用いた行動追跡調査手法の開発
まとめ
7
7.1 本研究のまとめ
● HumanProbes による行動のセンシング スマートフォンを用いることによって人の追跡調査が可能であるとわかった。これに より、今まででは調査を行う時間帯や時季が限られていたが、スマートフォンを用いる ことによって時間に縛られず継続的に調査を行うことが可能となる。また、オープンな システムの環境を用意することによって多くのデータを収集することが期待できる。 ●行動の可視化 3D モデルによる可視化を行うことによって、今までは気づけなかった人の行動特性 を見つけることができた。また、街の特徴を 3D モデル化することによって型ごとに街 の分類をすることができた。また、属性などによって行動を 3D モデル化することによっ て、その属性ごとの行動特性をモデル化する可能性も示せた。
62
スマートフォンを用いた行動追跡調査手法の開発
まとめ
7
7.2 本研究の課題
●オープンな環境の構築 →今回は実験環境にとどまりオープン化をできなかったが、スマートフォンによるセン シングに関してはすぐにオープンにできる環境にある。可視化に関してもオープンな環 境に移行できる準備はできている。オープン環境にすることにより、ユーザからのフィー ドバックを得ることができる。 ●加速度の有効活用 →実験において歩行実験しか行わなかったため加速度による料理、洗濯といった日常行 動の分析は行えなかった。行動の分析が行えれば、位置情報が取得できない室内空間な どでの行動の分析なども可能になる。行動分析には、行動ごとの加速度を集積し分析す る必要があるため、実現するにはさらなる実験が必要である。 ●位置情報の精度 →位置情報が正確に取得できなかった原因を究明する必要がある。推測できる原因はい くつかあるが、どれが本当の原因なのかは専門知識が必要であるため、専門家の協力が 必要である。
63
スマートフォンを用いた行動追跡調査手法の開発
まとめ
7
7.3 展望
今回用意した 3 つの可視化のうち、3D による可視化は行動追跡調査の新たな可能性 を示せた。可視化の方法は他にも可能性があると思われるので、オープン環境を用意す ることによってまた新たな可視化の方法も開発できると思われる。 また、今回は時間・人数ともに制限を設けたためにシステムの能力の一部しか発揮で きなかった。時間制限を設けないことにより人によって異なる行動と行動の間の時間な ども計測することが出来ると期待できる。 オープンソースな技術として広く多くの人に使われるような環境にしていきたいと考 えている。
64
スマートフォンを用いた行動追跡調査手法の開発
謝辞
謝辞 本論文の執筆にあたり、大変多くの方に御指導・御協力を賜ったことを、この場を借りて御礼申し上げます。 自分のような端くれ者を快く受け入れてくださった渡辺先生、ありがとうございました。 優柔不断な自分に道筋を示していただいた林田先生、ありがとうございました。 曖昧な考えしか示せない自分に厳しい言葉で指摘をしていただいた長澤先生、ありがとうございました。 この研究室に入れなければ、論文の執筆すら叶わなかったかもしれないと思っています。研究室の皆様、本 当にありがとうございました。 終盤の指導担当をしていただいた太輔さん、ご迷惑かけてばかりで本当に申し訳ありませんでした。太輔さ んでなければ、どこかで諦めていたと思います。本当にありがとうございました。 序盤の担当をしていただいた菊地さん、大変お世話になりました。色々と面白いアイデアをいただいたのに 形に出来なかったのは心残りですが、ありがとうございました。 馬淵さんの笑顔にはいつも癒やしてもらいました。P さんと煙草吸う時間が楽しみでした。ゆりかさんのバ イタリティにはいつも圧倒されました。萌さんの金髪を生で見てないのでもう 1 回お願いします。すぎたつさ んの朝のテンション高さには驚愕です。 同期のみんな、暖かく接してくれてありがとう。みんながいなければ、もっとつらい論文生活だったと思い ます。のんちゃん、来年は伊永と頑張って。さわこ、3 年ぶりの再会久々。すーさん、ももクロ行きたいね。大竹、 しっかりしろ。どいぱん、留年組シンパシー。もーちゃん、また CD あげるね。ざま、かっこいいよ。伊永、ちゃ んと来いよ。 執筆中に飲んだモンスターカオスと吸った煙草と聞いた爆笑問題カーボーイ Podcast の本数は数知れず。8 年目の正直、完成して本当によかった。 2012 年 11 月 5 日 渡辺仁史研究室 近江俊祐
65
スマートフォンを用いた行動追跡調査手法の開発
参考文献
参考文献 <参考論文> 大内一成、土井美和子:加速度と音で日々の生活行動を認識する、情報処理学会 イン タラクション 2011、2011 松浦寛、西山裕之:高機能携帯電話を用いたライフログ収集手法の提案及び状況推測に 関する研究、情報処理学会第 73 回全国大会講演論文集、4W-4、2011 渡辺 仁史、池原義郎、中村良三、吉田克之、泉 千佳子:空間における行動特性の研究 : その 1・行動の構造のマトリックス表現、1970 奥山信一、稲用隆一、似鳥俊平、四ヶ所高志、塩崎太伸:Google EARTH における写真 の分布と内容 : 都市のイメージ形成に関する枠組みの研究、日本建築学会大会学術講演 梗概集 2009 pp. 757-758、2009 平井充、初田亨:建築機能からみら浅草・銀座・新宿・渋谷における繁華街の変遷の比較、 日本建築学会学術講演梗概集 F − 2 建築歴史・意匠 2007、pp319-320、2007 <参考文献> ベン・フライ:ビジュアライジング・データ -Processing による情報視覚化手法、オラ イリージャパン、2008 前川峻志、田中孝太郎 :Built with Processing デザイン / アートのためのプログラミング 入門 [ ver1.x 対応版 ]、株式会社ビー・エヌ・エヌ新社、2010 デイビッド・フラナガン:JavaScript 第 5 版、オライリージャパン、2007 <参考 URL > Processing.org:http://processing.org/ Google Mapper for Processing:http://googlemapper.pt.vu/ ス マ ー ト フ ォ ン 市 場 規 模 の 推 移・ 予 測(12 年 3 月 ):http://www.m2ri.jp/ newsreleases/main.php?id=010120120313500 Yasushi Noguchi Class:http://r-dimension.xsrv.jp/classes_j/
66
資料編
スマートフォンを用いた行動追跡調査手法の開発
資料編
データをサーバに送信:GPSAndAccelerationRecever.js [JavaScript] var m = 1000; //grobal var lat = 0; var lng = 0; var v = 0; var receive_status = 2; var x = -1; var y = -1; var z = -1; var time = -1; var is_init = true; window.onload = function(){ $(function(){ window.addEventListener("devicemotion",function(evt){ x = evt.accelerationIncludingGravity.x; y = evt.accelerationIncludingGravity.y; z = evt.accelerationIncludingGravity.z; },false); }); timeLoop(); } function timeLoop(){ var position_options = { enableHighAccuracy: true }; navigator.geolocation.getCurrentPosition( gpsReceiveSuccess, gpsReceiveFailed,position_options ); } //success function gpsReceiveSuccess(position){ receive_status = 0; lat = position.coords.latitude; lng = position.coords.longitude; time = js_yyyy_mm_dd_hh_mm_ss().toString(); v = parseInt(position.coords.speed) / 1000 * 3600; // m/s = km/h if(position.coords.accuracy > 100) receive_status = 1; requestAjax(); } function gpsReceiveFailed(err){ requestAjax(-1, -1, 2); lat = -1; lng = -1; v = -1; time = -1 receive_status = 2; myGPSAndAccelerationFailed(err); } var post_num = 0; //post //receive_status : 0 => 良好 , 1=> 不良 , 2=> 不可 function requestAjax(){ if(receive_status < 2){ // この部分でデータを送信している // 上 5 つは GPS 情報 // 下 3 つは加速度の情報 $.ajax({ type: "POST", url: url["logger"], // リクエスト URL data: "id="+id
68
スマートフォンを用いた行動追跡調査手法の開発
資料編
+"&lat="+lat +"&lng="+lng +"&v="+v +"&receice_status="+receive_status +"&gps_time="+time +"&x="+x +"&y="+y +"&z="+z +"&is_init="+is_init , // データ success: function(data, status) { // 通信成功時にデータを表示 post_num++; is_init = false; if(post_num > 1) myGPSAndAccelerationSuccess(lat,lng,data["v"],data["dis"],receive_ status,x,y,z); }, error: function(XMLHttpRequest, textStatus, errorThrown){ this; }, dataType: "json" // 応答データ形式 }); } setTimeout("timeLoop()",gps_receive_interval * m); } function js_yyyy_mm_dd_hh_mm_ss () { now = new Date(); year = "" + now.getFullYear(); month = "" + (now.getMonth() + 1); if (month.length == 1) { month = "0" + month; } day = "" + now.getDate(); if (day.length == 1) { day = "0" + day; } hour = "" + now.getHours(); if (hour.length == 1) { hour = "0" + hour; } minute = "" + now.getMinutes(); if (minute.length == 1) { minute = "0" + minute; } second = "" + now.getSeconds(); if (second.length == 1) { second = "0" + second; } return year + "-" + month + "-" + day + " " + hour + ":" + minute + ":" + second; }
69
スマートフォンを用いた行動追跡調査手法の開発
資料編
データの処理・保存:actions.class.php [PHP] <?php /** * logger actions. * * @package sensingtechnology * @subpackage logger * @author Your name here * @version SVN: $Id: actions.class.php 23810 2009-11-12 11:07:44Z Kris.Wallsmith $ */ class loggerActions extends sfActions { /** * Executes index action * * @param sfRequest $request A request object */ public function executeIndex(sfWebRequest $request) { $this->forward('default', 'module'); } public function executeInput(sfWebRequest $request) { $id = $request->getParameter("id"); $member_info = MemberInfoTable::getInstance()->findOneById($id); $this->forward404Unless($member_info, ' 無効な ID です '); //getParameter の引数に、GPSAndAccelerationRecever.js で指定した id $receive_status = $request->getParameter("receive_status"); $this->getResponse()->setHttpHeader('Content-Type', 'application/json; charset=utf-8'); $this->getResponse()->setHttpHeader('Cache-Control', 'no-cache, must-revalidate'); if (($receive_status == 0) || ($receive_status == 1)) { //if 文の中でデータを保存 $member_log = new MemberLog(); $member_log->setMemberInfoId($id); $member_log->setLatitude($request->getParameter("lat")); $member_log->setLongitude($request->getParameter("lng")); $is_init = ((string) $request->getParameter("is_init") == "true") ? true : false; $member_log->setReceiveStatus($receive_status); $xy = ConvertToxy::getInstance()->execute($request->getParameter("lat"), $request>getParameter("lng")); $member_log->setX($xy["x"]); $member_log->setY($xy["y"]); if (!$is_init){ $tmp = MemberLogTable::getInstance()->getMyV($id, $xy["x"], $xy["y"],$request>getParameter("gps_time")); $v = $tmp["v"]; $dis = $tmp["dis"]; } else { $v = -1; $dis = -1; } $member_log->setV($v); $member_log->setDistance($dis); $member_log->setAx($request->getParameter("x")); $member_log->setAy($request->getParameter("y")); $member_log->setAz($request->getParameter("z")); $member_log->setGpsTime($request->getParameter("gps_time")); $member_log->save(); return $this->renderText(json_encode(array("v" => $v,"dis" => $dis))); } else return $this->renderText(json_encode(array("v" => -1,"dis" => -1))); } }
70
スマートフォンを用いた行動追跡調査手法の開発
資料編
出力・検索処理:actions.class.php [PHP] <?php /** * outputlog actions. * * @package sensingtechnology * @subpackage outputlog * @author Your name here * @version SVN: $Id: actions.class.php 23810 2009-11-12 11:07:44Z Kris.Wallsmith $ */ class outputlogActions extends sfActions { public function executeIndex(sfWebRequest $request) { $this->forward('default', 'module'); } public function executeList(sfWebRequest $request) { $this->pager = null; $this->member_info = $this->getUser()->getMemberInfo(); if (MemberLogTable::getInstance()->findByMemberInfoId($this->member_info->getId())) { $this->pager = new sfDoctrinePager( 'MemberLog', 50 ); $this->pager->setQuery($this->member_info->getMemberLogsQuery()); $this->pager->setPage($request->getParameter('page', 1)); $this->pager->init(); } } // 検索するデータをセット public function executeSearch(sfWebRequest $request){ $this->form = new searchForm(); $this->form->getWidgetSchema()->setNameFormat(searchForm::NAME . '[%s]'); if ($request->isMethod('post')) { $values = $request->getParameter($this->form->getName()); $this->form->bind($values); if ($this->form->isValid()) { $this->getUser()->setFlash("info", $this->form->getValues()); if(!$values["output"]) $this->redirect('outputlog/googlemap'); else $this->redirect('outputlog/DlList'); } } } // あたら得られた情報をもとに、googlemap で表示 public function executeGooglemap(sfWebRequest $request) { $values = $this->getUser()->getFlash("info"); if(!$values) $this->redirect('outputlog/search'); $this->member_logs = MemberLogTable::getInstance()->getMemberLogsByInfo($this>getUser()->getMemberInfo(),$values,false); $member_request_log = new MemberRequestLog(); $member_request_log->setMemberInfoId($this->getUser()->getMemberInfo()->getId()); $member_request_log->save(); } /** * executeDlList * * @param sfWebRequest $request */ //csv に出力 public function executeDlList(sfWebRequest $request) { $values = $this->getUser()->getFlash("info"); if(!$values) $this->redirect('outputlog/search'); // -------------// initialize // -------------$user_agent = $request->getHttpHeader('USER_AGENT');
71
スマートフォンを用いた行動追跡調査手法の開発
資料編
$return_code = preg_match("/^.+Mac OS.+$/", $user_agent) ? "\r" : "\n"; // -------------// get record // -------------// 表示に必要なデータが入っている $member_logs = MemberLogTable::getInstance()->getMemberLogsByInfo($this->getUser()>getMemberInfo(),$values,true); // -----------// make csv // -----------$list = array(); // データを取ってくる、保存 foreach ($member_logs as $member_log) { $list[] = array( " ユ ー ザ ー 名 " => MemberInfoTable::getInstance()->findOneById($member_log>getMemberInfoId())->getUsername(), " 緯度 " => $member_log->getLatitude(), " 経度 " => $member_log->getLongitude(), " 速度 (km/h)" => $member_log->getV(), " 加速度 (x)" => $member_log->getAx(), " 加速度 (y)" => $member_log->getAy(), " 加速度 (z)" => $member_log->getAz(), " アクセス日時 " => strtotime($member_log->getCreatedAt()) //UNIX 時間 ); } $csv = null; if (count($list)) { // header $tmp = sprintf('"%s"', implode('","', array_keys($list[0]))); $data[] = mb_convert_encoding($tmp, "sjis-win", sfConfig::get('sf_charset')); // body foreach ($list as $row) { $tmp = sprintf('"%s"', implode('","', array_values($row))); $data[] = mb_convert_encoding($tmp, "sjis-win", sfConfig::get('sf_charset')); } $csv = implode($return_code, $data); } // ---------// output // ---------$file_name = sprintf("fcreator_users_%s.csv", date("YmdHis")); $this->getResponse()->clearHttpHeaders(); $this->getResponse()->addCacheControlHttpHeader("Cache-control", "private"); $this->getResponse()->setHttpHeader("Content-Description", "File Transfer"); $this->getResponse()->setContentType('application/octet-stream', TRUE); $this->getResponse()->setHttpHeader('Pragma', "public"); $this->getResponse()->setHttpHeader('Content-transfer-encoding', 'binary', TRUE); $this->getResponse()->setHttpHeader("Content-Disposition", "attachment; filename=" . $file_ name, TRUE); $this->getResponse()->sendHttpHeaders(); return $this->renderText($csv); } }
72
スマートフォンを用いた行動追跡調査手法の開発
資料編
検索画面の設定:searchForm.php [PHP] <?php class searchForm extends sfForm { const NAME = 'google_map_info'; public function configure() { $c1 = array('0' => ' 自分のみ ', '1' => ' すべてのユーザ '); $c2 = array('0' => ' 現在時刻 ', '1' => ' 時刻を指定 '); $c3 = array('0' => ' すべて ','1' => '10', '2' => '20','3' => '30'); $c4 = array( '0' => ' すべて ','1' => ' 最新の 1 件のみ '); $c5 = array( '0' => 'googlemap で見る ','1' => 'csv で出力する '); $this->setWidgets(array( 'is_all' => new sfWidgetFormChoice(array( 'expanded' => false, 'choices' => $c1 )), 'time_option' => new sfWidgetFormChoice(array( 'expanded' => false, 'choices' => $c2 )), 'datetime' => new sfWidgetFormDateTime(array( )), 'datetime_ranege' => new sfWidgetFormChoice(array( 'expanded' => false, 'choices' => $c3 )), 'datetime_optopn' => new sfWidgetFormChoice(array( 'expanded' => false, 'choices' => $c4 )), 'output' => new sfWidgetFormChoice(array( 'expanded' => false, 'choices' => $c5 )) )); $this->widgetSchema->setLabels(array( 'is_all' => ' 対称ユーザー ', 'time_option' => ' 時刻指定 ', 'datetime' => " 日時 ", 'datetime_ranege' => " 範囲 ", 'datetime_optopn' => " オプション ", 'output' => ' 出力媒体 ' )); $this->setValidators(array( 'is_all' => new sfValidatorBoolean(), 'time_option' => new sfValidatorBoolean(), 'datetime' => new sfValidatorDateTime(array('required' => false, 'datetime_output' => "Y-m-d H:i")), 'datetime_ranege' => new sfValidatorPass(), 'datetime_optopn' => new sfValidatorPass(), 'output' => new sfValidatorPass() )); $this->validatorSchema->setPostValidator( new sfValidatorCallback(array('callback' => array($this, 'checkDatetime'))) ); $this->validatorSchema->setOption('allow_extra_fields', true); $this->validatorSchema->setOption('filter_extra_fields', false); $this->disableLocalCSRFProtection(); } public function checkDatetime($validator, $values){ if($values["time_option"] ){ if(!$values["datetime"]) throw new sfValidatorError($validator, ' 日時を指定してください。'); }
73
スマートフォンを用いた行動追跡調査手法の開発
}
}
資料編
else $values["datetime"] = date("Y-m-s H:i"); $values["datetime_ranege"] *=10; return $values;
74
スマートフォンを用いた行動追跡調査手法の開発
資料編
GoogleMaps に出力:googlemapSuccess.php [PHP] <?php use_stylesheet("frontend/outputlog/googlemap.css") ?> <?php use_javascript("http://maps.google.com/maps/api/js?v=3&sensor=false"); ?> <body onload="init()"> <script type="text/javascript"> function attachMessage(marker) { google.maps.event.addListener(marker, 'click', function() { new google.maps.Geocoder().geocode({ latLng: marker.getPosition() }, function(result, status) { if (status == google.maps.GeocoderStatus.OK) { new google.maps.InfoWindow({ content: marker.getTitle() }).open(marker.getMap(), marker); } }); }); } var map; function init() { var latlngs = new Array(); var names = new Array(); var times = new Array(); var v = new Array(); var x = new Array(); <?php foreach ($member_logs as $member_log): ?> latlngs.push(new google.maps.LatLng(<?php echo $member_log->getLatitude() ?>, <?php echo $member_log->getLongitude() ?>)); names.push("<?php echo MemberInfoTable::getInstance()->findOneById($member_log>getMemberInfoId())->getUsername(); ?>"); times.push("<?php echo $member_log->getCreatedAt(); ?>"); v.push("<?php echo $member_log->getV(); ?>"); <?php endforeach; ?> var opts = { zoom: 10, mapTypeId: google.maps.MapTypeId.ROADMAP, center: new google.maps.LatLng(35.729757,139.71056) // 中心をどこにするか }; map = new google.maps.Map(document.getElementById("map"), opts); for (i = 0; i < latlngs.length; i++) { var color = '|'+makeRGB(v[i]) + '|000000'; var myMarker = new google.maps.Marker({ position: latlngs[i], map: map, title: " 名前 : " + names[i] + " 時間 : " + times[i] + " 速度 :" +v[i], icon: 'http://chart.apis.google.com/chart?chst=d_map_pin_letter&chld='+names[i] + color //icon }); attachMessage(myMarker); } } //RGB で速度を表現する //http://www.kesion.com/xd/rgb.htm /*stop : color = 191970(MidnightBlue), v<2.1 *walk : color = 8470FF(LightSlateBlue),2.0 < v <5.1 *run : color = 7CFC00(LawnGreen), 5.0 < v < 10.1 *bike : color = FFFF00(Yellow), 10.0 < v < 21.0 *car : color = B8860B(DarkGoldenrod), 20.0 < v < 61.1 *oher : color = FF0000(Red) function makeRGB(v){ var color; if(v < 2.1) color = '191970'; else if((2.0 < v) && (v < 5.1)) color = '8470FF';
75
スマートフォンを用いた行動追跡調査手法の開発
資料編
else if((5.0 < v) && (v < 10.1)) color = '7CFC00'; else if((10.0 < v) &&(v < 21.1)) color = 'FFFF00'; else if((20.0 < v) && (v < 61.1)) color = 'B8860B'; else color = 'FF0000'; return color
} function clickEventFunc(event) { alert(event.latLng.toString()); } </script> <div id="map"></div> </body>
76
スマートフォンを用いた行動追跡調査手法の開発
資料編
トップ画面:menuSuccess.php [PHP] <?php use_javascript("frontend/GPSAndAccelerationRecever.js") ?> <?php use_javascript("frontend/menu.js") ?> <?php use_javascript("jquery.min.js") ?> <script type="text/javascript"> /* <![CDATA[ */ var url = {}; <?php printf("var id = '%s';",$member_info->getId()); ?> <?php printf("url['logger'] = '%s';", url_for("logger/input"));?> <?php printf("var gps_receive_interval = '%s';",$gps_receive_interval); ?> /* ]]> */ </script> <h1>hello, <?php echo $member_info->getUserName() ?></h1> <dl> <dt> 緯度 </dt> <dd id="latitude">-</dd> <dt> 経度 </dt> <dd id="longitude">-</dd> <dt>v</dt> <dd id="v">-</dd> <dt> 進んだ距離 </dt> <dd id="dis">-</dd> <dt> サーバ側に送信した数 </dt> <dd id="post_num">-</dd> <dt>GPS ステータス </dt> <dd id="is_fine">-</dd> </dl>
77
スマートフォンを用いた行動追跡調査手法の開発
資料編
移動経路と速度の 2D 描写:line.pde [Processing] import processing.pdf.*; import googlemapper.*; Table dataTable; GoogleMapper gMapper; PImage mapImage; int rowCount; int row; int[] id; double[] lat,lon; float[] x,y; float[] speed; float[] time; double Maxlat; double Minlat; double Maxlon; double Minlon; double clat; double clon; void setup() { size(800, 800); beginRecord(PDF, "filename.pdf"); colorMode(HSB,100); frameRate(30); dataTable = new Table("filename.csv"); rowCount = dataTable.getRowCount(); lat = new double[rowCount]; lon = new double[rowCount]; x = new float[rowCount]; y = new float[rowCount]; speed = new float[rowCount]; id = new int[rowCount]; time =new float[rowCount]; Maxlon = 0; Minlon = 180; Maxlat = 0; Minlat = 90; for(row=1; row<rowCount; row++) { id[row] = dataTable.getInt(row,0); lat[row] = dataTable.getFloat(row,1); lon[row] = dataTable.getFloat(row,2); speed[row] = dataTable.getFloat(row,3); time[row] = dataTable.getFloat(row,7); } for(row=1; row<rowCount; row++) { if(Maxlon <= lon[row]){ Maxlon = lon[row]; } } for(row=1; row<rowCount; row++) { if(lon[row] <= Minlon){ Minlon = lon[row]; } } for(row=1; row<rowCount; row++) { if(Maxlat <= lat[row]){ Maxlat = lat[row]; } }
78
スマートフォンを用いた行動追跡調査手法の開発
資料編
for(row=1; row<rowCount; row++) { if(lat[row] <= Minlat){ Minlat = lat[row]; } } clat=(Maxlat+Minlat)/2; clon=(Maxlon+Minlon)/2; double mapCenterLat = clat; // 緯度 double mapCenterLon = clon; // 経度 int zoomLevel = 16; // ズームレベル String mapType = GoogleMapper.MAPTYPE_ROADMAP; // 表示の種類 int mapWidth = width; // 横サイズ int mapHeight = height; // 縦サイズ // インスタンスの作成 gMapper = new GoogleMapper(mapCenterLat, mapCenterLon, zoomLevel, mapType, mapWidth, mapHeight);
}
// マップ画像の取得 mapImage = gMapper.getMap();
void draw() { smooth(); strokeWeight(1.5); background(99); for(row=1; row<rowCount; row++){ x[row] = (float)gMapper.lon2x(lon[row]); y[row] = (float)gMapper.lat2y(lat[row]); } image(mapImage, 0, 0); noFill(); for(row=1; row<rowCount-1; row++) { stroke(id[row]*5,80,100,100); if(row==1 || id[row] != id[row-1]){// 各被験者の最初と最後の点を線で結ばない }else{ line(x[row-1],y[row-1],x[row],y[row]);// 現在の点と一個前の点を線で結ぶ } } for(row=1; row<rowCount; row++) { fill(id[row]*5,80,100,70); noStroke();
}
}
if(speed[row] > 10){ ellipse(x[row],y[row],15,15); }else{ ellipse(x[row],y[row],speed[row]*1.5,speed[row]*1.5); }
void keyPressed(){ endRecord(); }
79
スマートフォンを用いた行動追跡調査手法の開発
資料編
区域ごとの平均速度の 2D 描写:mesh.pde [Processing] import processing.pdf.*; import googlemapper.*; Table dataTable; GoogleMapper gMapper; PImage mapImage; int rowCount; int row; int[] id; double[] lat,lon; float[] x,y; float[] speed; float[] time; double Maxlat; double Minlat; double Maxlon; double Minlon; double clat; double clon; int[] count; int[] idx; // 行列のインデックス int matrix = 20; // 行列の数 int w; // マスの幅 int h; // マスの高さ float[] sumSpeed; // 速度合計 float[] aveSpeed; // 平均速度 float[] speedColor; void setup() { size(800, 800); beginRecord(PDF, "filename.pdf"); colorMode(HSB,100); frameRate(30); dataTable = new Table("filename.csv"); rowCount = dataTable.getRowCount(); lat = new double[rowCount]; lon = new double[rowCount]; x = new float[rowCount]; y = new float[rowCount]; speed = new float[rowCount]; id = new int[rowCount]; time =new float[rowCount]; Maxlon = 0; Minlon = 180; Maxlat = 0; Minlat = 90; idx = new int[rowCount]; sumSpeed = new float[int(sq(matrix)+1)]; count = new int[int(sq(matrix)+1)]; aveSpeed = new float[int(sq(matrix)+1)]; speedColor = new float[int(sq(matrix)+1)]; for(row=1; row<rowCount; row++) { id[row] = dataTable.getInt(row,0); lat[row] = dataTable.getFloat(row,1); lon[row] = dataTable.getFloat(row,2); speed[row] = dataTable.getFloat(row,3); time[row] = dataTable.getFloat(row,7);
80
スマートフォンを用いた行動追跡調査手法の開発
資料編
} w=width/matrix; h=height/matrix; for(row=1; row<rowCount; row++) { if(Maxlon <= lon[row]){ Maxlon = lon[row]; } } for(row=1; row<rowCount; row++) { if(lon[row] <= Minlon){ Minlon = lon[row]; } } for(row=1; row<rowCount; row++) { if(Maxlat <= lat[row]){ Maxlat = lat[row]; } } for(row=1; row<rowCount; row++) { if(lat[row] <= Minlat){ Minlat = lat[row]; } } clat=(Maxlat+Minlat)/2; clon=(Maxlon+Minlon)/2; double mapCenterLat = clat; // 緯度 double mapCenterLon = clon; // 経度 int zoomLevel = 16; // ズームレベル String mapType = GoogleMapper.MAPTYPE_ROADMAP; // 表示の種類 int mapWidth = width; // 横サイズ int mapHeight = height; // 縦サイズ // インスタンスの作成 gMapper = new GoogleMapper(mapCenterLat, mapCenterLon, zoomLevel, mapType, mapWidth, mapHeight);
}
// マップ画像の取得 mapImage = gMapper.getMap();
void draw() { background(99); image(mapImage, 0, 0); for(row=1; row<rowCount; row++){ x[row] = (float)gMapper.lon2x(lon[row]); y[row] = (float)gMapper.lat2y(lat[row]); for(int i=1;i<=matrix;i++){ for(int j=1;j<=matrix;j++){ if((i-1)*w<x[row] & x[row]<=i*w & (j-1)*h<y[row] & y[row]<=j*h){ idx[row]=(j-1)*matrix+i; } } } if(speed[row] > 10){ speed[row]=10; } if(speed[row] < 1){ speed[row]=1; } sumSpeed[idx[row]] += speed[row]; count[idx[row]]++; }
81
スマートフォンを用いた行動追跡調査手法の開発
}
資料編
for(int i=1;i<=sq(matrix);i++){ aveSpeed[i]=sumSpeed[i]/count[i]; speedColor[i] = map(aveSpeed[i],0,max(aveSpeed),100,0); if(aveSpeed[i] > 0 ){ fill(99,0,speedColor[i],70); }else{ noFill(); } stroke(0,0,70,50); rect((i+(matrix-1))%matrix*w,(i-1)/matrix*h,w,h); }
void keyPressed(){ endRecord(); }
82
スマートフォンを用いた行動追跡調査手法の開発
資料編
移動経路の 3D 描写 :line3D.pde [Processing] import processing.pdf.*; import processing.opengl.*; import googlemapper.*; Table dataTable; GoogleMapper gMapper; PImage mapImage; int rowMax,numberMax,idnumMax,row; int numberCount=0; int idnumCount=0; int[] id; int[] number,idnum; double[] ori_lat,ori_lon; float[] ori_time; double[][] lat,lon; float[][] x,y,time; double Maxlat = 0; double Minlat = 90; double Maxlon = 0; double Minlon = 180; double clat,clon; void setup() { size(900, 700, OPENGL); frameRate(30); smooth(); dataTable = new Table("filename.csv"); rowMax = dataTable.getRowCount(); ori_lat = new double[rowMax]; ori_lon = new double[rowMax]; ori_time = new float[rowMax]; id = new int[rowMax]; number = new int[rowMax]; idnum = new int[rowMax]; id[0]=0; numberCount = 0; for(row=1; row<rowMax; row++){ id[row] = dataTable.getInt(row,0); if(id[row] != id[row-1]){ idnumCount++; number[row] = 0; numberCount = 0; } numberCount++; number[row] = numberCount; idnum[row] = idnumCount; ori_lat[row] = dataTable.getFloat(row,1); ori_lon[row] = dataTable.getFloat(row,2); ori_time[row] = dataTable.getFloat(row,7); } numberMax = max(number); idnumMax = max(idnum); lat = new double[idnumMax+1][numberMax+1]; lon = new double[idnumMax+1][numberMax+1]; x = new float[idnumMax+1][numberMax+1]; y = new float[idnumMax+1][numberMax+1]; time = new float[idnumMax+1][numberMax+1]; for(row=1; row<rowMax; row++) { lat[idnum[row]][number[row]] = ori_lat[row]; lon[idnum[row]][number[row]] = ori_lon[row];
83
スマートフォンを用いた行動追跡調査手法の開発
資料編
time[idnum[row]][number[row]] = ori_time[row]; if(Maxlon <= ori_lon[row]){ Maxlon = ori_lon[row]; } if(ori_lon[row] <= Minlon){ Minlon = ori_lon[row]; } if(Maxlat <= ori_lat[row]){ Maxlat = ori_lat[row]; } if(ori_lat[row] <= Minlat){ Minlat = ori_lat[row]; }
} clat=(Maxlat+Minlat)/2; clon=(Maxlon+Minlon)/2;
double mapCenterLat = clat; // 緯度 double mapCenterLon = clon; // 経度 int zoomLevel = 16; // ズームレベル String mapType = GoogleMapper.MAPTYPE_ROADMAP; // 表示の種類 int mapWidth = width; // 横サイズ int mapHeight = height; // 縦サイズ // インスタンスの作成 gMapper = new GoogleMapper(mapCenterLat, mapCenterLon, zoomLevel, mapType, mapWidth, mapHeight);
}
// マップ画像の取得 mapImage = gMapper.getMap();
void draw() { camera(mouseX, mouseY, 300, width/2.0, height/2.0, 0, 0, 0, -1); colorMode(HSB,100); background(99,0,35); image(mapImage, 0, 0); for(row=1; row<rowMax; row++) { x[idnum[row]][number[row]] = (float)gMapper.lon2x(lon[idnum[row]][number[row]]); y[idnum[row]][number[row]] = (float)gMapper.lat2y(lat[idnum[row]][number[row]]); }
}
for(int i=1; i<=idnumMax; i++){ noFill(); strokeWeight(3); stroke(i*5,80,100,100); beginShape(); for(int num=1; num<numberMax; num++) { if(lat[i][num]!=0 || lon[i][num]!=0){ curveVertex(x[i][num],y[i][num],time[i][num]*0.2); } } endShape(); }
84