Yahoo! JavaScriptマップAPIの使い方
Google Maps APIじゃなくてあえてYahoo! JavaScriptマップAPIを勉強してみました。
理由としてはGoogleはゼンリンじゃなくなって、Yahooはゼンリンだからが理由です。私はゼンリン地図で育っております。ちなみに、ズームレベル20~11の詳細な地図については、株式会社ゼンリンから提供された情報をもとに作成されいてるようです。ズームレベルを11から10に変えるとコピーライトが変わります!
Yahoo! JavaScriptマップAPIですが、yahoo idがあればだれでも無料で使えます。まずはappidを発行してもらいます。(割愛)
一番簡単な地図の表示方法です。
<!DOCTYPE html> <html> <head> <script src="https://code.jquery.com/jquery-3.2.1.min.js"></script> <script type="text/javascript" charset="utf-8" src="https://map.yahooapis.jp/js/V1/jsapi?appid="発行してもらって~""></script> <script> $(function(){ var ymap = new Y.Map("google"); ymap.drawMap(new Y.LatLng(34.6733039, 135.4969214), 17, Y.LayerSetId.NORMAL); }); </script> </head> <body> <div id="google" style="width:400px; height:300px;margin:0 auto;"></div> </body> </html>
Y.Mapをnewする
まずここから始まります。Y.Mapは地図です。drawMapメソッドは地図を表示するメソッドです。このメソッドを実行して初めてコンテナに地図が表示されます。
Y.Mapの引数は地図を表示するコンテナのid属性を指定します。ここではidはgoogleにしてます。
drawMapの引数は3つ必要
1つ目…new Y.Lating(緯度,経度)
2つ目…ズームレベル
3つ目…レイヤーセットID
1つ目で表示したい緯度経度を与えます。2つ目で地図のズームレベルを与えます。3つ目でレイヤーセットIDという標準地図だったり航空写真だったりを指定します。
ズームレベルはY.LayerSetId.NORMALの場合は1~20までですが、レイヤーセットIDによって指定できる範囲は異なります。
ズームレベルをスライダーで表示する
できます。地図を表示した後に以下1行追加するだけです。
ymap.addControl(new Y.SliderZoomControlVertical());
レイヤーを表示する
できます。地図を表示した後に以下1行追加するだけです。
地図、航空写真、地下街が表示されるようになります。変更することによりズームレベルの選択範囲も動的に変わります。
ymap.addControl(new Y.LayerSetControl());
レイヤー表示したけど航空写真だけ非表示にしたい
できます。一旦addControlでレイヤー表示した後にremoveLayerSetメソッドを実行し、引数にレイヤーセットIDを指定して削除します。
ymap.addControl(new Y.LayerSetControl()); ymap.removeLayerSet(Y.LayerSetId.PHOTO); // 航空写真のみ削除
指定できるレイヤーセットIDは以下の通りです。
レイヤーセットID | |
---|---|
Y.LayerSetId.NORMAL | 標準地図 |
Y.LayerSetId.PHOTO | 航空写真 |
Y.LayerSetId.B1 | 地下街 |
Y.LayerSetId.OSM | OpenStreetMap |
コントロール位置を指定する
ズームレベルはデフォルトはTOP_LEFTのようです。試しにTOP_RIGHTにしてみました。
ControlPositionクラスを使用します。ここではズームレベルを右上、レイヤーを右下に表示しました。
var position1 = new Y.ControlPosition(Y.ControlPosition.TOP_RIGHT); var position2 = new Y.ControlPosition(Y.ControlPosition.BOTTOM_RIGHT); ymap.addControl(new Y.SliderZoomControlVertical(), position1); ymap.addControl(new Y.LayerSetControl(), position2);
ズームレベルが地図から見切れてしまっていますね、、。どうしよう。。
コントロール位置をオフセット位置調整する
Sizeクラスを使えばオフセット位置を調整できるようです。ズームレベルに対してだけ位置調整しました。
ControlPositionクラスの第二引数にSizeクラスを指定します。
var offset = new Y.Size(40, 0); // Sizeクラス生成 var position1 = new Y.ControlPosition(Y.ControlPosition.TOP_RIGHT, offset); // 第二引数に指定しておく var position2 = new Y.ControlPosition(Y.ControlPosition.BOTTOM_RIGHT); ymap.addControl(new Y.SliderZoomControlVertical(), position1); ymap.addControl(new Y.LayerSetControl(), position2);
これでズームレベルの位置を微妙に調整することが出来ました。
雨雲レーダーをオーバーレイして表示する
地図に雨雲レーダーを重ねて表示することができます。
Mapクラスの第二引数にはオプションが指定できます。このオプションでweatherOverlay: true
とすることで雨雲レーダーが表示されるようになります。
<!DOCTYPE html> <html> <head> <script src="https://code.jquery.com/jquery-3.2.1.min.js"></script> <script type="text/javascript" charset="utf-8" src="https://map.yahooapis.jp/js/V1/jsapi?appid=発行してもらって~"></script> <script> $(function(){ var ymap = new Y.Map("google", {configure : {weatherOverlay: true}}); // この設定が必要 ymap.drawMap(new Y.LatLng(34.6733039, 135.4969214), 14, Y.LayerSetId.NORMAL); // ズームレベルは15以下じゃないとだめ var offset = new Y.Size(40, 0); var position1 = new Y.ControlPosition(Y.ControlPosition.TOP_RIGHT, offset); var position2 = new Y.ControlPosition(Y.ControlPosition.BOTTOM_RIGHT); ymap.addControl(new Y.SliderZoomControlVertical(), position1); ymap.addControl(new Y.LayerSetControl(), position2); }); </script> </head> <body> <div id="google" style="width:400px; height:300px;margin:0 auto;"></div> </body> </html>
雨雲レーダーを表示する際にズームレベルが15以下でないと表示されないようです。ここでは14としています。
住所から検索して地図を移動する
住所を入力するコントロールがあります。Y.SearchControlというコントロールを使用すれば検索することが可能です。次の1行を追加します。
ymap.addControl(new Y.SearchControl());
これで住所入力欄が左上に表示されます。
他にもイベントとか地図上にオブジェクトを表示したりいろいろできますが、詳細は公式サイトを見てください。
KHI入社して退社。今はCONFRAGEで正社員です。関西で140-170/80~120万から受け付けております^^
得意技はJS(ES6),Java,AWSの大体のリソースです
コメントはやさしくお願いいたします^^
座右の銘は、「狭き門より入れ」「願わくは、我に七難八苦を与えたまえ」です^^
コメント