投稿者「toyoki」のアーカイブ

甲州市バスにおけるWi-Fiパケットセンサーを用いた流動調査について

(このページを含め、調査は準備中です。)

調査について

山梨大学の交通・観光流動研究チームでは甲州市及びバス運行事業者と協力して、観光客や地域住民のバス利用利便性向上を目的として、Wi-Fiパケットセンサーをバスに設置して利用者の流動調査を実施します。

この調査は、バス利用者の乗降停留所の日時、天候等による変化を調査するとともに、市民バスの現在位置(バスロケ)サービスの試行を行うものです。

1.調査方法
スマートフォンや携帯ゲーム機等が発信するWi-Fiアクセスポイント探索電波を受信し、機器固有のMACアドレスを収集します。アドレスを元の情報が類推不可能な文字列へ変換し、得られたデータは統計処理し分析します。

2.プライバシーポリシー
取得する情報には氏名やメールアドレスなどの個人情報は含まれません。MACアドレスは機器に付された番号であり直接には個人を類推することはできませんが、安全のため類推不可能な文字に変換して利用します。
※詳細については、下記「Wi-Fiパケットセンサー計測におけるプライバシー処理をご参照ください。

3.調査期間
平成30年6月(現在準備中)より31年3月31日まで実施し、その後の継続調査については別途お知らせします。

Wi-Fi パケットセンシングに関するプライバシーポリシー

山梨大学・交通・観光流動研究チーム(以下、研究チーム)が実施する、Wi-Fi パケットセンサーに関する調査では、収集した情報の処理と取扱いに関して、以下に記載する内容のプライバシーポリシーを定めて運用します。

1.MACアドレスの収集の目的と取扱い
研究チームはWi-Fi パケットセンサーによるバス利用者の乗降調査を行います。

この計測において取得される被調査者の保有する Wi-Fi 機能を有する機器の MACアドレスには、個人名やメールアドレス等といった個人を特定する情報や個人間の通信内容は含まれません。

また、研究チームではMACアドレスについてプライバシーに配慮した取り扱いを実施することとし、本プライバシー ポリシーにおいてその処理と取扱いを定めることとします。MACアドレスの収集にあたっては、収集するセンサー機器を配置するバスに、計測を行っていることの告知を掲示します。またウェブサイトやその他の広報手段を用いて、計測の実施に関する告知を行います。

2.MACアドレスの利用

MACアドレスの利用は、バス利用者の流動解析を目的として実施するものであり、得られたデータは研究チーム以外では利用しません。

統計処理した成果は学会発表等に利用するほか、バス利便性向上に役立つと判断されれば、甲州市、バス事業者に提供します。

3.MAC アドレスの管理と保管

MACアドレスについては、MACアドレス取得後、元の情報が類推不可能な 無意味な文字列への変換[乱数によるハッシュ化]を行い、元の情報については速やかに消去を行う )を実施し、保護に努めます。さらに、記録ファイルは研究チームメンバー以外が閲覧することがないようパスワード付きの圧縮ファイルにして格納します。

4.取扱いの改善・改良

MACアドレスの取り扱いについては、適宜その改善に努めてまいります。

バスへの掲示

調査中のバスには以下のお知らせを掲示しています。(開始は6月上旬を予定しています。)

 

バスコンシェルジュ掲載の山梨交通バス情報が「YaHoo!路線」等へ反映

2017年2月より「やまなしバスコンシェルジュ」で掲載されている路線バス情報をGTFS形式で公開しています。その変換ソフトウェアは本研究室で作成しました。「コンシェルジュ」データ編集ソフトにも本研究室で開発したものが利用されています。

公開したデータは、関係者のご努力により、GTFS形式のデータはYaHoo!の「路線」サービスに反映されています。(7月から)

また、http://tracker.geops.de/?z=15&s=1&x=15425495.8705&y=4254811.8703&l=transport にも掲載されています。

共通形式にした有難みが実感できます。

MacでコマンドラインPHP

Mac OSXにはデフォルトで、phpが入っています。(今まで知りませんでした。)

適当なエディタを使ってphpプログラムを作成し、ターミナルで実行してみます。下の図はemacsでhello.phpを作成し、ターミナルで実行してみたところです。

php_mac

 

phpの勉強は、僕の授業のページにある「ソフトウェア開発及び演習」のメニューは一つの参考になります。

 

BusMap2とその周辺の仕組みと演習用サーバの立ち上げ

直接、BusMap2にかかわらなくても、一応、仕組みを理解しておいた方がよいかと思うので、自分用のサーバを立ち上げ、データベースの構造を学んだり、動作をテストする環境を整える実習を行います。

コンテンツマネジメントシステム(CMS)であるXOOPSのインストールを最初に行う必要がありますが、XOOPSはデータベースMySQLを使用します。MySQLはrichard.js.yamanashi.ac.jp共通ですが、これに各自のユーザ登録が必要になります。今年は、共通のユーザ名としてlab-memberを用いることにします。(パスワードやその扱いについては、8日及び11日のゼミの時に説明します。)

http://richard.js.yamanashi.ac.jp/~toyoki/labTips/intro2xoops.html

BusMap2のDBテーブル構成は

BusMap2 DataBase tables

richardのデータベースMySQL管理のためのWebツール phpMyAdminへのアクセスは

http://richard.js.yamanashi.ac.jp/phpmyadmin/

 

演習用JSON形式データ(BusMap2関連)

研究室ゼミ用のページに書いておいたが、どこにあるかわかりにくいと思うので、ここに再掲する。

それぞれjsonpとして受け取れる。その場合には、下のようにcallback変数に受け取る関数名を与える。

jQueryでajax

東條君に質問されて、その場ではうまくいかなかったので、ここにメモしておきます。

§9-2にある例をバスマップのxmlデータの処理用に書き直したプログラムです。

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title></title>
<script type="text/javascript" src="jquery-1.10.1.min.js"></script>
<script type="text/javascript">
<!--
    $(document).ready(function () {
        $.ajax({
            url: 'BusCategorizedRouteXml.xml',
            type: 'GET',
            //cache: false,//キャッシュを行う場合はtrue
            dataType: 'xml',
            timeout: 5000,
            success: function (data) {
                $(data).find("item").each(
                    function(){
                        $('#result').append(
                            $('<li></li>').append($(this).attr("name")));
                    }
                );
            }
        });
    });
  /* やっていること:
   * ajaxでurlで指定したものをリクエスト、
   * getできたら、successに指定した関数を実行
   * 関数では
   *  データからitemというタグを探し(find)、
   *  ひとつひとつ(each) <li>タグをつけて、bodyのresult部分に書きだす
   * をことを行なっている。
   */

  //-->
   </script>
</head>
<body>
<ul id="result"></ul>
</body>
</html>

テキストのyahooJquery.htmlにあるDOMの表現(data.Result[i].Titleのような)はjQuery内の関数ではうまく動かないようです。jQueryらしくyahooJquery2.htmlにあるようにfind(), each()関数はうまく動作します。

なお、jQueryの1.6以降(くらい)では、$.ajaxよりも$.get関数をもちいることが一般的なようです。(よりスマートに書けます。)

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title></title>
<script type="text/javascript" src="jquery-1.10.1.min.js"></script>
<script type="text/javascript">
<!--
  $(document).ready(function () {
      $.get('BusCategorizedRouteXml.xml',
            function(data) {
                $(data).find("item").each(function() {
                    $('#result').append(
                        $('<li></li>').append($(this).attr("name")));
                });
            });
  });
  //-->
</script>
</head>
<body>
<ul id="result"></ul>
</body>
</html>

ajaxプログラムのサンプル

8章のyahoo.htmlに相当するサンプルを

http://richard.js.yamanashi.ac.jp/~toyoki/local_test/js2013/getBusRouteXml.html

に置きます。xmlデータを同じディレクトリにおいて、試してみてください。

destination属性も取り出して表示できるようにするといいですね。チャレンジしてください。

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>xmlデータの非同期読み込み(バス路線データを例に)</title>
<script type="text/javascript">
<!--
  function getXHR() {
      var req;
      try {
          req = new XMLHttpRequest();
      } catch(e) {
          try {
              req = new ActiveXObject('Msxml2.XMLHTTP');
          } catch (e) {
              req = new ActiveXObject('Microsoft.XMLHTTP');
          }
      }
      return req;
  }
  
  function asyncSearch() {
      var req = getXHR();
      req.onreadystatechange = function() {
          var result = document.getElementById('result');
          if (req.readyState == 4) {
              if (req.status == 200) {
                  var doc = req.responseXML;
                  var nodes = doc.getElementsByTagName('item'); // itemというタグを配列として取り出す
		  if (nodes.length == 0) {
		      result.innerHTML = '合致するサイトはありませんでした。';
		  } else {
		      var ul = document.createElement('ul');
		      for (var i = 0; i < nodes.length; i++) {
			  var routeName = nodes[i].getAttribute('name'); // xmlから、name属性を抽出し、routeNameに代入
			  var li = document.createElement('li'); // listオブジェクトを生成
			  var textObj =document.createTextNode(routeName); // テキストオブジェクトを生成(内容はrouteNameに入っている文字列)
			  li.appendChild(textObj);
			  ul.appendChild(li);
		      }
		  }
		  result.replaceChild(ul, result.firstChild); //'通信中...'というコンテントを、ul変数に格納されたデータで置き換える。
	      } else {
		  result.innerHTML = 'サーバエラーが発生しました。';
	      }
	  } else {
	      result.innerHTML = '通信中...';
	  }
      }
      req.open('GET', 'BusCategorizedRouteXml.xml', true);
      req.send(null);
  }

  // windowが開かれたらasyncSearch関数を実行するようonload属性に関数名を代入
  window.onload = asyncSearch;
  -->
</script>
</head>

<body>
yahoo.htmlに対応するサンプル
<h2>路線一覧表示</h2>

<div id="result"></div>
</body>
</html>

JSONデータのヘッダー

JSON形式データを生でブラウザで見たとき、日本語文字が化けて見えた件、その情報を送り出す時のヘッダーとして

“Content-type: application/json; charset=utf-8”

としているのだけど、applicationというのが引っかかって、utf-8としてデコードしてくれないのではないかと思います。上のヘッダーは規則どおりなのですが、ブラウザで生にJSONデータをみることは普通はしないので、ブラウザの動作も間違いではないのでしょう。

情報としてはたとえば、http://blog.flatlabs.net/20110304_231535/

最後にちょこっと言ったように、JSONデータのチェック用アドオンを各自のブラウザにいれて、内容をチェックできるようにしておいてください。