このページの本文へ

古籏一浩のJavaScriptラボ ― 第28回

加速度センサーで操縦する地図サイトを作ろう

2010年03月12日 11時00分更新

古籏一浩

  • この記事をはてなブックマークに追加
  • 本文印刷

傾けた方向にGoogleマップを移動させる

 加速度の値の取得方法が分かったところで、今度は地図を動かしてみましょう。まずGoogleマップを表示する領域(コンテナ)を用意します。ここではID名に「map_canvas」と付けた空のdiv要素を用意しました。

 ページ内容が読み込まれたら、Googleマップをnew google.maps.Map()として生成し表示します。地図のスタート地点(デフォルト位置)は後ほどGeo Location APIで変更しますが、ここではひとまず秋葉原駅にしてあります。位置を変更したい場合は以下の2行の値を変えてください。


var lat = 35.698179;
var lng = 139.772489;


 次に、PCを傾けた方向に地図を移動させます。デフォルトの位置を示す変数lat, lngに加速度センサーの値を加算していき、新たな位置をsetCenter()を使って設定します。これで、PCを傾けた方向に地図が移動するようになります(サンプル02)。ズームアウトすると地図はゆっくりと移動します。

傾けた方向に地図がスクロールする
サンプル02。傾けた方向に地図がスクロールする

サンプル02[HTML]


<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="ja">
    <head>
        <meta http-equiv="content-type" content="text/html;charset=utf-8">
        <title>Sample</title>
        <script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script>
        <link rel="stylesheet" href="css/main.css" type="text/css" media="all">
        <script type="text/javascript" src="js/sample.js"></script>
    </head>
    <body>
        <h1>傾けた方向にグーグルマップを移動させる</h1>
        <div id="map_canvas"></div>
        <div id="sensor"></div>
    </body>
</html>


サンプル02[JavaScript:sample.js]


var gmap;
var lat = 35.698179;
var lng = 139.772489;
window.addEventListener("MozOrientation", function(orientData){
    var x = orientData.x; // 左右方向の傾き
    var y = orientData.y; // 奥~手前方向の傾き
    lng = lng + Math.round(x * 1000) / 10000000;
    lat = lat - Math.round(y * 1000) / 10000000;
    gmap.setCenter(new google.maps.LatLng(lat, lng)); // 現在地をマップの中心座標に設定
    document.getElementById("sensor").innerHTML = "x:"+x+"<br>y:"+y;
}, true);
window.addEventListener("load", function(){
    gmap = new google.maps.Map(document.getElementById("map_canvas"), {
        zoom : 19,
        center : new google.maps.LatLng(lat, lng),
        mapTypeId : google.maps.MapTypeId.ROADMAP
    });
}, true);


 スクロール速度を変えたい場合は、以下の2行の10000000の数値を変更してください。PCに搭載されている加速度センサーの精度によっては、x, yを別々に設定した方がよいかもしれません。


lng = lng + Math.round(x * 1000) / 10000000;
lat = lat - Math.round(y * 1000) / 10000000;


この連載の記事

ASCII.jp会員サービス 週刊Web Professional登録

Webディレクター江口明日香が行く

みんなが買ってる最新アイテムはコレだ!

VOCALOID3 スターターIA ARIA ON THE PLANETES

VOCALOID3 スターターIA ARIA ON THE PLANETES

ヤマハ

17,745円〜

24人が購入

Google上位表示 64の法則 (WEB PROFESSIONAL)

Google上位表示 64の法則 (WEB PROFESSIONAL)

アスキー・メディアワークス

2,499円〜

71人が購入

標準HTML5タグリファレンス (WEB PROFESSIONAL)

標準HTML5タグリファレンス (WEB PROFESSIONAL)

アスキー・メディアワークス

2,205円〜

60人が購入

Speck MacBook Air 13型 See Thru - Clear SPK-MBA13-SEE-CLR

Speck MacBook Air 13型 See Thru - Clear SPK-MBA13-SEE-CLR

スペックコンピュータ

4,262円〜

23人が購入

jQuery Mobile スマートフォンサイト デザイン入門 (WEB PROFESSIONAL)

jQuery Mobile スマートフォンサイト デザイン入門 (WEB PROFESSIONAL)

アスキー・メディアワークス

2,499円〜

39人が購入

メモリーカード 32GB (PCH-Z321J)

メモリーカード 32GB (PCH-Z321J)

ソニー・コンピュータエンタテインメント

7,772円〜

9人が購入

Windows 7 Home Premium 通常版 Service Pack 1 適用済み

Windows 7 Home Premium 通常版 Service Pack 1 適用済み

マイクロソフト

20,271円〜

4人が購入

iPhone 4S/4 防指紋性・高光沢機能性フィルム PRO GUARD AF for iPhone 4S/4 / PGAF-IPH4

iPhone 4S/4 防指紋性・高光沢機能性フィルム PRO GUARD AF for iPhone 4S/4 / PGAF-IPH4

マイクロソリューション Micro Solution Inc.

59人が購入

Amazon.co.jp