SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Yahoo! Open Local Platform Hacks

YOLP Hacks:API群を組み合わせてオリジナルWebアプリケーションを作る

Yahoo! Open Local Platform Hacks 第5回

個々の機能実装

ベースとなる地図を表示

 まずは、JavaScriptマップAPIを読み込み、ベースとなるスクロール地図を表示します。

 今回はヒートマップを重ねた時の見栄えを考慮して、航空写真地図の上に地名などの注記情報を表示したハイブリッド表現のレイヤーセットを使います。

<!DOCTYPE html>
<html>
<head>

<meta charset="UTF-8">
<title>JavaScriptマップAPI x ローカルサーチAPI x ヒートマップ</title>
</head>
<body>
<div style="width:620px; margin-left:auto; margin-right:auto;">
<h1>東京23区マクドナルド分布</h1>

<div id="map" style="width:600px; height:480px;"></div>

<p>
<!-- Begin Yahoo! JAPAN Web Services Attribution Snippet -->
<a href="http://developer.yahoo.co.jp/about">
<img src="http://i.yimg.jp/images/yjdn/yjdn_attbtn1_125_17.gif" title="Webサービス by Yahoo! JAPAN" alt="Web Services by Yahoo! JAPAN" width="125" height="17" border="0" style="margin:15px 15px 15px 15px"></a>
<!-- End Yahoo! JAPAN Web Services Attribution Snippet -->
</p>

</div>
<script src="http://js.api.olp.yahooapis.jp/OpenLocalPlatform/V1/jsapi?appid=<あなたのアプリケーションID>"></script>
<script>
// 地図のオプションを指定
var mapOptions = {
    "configure": {
        "hybridPhoto": true,
        "scrollWheelZoom": true
    }
};
// 地図を初期化
var map = new Y.Map("map", mapOptions);
map.addControl(new Y.LayerSetControl());
map.addControl(new Y.ZoomControl());
map.drawMap(new Y.LatLng(35.665627,139.730738), 13, Y.LayerSetId.PHOTO);

</script>
</body>
</html>

 これで今回のWebアプリケーションのベースとなるスクロール地図の準備ができました。

地名から位置情報を取得

 選択された地点の位置情報を取得するにはジオコーダAPIを利用します。

 JavaScriptマップAPIのY.GeoCoderオブジェクトを使えば、次のようにして「東京都港区」の緯度経度を知ることができます。

var geoCoder = new Y.GeoCoder();
var request = {
    "query": "東京都港区"
};
geoCoder.execute(request, function(ydf) {
    var hasResult = ydf.result.count > 0;
    if (hasResult) {
        // 「東京都港区」のジオコーディング結果を取得
        var latlng = ydf.features[0].latlng;
    }
});

 ここを任意のqueryで検索できるようにすることで、今回のWebアプリケーションの要件は満たせそうです。

指定の位置を中心とした周囲のショップ情報を検索してYDFで取得

 ジオコーダAPIで取得した位置情報から、周辺のショップ情報を検索するのにはローカルサーチAPIを利用します。

 ローカルサーチAPIは多くの店舗やイベントを検索することができますが、今回はYOLPカセットギャラリーに日本マクドナルド株式会社から「オフィシャルカセット」として提供されている「マクドナルド店舗情報」を検索対象に指定します。

 ローカルサーチAPIに指定する、具体的なリクエストパラメータは次のとおりです。

パラメータ 指定する値
appid <あなたのアプリケーションID>
cid d115e2a62c8f28cb03a493dc407fa03f
sort dist(距離を中心にソート)
results 100(一度に最大100件を取得)
dist 5(中心から5km圏内を検索)
lat ジオコーダAPIで取得した緯度
lon ジオコーダAPIで取得した経度

 先ほどの「東京都港区」でジオコーディングした位置情報を使うと、次のようなURLでローカルサーチAPIを呼ぶことになります。

http://search.olp.yahooapis.jp/OpenLocalPlatform/V1/localSearch?appid=<あなたのアプリケーションID>&cid=d115e2a62c8f28cb03a493dc407fa03f&sort=dist&results=100&dist=5&lat=35.6528678&lon=139.73720093

 WebブラウザのアドレスバーにURLを貼り付けて、検索結果をYDF(YOLP Data Format)で取得できていることを確認してみてください。

YDFをヒートマップ表現でプロット

 YDFで受け取ったのショップ情報の検索結果をJavaScriptマップAPI上に重ねて表示するには、Y.GeoXmlHeatmapLayerオブジェクトを利用します。

 変数cassetteUrlにローカルサーチAPIのURLが格納されているとき、次のようにY.Mapオブジェクトに追加することで重ね合わせが実現できます。

var heatmapLayer = new Y.GeoXmlHeatmapLayer(cassetteUrl);
map.addLayer(heatmapLayer);

次のページ
すべての機能を1つのプラグインとして統合する

この記事は参考になりましたか?

Yahoo! Open Local Platform Hacks連載記事一覧

もっと読む

この記事の著者

近藤 宏幸(ヤフー株式会社)(コンドウ ヒロユキ(ヤフーカブシキガイシャ))

2008年ヤフー入社。POIを管理する社内ツールの整備と並行して「Yahoo! Open Local Platform(略称:YOLP)」のJavaScriptマップAPI、SilverlightマップAPIの実装・ドキュメンテーション・開発環境整備を担当している。ビールが好き。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/6103 2011/08/23 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー