Google Mapに表示することの出来る交通渋滞情報が思っていたよりも便利。Traffic Layer(交通渋滞情報レイヤー) をiPhone(スマートフォン用端末)地図に追加してみます。
出来れば、iPhone(スマートフォン端末)の画面をタップしたら表示/非表示を繰り返すことが出来るような手軽なものに。
1.画面タップ用のボタン
jQtouchのボタンの中からclass=”whiteButton”を選択。
これを狭い画面でも邪魔にならないように半透明で設置します(参照記事:全てのブラウザに対応したcssスタイルシートの透明、半透明の背景設定を記述する)。
次に、画面タップを受け付けるようにonclickイベント処理を割り当てます。
<a href="#" class="whiteButton" onclick="toggletraffic()" style="background-color:transparent;filter:alpha(opacity=65);-moz-opacity:0.6;opacity:0.6;"></a>
2.ベースの地図を選択
前回jQtouch用に現在の位置座標を収得するデモ(watchPosition/clearWatch)を作ってあるので、これにTraffic Layer関係のソースを追加変更していきます(朱書き部)。
<!doctype html>
<html>
<head>
<meta charset="UTF-8" />
<title>Google Map Traffic Layer Demo for Smartphone/iPhone</title>
<style type="text/css" media="screen">@import "../../themes/css/jqtouch.css";</style>
<script src="../../src/lib/zepto.min.js" type="text/javascript" charset="utf-8"></script>
<script src="../../src/jqtouch.min.js" type="text/javascript" charset="utf-8"></script>
<!--ここからGoogle Maps API v3 -->
<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=true"></script>
<meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
<script type="text/javascript" charset="utf-8">
var jQT = new $.jQTouch({
icon: 'jqtouch.png',
addGlossToIcon: false,
startupScreen: 'jqt_startup.png',
statusBar: 'black'
});
</script>
<link rel="stylesheet" href="http://waox.main.jp/iPhonemap2/css/iPhone-map.css" type="text/css" />
<script type="text/javascript">
//◆個別に指定する初期表示の設定
var zoom = 12;
var mapTypeId = google.maps.MapTypeId.ROADMAP
</script>
<script type="text/javascript">
//<![CDATA[
var watchId=0;
var initialLocation;
var tokyo = new google.maps.LatLng(35.68971, 139.69168);
var browserSupportFlag = new Boolean();
var map, trafficLayer;
var infowindow = new google.maps.InfoWindow();
var geowindow = new google.maps.InfoWindow();
var position;
var ini;
function initialize()
{
var myOptions =
{
disableDefaultUI: false,//◆API のデフォルトの UI 設定をオフ(無効)にしたい場合は”true”
//◆ナビゲーションコントロール
navigationControl: true,
navigationControlOptions:
{
//◆通常 ズームコントロール
//style: google.maps.NavigationControlStyle.DEFAULT,
style: google.maps.NavigationControlStyle.SMALL,
position: google.maps.ControlPosition.LEFT_TOP
//◆Android ズームコントロール
//style:google.maps.NavigationControlStyle.ANDROID,
//position: google.maps.ControlPosition.BOTTOM_CENTER
},
//◆マップタイプコントロール
mapTypeControl: true,
mapTypeControlOptions:
{
style: google.maps.MapTypeControlStyle.DROPDOWN_MENU,
//style: google.maps.MapTypeControlStyle.DEFAULT,
//style: google.maps.MapTypeControlStyle.HORIZONTAL_BAR,
position: google.maps.ControlPosition.TOP_RIGHT
},
//◆スケールコントロール
scaleControl: true,
scaleControlOptions:
{
//◆指定無しの場合左下になる
//position: google.maps.ControlPosition.RIGHT_TOP
//position: google.maps.ControlPosition.TOP_CENTER
//position: google.maps.ControlPosition.BOTTOM_CENTER
},
zoom: zoom,
mapTypeId: mapTypeId
};
map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
startLocationTracking();
trafficinfo()
}
function trafficinfo()
{
trafficLayer = new google.maps.TrafficLayer();
trafficLayer.setMap(map);
trafficLayer.setMap(trafficLayer.getMap() ? null : map);
}
function toggletraffic()
{
trafficLayer.setMap(trafficLayer.getMap() ? null : map);
}
function startLocationTracking()
{
divblock('inside');//◆watchPosition gif表示
divblock('mylocation');//◆mylocation表示
//◆座標収得
if(navigator.geolocation)
{
browserSupportFlag = true;
watchId = navigator.geolocation.watchPosition(function(position)
{
initialLocation = new google.maps.LatLng(position.coords.latitude,position.coords.longitude);
map.setCenter(initialLocation);
showCurrentLocation(position);
//◆現在地マーカー
var ini = new google.maps.Marker(
{
position:initialLocation,
map: map,
title: '現在位置',
draggable: false,
icon: 'http://waox.main.jp/maps/icon/car2.png',
animation: google.maps.Animation.DROP
});
},
function()
{
handleNoGeolocation(browserSupportFlag);
});
}
else
{
// Browser doesn't support Geolocation
browserSupportFlag = false;
handleNoGeolocation(browserSupportFlag);
}
google.maps.event.addListener(map, 'dragend', function() //◆地図を移動(ドラッグ)するとclearWatch
{
if (watchId > 0)
{
navigator.geolocation.clearWatch(watchId);
divnone('inside');//◆watchPosition gif表示
divnone('mylocation');//◆mylocation表示
}
});
}
//◆現在地座標表示
function showCurrentLocation(position)
{
document.getElementById("mylocation").innerHTML = "Lat:" + position.coords.latitude.toFixed(7) + " , Lng:" + position.coords.longitude.toFixed(7) ;
}
function handleNoGeolocation(errorFlag)
{
if (errorFlag == true)
{
initialLocation = tokyo;
contentString = "位置を特定できません。サポートされていないブラウザです。東京都庁を表示します。";
}
else
{
initialLocation = tokyo;
contentString = "位置を特定できません。サポートされていないブラウザです。東京都庁を表示します。";
}
map.setCenter(initialLocation);
geowindow .setContent(contentString);
geowindow .setPosition(initialLocation);
geowindow .open(map);
}
//div表示の切換え
function divblock(id)
{
var ele = document.getElementById(id);
ele.style.display = 'block';
}
//div非表示の切換え
function divnone(id)
{
var ele = document.getElementById(id);
ele.style.display = 'none';
}
window.onload=initialize;
//]]>
</script>
</head>
<body>
<div id="traffic">
<div id="getlocation">
<div class="toolbar">
<h1>Traffic Layer</h1>
<a class="button flip" id="infoButton" href="#about">説明</a>
<a class="button leftButton" target="_webapp" href="../main/index.html#home">Home</a>
</div>
<input type="button" value="現在位置を追跡" onclick="startLocationTracking()" style="width : 100%;" />
<div id="mylocation" align="center" style="color : white;">
</div>
<div id="map_canvas" >
</div>
<div id="inside"><img src="http://waox.main.jp/maps/gif/Earth-06-june.gif" width="30" height="30" border="0" /></div>
</div>
<div id="traffic_button">
<table border="0">
<tbody>
<tr>
<td>
<ul class="edit rounded" style="text-align : center;font-size : 12px;" >
道路渋滞情報<br/><a href="#" class="whiteButton" onclick="toggletraffic()" style="background-color:transparent;filter:alpha(opacity=65);-moz-opacity:0.6;opacity:0.6;"></a>
</ul>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<div id="about">
<div class="toolbar">
<h1>地図の説明</h1>
<a class="button flip" id="infoButton" href="#traffic">Back</a>
</div>
<div>
<form class="scroll">
<ul class="edit rounded">
<li>Traffic Layerの使用方法</li>
<li><p style="font-size : 14px;">地図中央下部のボタンをタップする度に、Traffic LayerのON/OFFを行います。</p></li>
</ul>
</form>
<a style="margin:30px 10px;color:rgba(0,0,0,.9)" href="#traffic" class="whiteButton goback">Back</a>
</div>
</div>
</body>
</html>
コピペ用
<!doctype html>
<html>
<head>
<meta charset="UTF-8" />
<title>Google Map Traffic Layer Demo for Smartphone/iPhone</title>
<style type="text/css" media="screen">@import "../../themes/css/jqtouch.css";</style>
<script src="../../src/lib/zepto.min.js" type="text/javascript" charset="utf-8"></script>
<script src="../../src/jqtouch.min.js" type="text/javascript" charset="utf-8"></script>
<!--ここからGoogle Maps API v3 -->
<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=true"></script>
<meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
<script type="text/javascript" charset="utf-8">
var jQT = new $.jQTouch({
icon: 'jqtouch.png',
addGlossToIcon: false,
startupScreen: 'jqt_startup.png',
statusBar: 'black'
});
</script>
<link rel="stylesheet" href="http://waox.main.jp/iPhonemap2/css/iPhone-map.css" type="text/css" />
<script type="text/javascript">
//◆個別に指定する初期表示の設定
var zoom = 12;
var mapTypeId = google.maps.MapTypeId.ROADMAP
</script>
<script type="text/javascript">
//<![CDATA[
var watchId=0;
var initialLocation;
var tokyo = new google.maps.LatLng(35.68971, 139.69168);
var browserSupportFlag = new Boolean();
var map, trafficLayer;
var infowindow = new google.maps.InfoWindow();
var geowindow = new google.maps.InfoWindow();
var position;
var ini;
function initialize()
{
var myOptions =
{
disableDefaultUI: false,//◆API のデフォルトの UI 設定をオフ(無効)にしたい場合は”true”
//◆ナビゲーションコントロール
navigationControl: true,
navigationControlOptions:
{
//◆通常 ズームコントロール
//style: google.maps.NavigationControlStyle.DEFAULT,
style: google.maps.NavigationControlStyle.SMALL,
position: google.maps.ControlPosition.LEFT_TOP
//◆Android ズームコントロール
//style:google.maps.NavigationControlStyle.ANDROID,
//position: google.maps.ControlPosition.BOTTOM_CENTER
},
//◆マップタイプコントロール
mapTypeControl: true,
mapTypeControlOptions:
{
style: google.maps.MapTypeControlStyle.DROPDOWN_MENU,
//style: google.maps.MapTypeControlStyle.DEFAULT,
//style: google.maps.MapTypeControlStyle.HORIZONTAL_BAR,
position: google.maps.ControlPosition.TOP_RIGHT
},
//◆スケールコントロール
scaleControl: true,
scaleControlOptions:
{
//◆指定無しの場合左下になる
//position: google.maps.ControlPosition.RIGHT_TOP
//position: google.maps.ControlPosition.TOP_CENTER
//position: google.maps.ControlPosition.BOTTOM_CENTER
},
zoom: zoom,
mapTypeId: mapTypeId
};
map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
startLocationTracking();
trafficinfo()
}
function trafficinfo()
{
trafficLayer = new google.maps.TrafficLayer();
trafficLayer.setMap(map);
trafficLayer.setMap(trafficLayer.getMap() ? null : map);
}
function toggletraffic()
{
trafficLayer.setMap(trafficLayer.getMap() ? null : map);
}
function startLocationTracking()
{
divblock('inside');//◆watchPosition gif表示
divblock('mylocation');//◆mylocation表示
//◆座標収得
if(navigator.geolocation)
{
browserSupportFlag = true;
watchId = navigator.geolocation.watchPosition(function(position)
{
initialLocation = new google.maps.LatLng(position.coords.latitude,position.coords.longitude);
map.setCenter(initialLocation);
showCurrentLocation(position);
//◆現在地マーカー
var ini = new google.maps.Marker(
{
position:initialLocation,
map: map,
title: '現在位置',
draggable: false,
icon: 'http://waox.main.jp/maps/icon/car2.png',
animation: google.maps.Animation.DROP
});
},
function()
{
handleNoGeolocation(browserSupportFlag);
});
}
else
{
// Browser doesn't support Geolocation
browserSupportFlag = false;
handleNoGeolocation(browserSupportFlag);
}
google.maps.event.addListener(map, 'dragend', function() //◆地図を移動(ドラッグ)するとclearWatch
{
if (watchId > 0)
{
navigator.geolocation.clearWatch(watchId);
divnone('inside');//◆watchPosition gif表示
divnone('mylocation');//◆mylocation表示
}
});
}
//◆現在地座標表示
function showCurrentLocation(position)
{
document.getElementById("mylocation").innerHTML = "Lat:" + position.coords.latitude.toFixed(7) + " , Lng:" + position.coords.longitude.toFixed(7) ;
}
function handleNoGeolocation(errorFlag)
{
if (errorFlag == true)
{
initialLocation = tokyo;
contentString = "位置を特定できません。サポートされていないブラウザです。東京都庁を表示します。";
}
else
{
initialLocation = tokyo;
contentString = "位置を特定できません。サポートされていないブラウザです。東京都庁を表示します。";
}
map.setCenter(initialLocation);
geowindow .setContent(contentString);
geowindow .setPosition(initialLocation);
geowindow .open(map);
}
//div表示の切換え
function divblock(id)
{
var ele = document.getElementById(id);
ele.style.display = 'block';
}
//div非表示の切換え
function divnone(id)
{
var ele = document.getElementById(id);
ele.style.display = 'none';
}
window.onload=initialize;
//]]>
</script>
</head>
<body>
<div id="traffic">
<div id="getlocation">
<div class="toolbar">
<h1>Traffic Layer</h1>
<a class="button flip" id="infoButton" href="#about">説明</a>
<a class="button leftButton" target="_webapp" href="../main/index.html#home">Home</a>
</div>
<input type="button" value="現在位置を追跡" onclick="startLocationTracking()" style="width : 100%;" />
<div id="mylocation" align="center" style="color : white;">
</div>
<div id="map_canvas" >
</div>
<div id="inside"><img src="http://waox.main.jp/maps/gif/Earth-06-june.gif" width="30" height="30" border="0" /></div>
</div>
<div id="traffic_button">
<table border="0">
<tbody>
<tr>
<td>
<ul class="edit rounded" style="text-align : center;font-size : 12px;" >
道路渋滞情報<br/><a href="#" class="whiteButton" onclick="toggletraffic()" style="background-color:transparent;filter:alpha(opacity=65);-moz-opacity:0.6;opacity:0.6;"></a>
</ul>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<div id="about">
<div class="toolbar">
<h1>地図の説明</h1>
<a class="button flip" id="infoButton" href="#traffic">Back</a>
</div>
<div>
<form class="scroll">
<ul class="edit rounded">
<li>Traffic Layerの使用方法</li>
<li><p style="font-size : 14px;">地図中央下部のボタンをタップする度に、Traffic LayerのON/OFFを行います。</p></li>
</ul>
</form>
<a style="margin:30px 10px;color:rgba(0,0,0,.9)" href="#traffic" class="whiteButton goback">Back</a>
</div>
</div>
</body>
</html>
コチラの記事も参考までに「交通渋滞情報レイヤーと交通情報ImageMapType」
◆Google Maps JavaScript API V3 サンプル
◆Google Maps JavaScript API V3
関連記事一覧
スポンサードリンク






Leave a Comment