スタートページ> Javascript Google Maps Google Maps API の基礎
「Google Maps API の基礎」に関連したいくつかのTipsを掲げます。ここでは、よく使われる機能を対象にし、マーカーのアイコン変更に関しては「Google Maps API:マーカーのアイコン変更」で扱います。
ここで扱う機能一覧です。適当に[ボタン]をクリックして右の地図の変化を確認してください。
(実行)最初および最初の状態に戻すときに行ないます。 (環境設定)クリックした地点の緯度・経度・住所を表示します。この環境は、他のボタンをクリックしても維持されます。→説明 (実行)「岩槻城址公園」のマーカーの追加・削除をします。→説明
(実行)
(環境設定) (実行)岩槻駅から岩槻文化公園までの道順 |
ここでは、を標準例といい、そのソースコードを標準ソースコードといいます。
スクリプト <script src="https://maps.googleapis.com/maps/api/js?key=xxxxx" async defer"></script> // A <script src="sample/script.js"></script> // B <script> // 「JSファイル」で設定され入力されるグローバル変数 // var 場所 = new Array(); // var 緯度 = new Array(); // var 経度 = new Array(); // var URL = new Array(); // 岩槻城址公園 // 場所[0] = "岩槻城址公園"; // 緯度[0] = 35.95055; 経度[0] = 139.7109; // URL[0] = "joushi-kouen.html"; // 岩槻文化公園 // 場所[1] = "岩槻文化公園"; // 緯度[1] = 35.944516; 経度[1] = 139.722584; // URL[1] = "bunka-kouen.html"; // 岩槻駅 // 場所[2] = "岩槻駅"; // 緯度[2] = 35.949492; 経度[2] = 139.69305; // URL[2] = "iwatuki-eki.html"; // function「地図表示」で定義されるグローバル変数 var 地図; // C var マーカー = new Array(); var 吹出し = new Array(); function 地図表示(JSファイル名) { // D var 場所数 = 場所.length; // ====== 相対URLの修正 ======= var パス = ""; var 正規表現 = new RegExp("/", "g"); if (JSファイル名.match(正規表現)) { パス = RegExp.leftContext + "/"; // F } if ( (パス != "") && (URL[0].indexOf(パス) < 0) ) { for (i=0; i<場所数; i++) { URL[i] = パス + URL[i]; // G } } // ========= 中心緯度・経度の決定 ========== var 地図中心緯度 = 0; var 地図中心経度 = 0; for (i=0; i<場所数; i++) { 地図中心緯度 = 地図中心緯度 + 緯度[i]; 地図中心経度 = 地図中心経度 + 経度[i]; } 地図中心緯度 = 地図中心緯度 / 場所数; // H 地図中心経度 = 地図中心経度 / 場所数; // ========= 地図の表示 ========== var 地図表示ズーム = 14; // I J┐ var 中心座標 = new google.maps.LatLng(地図中心緯度, 地図中心経度); var 地図情報 = { // K zoom: 地図表示ズーム, center: 中心座標, mapTypeId: google.maps.MapTypeId.ROADMAP // L }; // M┐ 地図 = new google.maps.Map(document.getElementById("地図表示場所"), 地図情報); // ======== マーカー・吹出しの設定 =========== for (i=0; i<場所数; i++) { // マーカーの設定と表示 マーカー[i] = new google.maps.Marker( { // N position: new google.maps.LatLng(緯度[i], 経度[i]), map: 地図, } ); // 吹出しの設定 // O┐ var 吹出内容 = "<a href='" + URL[i] + "' target='_blank'>" + 場所[i] + "</a>"; 吹出し[i] = new google.maps.InfoWindow( { // P content: 吹出内容 } ); // ★★★ 関数呼出位置(各場所型) ★★★ }; // ★★★ 関数呼出位置(全体型) ★★★ } HTML <p> <!-- R┐ --> <button onClick='地図表示("sample/script.js")'>地図表示</button> </p> <div id="地図表示場所" style="width:600px; height:400px"></div> <!-- S -->
標準ソースコードの説明は、「Google Maps API の基礎」を参照してください。以下では、これに追加した部分を説明します。
追加function function 座標住所取得() { // A // ======== クリックした地点の情報取得 ====== google.maps.event.addListener( // B 地図, "click", function(イベント) { // C // ====== 緯度・経度の取得 ====== var 取得緯度 = イベント.latLng.lat(); // D var 取得経度 = イベント.latLng.lng(); var 取得座標 = new google.maps.LatLng(取得緯度, 取得経度); // === 緯度・経度から住所の取得(逆ジオコーディング)====== var 住所情報 = new google.maps.Geocoder(); // E 住所情報.geocode( // F { "latLng": 取得座標 }, function(住所検索結果) { // G var 取得住所 = new String(住所検索結果[0].formatted_address); // H document.getElementById("座標住所表示場所").innerHTML // I = "<p>緯度=" + 取得緯度 + ", 経度=" + 取得経度 + "<br>" + "住所=" + 取得住所 + "</p>"; } ); } ); } HTML <button onClick='座標住所取得()'>座標住所取得</button> <!-- J --> <div id="座標住所表示場所"></div> <!-- K --> <div id="地図表示場所" style="width:600px; height:400px"></div>
参照:「Maps Javascript API - Geocoding Service」(https://developers.google.com/maps/documentation/javascript/geocoding?hl=ja)
ここでは、マーカー[0](岩槻城址公園)を対象に追加・削除をします。
追加function // ケース1:マーカー[i]が定義されていない場合 hunction マーカー追加() { 追加マーカー = new google.maps.Marker( // A { position: new google.maps.LatLng(35.95055, 139.7109), // B icon: "sample/icon.png" // C } ); 追加マーカー.setMap(地図); // D } function マーカー削除() { 削除マーカー = = new google.maps.Marker( { position: new google.maps.LatLng(35.95055, 139.7109) } ); 削除マーカー.setMap(null); // E } // ケース2:マーカー[i]が定義されている場合 function マーカー追加() { マーカー[0].setMap(地図); // F } function マーカー削除() { マーカー[0].setMap(null); // G } HTML <button onClick='マーカー追加()'>マーカー追加</button> <button onClick='マーカー削除()'>マーカー削除</button>
ケース1:新規の地点にマーカーを作成するのであれば、マーカーを設置する座標(position)を指定する必要があります。
ケース2:ここでは、「地図表示」がすでに行われており、マーカー[0] が定義されています。それでケース2を用いています。
全マーカーの吹出しを一斉に表示・非表示にします。
追加スクリプト function 吹出し表示() { for (i=0; i<場所.length; i++) { 吹出し[i].open(地図, マーカー[i]); // A } } function 吹出し非表示() { for (i=0; i<場所.length; i++) { 吹出し[i].close(); // B } } HTML <button onClick='吹出し表示()'>吹出し表示</button>> <button onClick='吹出し非表示()'>吹出し非表示</button> <button onClick='地図表示("sample/script.js")'>地図表示</button>
ボタンをクリックしただけでは、マーカーをクリックしたときの動作を設定するだけで、地図の表示には変化はありません。ボタンをクリックした後、マーカーをクリックすると、吹出しを表示(クリック吹出し)したり、リンク先にジャンプ(クリックリンク)したりします。
「地図表示」内での追加// ★★★ 関数呼出位置(各場所型) ★★★ クリック吹出し(マーカー[i], 吹出し[i]); // A クリックリンク(マーカー[i], URL[i]); // B追加functionfunction クリック吹出し(クリックマーカー, 表示吹出し) { // C var クリック処理 = new google.maps.InfoWindow( // D { content:表示吹出し.content } // E ); google.maps.event.addListener( // F クリックマーカー, // G 'click', // H function(event) { // I クリック処理.open( // J クリックマーカー.getMap(), クリックマーカー ); } ); } function クリックリンク(クリックマーカー, リンク先) { // K google.maps.event.addListener( クリックマーカー, 'click', // L function(event) { window.open(リンク先); // M } ) }HTML<button onClick='地図表示("sample/script.js")'>地図表示</button> <!-- N --> <div id="地図表示場所" style="width:500px; height:300px"><div>
ボタンにより岩槻城址公園(場所[2])から岩槻文化公園(場所[1])までのルートを表示します。
追加function function 経路表示() { var 出発地点 = new google.maps.LatLng(緯度[2],経度[2]); // A:岩槻駅 var 到着地点 = new google.maps.LatLng(緯度[1],経度[1]); // B:岩槻文化公園 var 交通手段 = google.maps.DirectionsTravelMode.WALKING; // C var 経路条件 = { // D origin:出発地点, destination:到着地点, travelMode:交通手段 }; var 経路 = new google.maps.DirectionsRenderer(); // E var 経路検索 = new google.maps.DirectionsService(); 経路検索.route(経路条件, // F function(result, status) { // G if (status == google.maps.DirectionsStatus.OK) { 経路.setDirections(result); // H }; } ); 経路.setMap(地図); // I 経路.setPanel(document.getElementById("経路説明場所")); // J } HTML <button onClick='経路表示()'>経路表示</button> <div id="地図表示場所" style="width:600px; height:400px"><div> <div id="経路説明場所"><div> <!-- K -->
この経路検索には、複数の候補を検索するとか、地図に表示された経路をドラックして変更するなど、多様な機能をもっています。詳細は下記サイトにあります。
参照:「Maps Javascript API - Directions Service」( https://developers.google.com/maps/documentation/javascript/directions?hl=ja)