はじめに
今回はYOLPの提供するJavaScriptマップAPIを利用して、現在地から指定した場所へのルート検索を行いつつ、ルート上の雨雲状況をビジュアルにチェックできるスマホ・タブレット用のWebアプリ「ルート雨雲チェッカー」を作ってみたいと思います。本文に沿って実際に開発を進めると、簡単にWebアプリを作成できることを実感していただけると思いますので、ぜひお試しください。また「ルート雨雲チェッカー」を今すぐ試したい方は、こちらからご利用いただけますので、あわせてお試しください。
機能概要
今回のWebアプリでは、以下の機能を実装します。PCブラウザなどで現在地が取得できなかった場合は日本へそ公園(注1)を表示します。
- 起動すると、現在地を取得して地図を表示
- 地図上で目的地をタップすると、現在地から目的地までのルート、総距離、総時間、現在地と目的地の住所を表示
- 地図を再度タップすると、目的地を変更し、現在地を再度取得して新しいルートと関連情報を表示
- ルートを表示した地図上に現在の雨雲の状態を重ねて表示
日本へそ公園は兵庫県西脇市上比延町にある公園で、東経135度、北緯35度に位置しており、日本は東経123度~147度、北緯24度~46度の枠に収まっているので、東経135度、北緯35度のこの地点がまさに日本の中心であり“へそ”だということです。
開発環境の準備
アプリケーションIDの登録
これまでの記事でも書かれていますが、YOLPで提供されているAPIを利用するためにはアプリケーションIDが必要になります。すでにアプリケーションIDをお持ちの方はそちらを利用していただき、アプリケーションIDをお持ちでない方、新しいアプリケーションIDの登録を希望する方は、以下のページを参考にアプリケーションIDを登録してください。
なお、アプリケーションIDを登録するためには、Yahoo! JAPAN IDでログインする必要があります。
「ルート雨雲チェッカー」ソースコード
今回のWebアプリ「ルート雨雲チェッカー」のソースコードは以下のとおりです。
前述のとおり、<あなたのアプリケーションID>の部分はご自身で取得されたアプリケーションIDに書き換えてください。
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0,maximum-scale=1.0,minimum-scale=1.0,user-scalable=no"> <meta name="apple-mobile-web-app-capable" content="yes"> <title>ルート雨雲チェッカー</title> <style type="text/css"> html, body { width:100%; height:100%; } html, body, div{ margin:0; padding:0; } div#label{ z-index:2; padding:8px; overflow:hidden; color: #fff; background-color: #000; background-image: -webkit-gradient( linear, 0% 0%, 0% 100%, from(rgba(155, 155, 155, 0.1)), to(rgba(255, 255, 255, 0.5)), color-stop(.5,rgba(155, 155, 155, 0.2)), color-stop(.5,rgba(255, 255, 255, 0.1)) ); border-radius: 8px; opacity: .7; } div#title{ font-size:14pt; font-weight:bold; line-height:1.2em; width:100%; overflow:hidden; } div#cur, div#dst{ font-size:10pt; font-weight:normal; line-height:10pt; overflow:hidden; } div#summary{ font-size:12pt; font-weight:bold; line-height:12pt; overflow:hidden; } </style> <script src="http://js.api.olp.yahooapis.jp/OpenLocalPlatform/V1/jsapi?appid=<あなたのアプリケーションID>"></script> <script src="http://code.jquery.com/jquery-latest.js"></script> <script type="text/javascript"> window.onload = function() { // 地図表示 var map = new Y.Map('map', { configure : { scrollWheelZoom : true, weatherOverlay: true // 雨雲レーダーON } }); map.drawMap(new Y.LatLng(35, 135), 15, Y.LayerSetId.NORMAL); map.addControl(new Y.ZoomControl()); //始点は Geolocation API を使って現在地を取得 var start = new Y.LatLng(35, 135); // 始点 var end; // 終点 if (navigator.geolocation) { navigator.geolocation.getCurrentPosition(function(pos) { start = new Y.LatLng(pos.coords.latitude, pos.coords.longitude); map.panTo(start); }, null, { enableHighAccuracy: true, timeout: 3000, maximumAge: 0 }); } // 終点は地図をタップして設定 map.bind('click', function(pos) { end = pos; // 現在地を取得 if (navigator.geolocation) { navigator.geolocation.getCurrentPosition(function(pos) { start = new Y.LatLng(pos.coords.latitude, pos.coords.longitude); createRoute(start, end); }, function() { // 取れなかった場合 createRoute(start, end); }, { enableHighAccuracy: true, timeout: 3000, maximumAge: 0 }); } }); // ルートを表示するためのレイヤーを設定する var routeSearchLayer = new Y.RouteSearchLayer(); routeSearchLayer.bind('drawend', function(result) { dispRouteInfo(result); }); map.addLayer(routeSearchLayer); // ルートを表示する var createRoute = function(s, e) { if (s && e) { routeSearchLayer.clearRoute(); var config = { enableRestrict: true, // 交通規制を考慮する useCar: true, // 自動車を使う useFerry: true // フェリーを使用する }; routeSearchLayer.execute([s, e], config); } } // ルート情報を表示する var dispRouteInfo = function(result) { $('#summary').html('総距離' + result.TotalDistance + 'm, 総時間' + result.TotalTime + '分'); // 始点と終点の住所を取得して表示 var geocoder = new Y.GeoCoder(); geocoder.execute({latlng: start}, function(r) { $('#cur').html('現在地 : ' + r.features[0].property.Address); }); geocoder.execute({latlng: end}, function(r) { $('#dst').html('目的地 : ' + r.features[0].property.Address); }); } // リサイズ(回転)の時に地図更新 $(window).resize(function() { map.updateSize(); }); } </script> </head> <body> <div id="map" style="width:100%; height:100%;"></div> <div id="label" style="position:absolute; bottom:4px; right:4px; width:64%; height:64px"> <div id="title">ルート雨雲チェッカー</div> <div id="cur">現在地 : </div> <div id="dst">地図をタップして目的地を設定してください</div> <div id="summary"></div> </div> </body> </html>
上記ソースコードは、GitHubよりダウンロードが可能です。
また、コードを簡潔に記述するために、jQuery を利用しています。jQueryの詳しい仕様についてはhttp://jquery.com/などを参考にしてください。
では次項から各パートの解説をしていきます。