GoogleMapsAPI を使って位置情報系のサービスを作ってる人って結構いると思うのですが、そのサービスに
YOLPの
ローカルサーチを使用して付加情報を追加したいって時に、そのままGoogleMapsAPIにYOLPのローカルサーチの情報を追加するパターンと、地図自体をYOLPに変えてしまうという二通りの方法が考えられると思います。
今回はそんなときの参考に、二通りのパターンでWEBサービスを実装してみました。
以下が、そのサービスです。
赤ちゃんとおでかけこのサービスを簡単に説明すると、赤ちゃんとおでかけするときに必要な、授乳室情報とおむつ替えできるスペースの情報を投稿、検索できるサービスになります。
そこに、YOLPを使用して、
スマイリーマム の子供といけるレストランの情報を付加情報としてサービスに追加しました。
YOLPのローカルサーチの使用方法についての詳細は、下記エントリーを参考にしてください。
YOLP(Yahoo! Open Local Platform) で周辺検索
YOLP(Yahoo! Open Local Platform) 自作の検索APIの情報も地図にプロットこのサービスは、パソコン版とスマートフォン版を作っていて、パソコン版の方は、GoogleMapsAPIを使用していて、スマートフォン版はYOLPを使用して実装しています。
同一URLで、UA(ユーザエージェント)によって出しわけをしているのですが、ページの下の方に、パソコン版とスマートフォン版のリンクを用意してあるのでどちらも確認できると思います。
まあ表示はおかしくなっちゃいますが。。。
YOLPは、自分のサービスで使用する場合、アプリケーションIDをとる必要があります。アプリケーションIDの取得は、特に審査とかもなくYahooのアカウントを持っていればすぐに取得できるのですが、GoogleMapsAPIの場合はこのアプリケーションIDが必要なく、いきなりサービスに組み込むことができるため、とりあえず作ってみようかなという時の敷居が低いのもあり、そのまま使い続けることが多いのではないかと思います。
あとは、やはり使っている人も多い分、使い方を説明しているブログも多いですね。ただ、GoogleMapsAPIは現在V3なんですが、V2の解説が結構多かったり、V2では使えた機能がV3ではなかったりするのがちょっと困りますね。。。
やはりYOLPのローカルサーチを使用する場合、YOLPで統一したほうが良いと思うのですが、すでにGoogleMapsAPIで実装済みだとちょっと面倒になってしまいますよね。
そこで、二つの地図サービスを比較しながらGoogleMapsAPIからYOLPに切り替えるにあたってポイントとなる部分を解説していこうと思います。
----------------------------------------------------------------------------------------------------
では、切り替えのための機能ごとのソースコードを記述していきます。
対象の部分だけを記述してあるので、全体のソースは実際のサイトで確認してください。
- 赤ちゃんとおでかけ地図を実際に表示する個所のHTMLGoogleMapsAPI
<
div id=
"map_canvas" style=
"height:480px;width:100%;"></
div>
YOLP
<
div id=
"map" style=
"width:100%;height:240px;"></
div>
id とか、高さの指定は変えてますが一緒ですね。
-------------------------------------------------------------------------------------
緯度経度の変換GoogleMapsAPIvar latlng = new google.maps.LatLng(lat,lon);
YOLPvar latlng = new Y.LatLng(lat,lon);
お互い各機能のの指定方法が違いますが、使い方は一緒ですね。
YOLP は、Y.
GoogleMapsAPI は google.maps で共通です。
-------------------------------------------------------------------------------------
地図の表示GoogleMapsAPIvar myOptions = {
zoom: 14,
center: latlng,
mapTypeId: google,maps.MapTypeId.ROADMAP
}
map = new google.maps.Map(document.getElementById("map_canvas"),myOptions);
YOLPvar ymap = new Y.Map("map");
ymap.drawMap(latlng,16,Y.LayerSetId.NORMAL);
GoogleMapsAPIは、地図オブジェクトを生成するときにオプション情報のセットと描画をしていて、YOLPは地図オブジェクトを生成して、オプション情報をセットして描画っていう感じの記述の違いはありますが、基本的には同じですね。
地図を表示する個所のidの指定。
中心点の指定。
ズームサイズの指定。
地図のタイプ指定。
って感じのことをやってますね。
ズームレベルに関しては微妙な違いがあるので、詳しくはこちらで確認してください。
GoogleMapのズームレベルYOLPのズームレベル----------------------------------------------------------------------------------------------
地図へのコントロールの追加
GoogleMapsAPI
var myOption = {
zoomControl: true,
scaleControl:true,
YOLPymap.addControl(new Y.SliderZoomControlVertical());
ymap.addControl(new Y.ScaleControl());
GoogleMapsAPIは、オプション配列に、コントロールのオン、オフの情報を事前に準備しておき、地図を描画する際にその配列を使う感じですね。
YOLPは、地図オブジェクトに追加したいコントロールをaddControlで追加していく感じですね。
それぞれ追加できコントロールには違いがあるので詳しくは下記を参照ください。
GoogleMapのコントロールYOLPのコントロール-----------------------------------------------------------------------------------------------
オリジナルアイコンでのマーカーの追加 GoogleMapsAPIvar icon = 'http://support-map.geo.jp/images/icon_r.png";
var marker = new google.maps.Marker({
position: latlng,
map: map,
icon: icon
});
YOLPvar icon = new Y.Icon('http://support-map.geo.jp/images/icon_r.png");
var marker = new Y.Marker(latlng,{icon:icon});
ymap.addFeature(marker);
GoogleMapsAPIは地図の描画の際と同様に、マーカーオブジェクトを生成する際に地図への追加と、アイコン画像の指定を行います。
YOLPは、まずアイコンオブジェクトを生成。そしてそのアイコンオブジェクトを指定してマーカーオブジェクトを生成。最後に地図オブジェクトへマーカーを追加する感じになります。
この辺の書き方は好みが出そうですね。
-----------------------------------------------------------------------------------------------
イベントの指定 - 地図を動かしたときのアクション指定GoogleMapsAPIgoogle.maps.event.addListener(map, 'dragend',function(){
//地図のドラッグが終わったらなにかの処理
});
YOLP ymap.bind('moveend',function(){
//地図のドラッグが終わったらなにかの処理
});
GoogleMapsAPIは、イベントリスナーに対象(この場合地図)と、イベント(ドラッグの終了)、その際のアクションを指定する感じです。
YOLPは、地図オブジェクトに、イベント(ドラッグの終了)とその際のアクションを指定する感じですね。
-------------------------------------------------------------------------------------------------
イベントの指定 - マーカーをクリックしたときのアクション指定GoogleMapsAPI
google.maps.event.addListener(marker, 'click',function(){
//マーカーをクリックしたらなにかの処理
});
YOLP
marker.bind('click',function(){
//マーカーをクリックしたらなにかの処理
});
地図への指定と同様、
GoogleMapsAPIは、イベントリスナーに対象(この場合マーカー)と、イベント(クリック)、その際のアクションを指定する感じです。
YOLPは、マーカーオブジェクトに、イベント(クリック)とその際のアクションを指定する感じですね。
イベントの種類と内容に関しては以下を参照ください
GoogleMapのイベントYOLPのイベント------------------------------------------------------------------------------------------------
中心点の取得GoogleMapsAPIvar latlng = map.getCenter();
YOLPvar latlng = ymap.getCenter();
これは同じですね。
------------------------------------------------------------------------------------------------
地図の4隅の取得GoogleMapsAPI
var bounds = map.getBounds();
var max_lat = bounds.getNorthEast().lat();
var min_lat = bounds.getSouthWest().lat();
var max_lon = bounds.getNorthEast().lng();
var min_lon = bounds.getSouthWest().lng();
YOLP
var bounds = ymap.getBounds();
var max_lat = bounds.getNorthEast().lat();
var min_lat = bounds.getSouthWest().lat();
var max_lon = bounds.getNorthEast().lng();
var min_lon = bounds.getSouthWest().lng();
こちらも同じですね。
--------------------------------------------------------------------------------------------------
ざっと基本的な部分の比較をしてみましたが、基本的な機能はほぼ同じものがそろっていて、記述方法の違いもそこまで切り替えをする際に戸惑うこともないかなという感じかと思います。
結構長くなってしまったので一旦ここまでにして、次回は残りの部分の解説を行おうと思います。
関連
YOLPで周辺検索 - coding note