Googlemap を利用する際のメモ。
2018年7月16日から「Google Maps Platform」という新しいサービスになり、API の使い方等が変更になりました。新しい API の使い方等については「Google Maps API の使い方」をご覧ください(2018年7月30日)
関連リンク
Google Maps API の読み込み
センサーパラメータ「sensor=」はユーザーの位置情報を使用するかどうかを「true」または「false」で指定(必須)。
<script src="http://maps.google.com/maps/api/js?sensor=false"></script>
地図を表示する領域 <div id="map_canvas"></div> を記述しておく。
この div 要素の id は地図を生成する際に使用する。
HTML
<div class="map_info"> <p class="venue">東京スカイツリー</p> <p class="address">〒131-0045 東京都墨田区押上1−1−2</p> <p class="web"><a href="http://www.tokyo-skytree.jp/" target="_blank">www.tokyo-skytree.jp</a></p> </div> <div id="map_container"> <div id="map_canvas"></div> </div>
地図を表示する領域 <div id="map_canvas">には高さと幅を指定する
どこかで img 要素に対して max-width:100% を指定してあるとコントロールがうまく表示されないので max-width: none を指定
CSS
#map_container { clear: both; width: 90%; padding: 4px; border: 1px solid #CCC; } #map_container img { max-width: none; } #map_canvas { /* 幅と高さを指定しないと地図は表示されない */ width: 100%; height: 300px; } /* 情報ウィンドウ内 */ #map_content{ width:250px; } #map_content p { font-size: 12px; } @media only screen and (min-width: 600px) { #map_canvas { height: 350px; } } @media only screen and (min-width: 960px) { #map_canvas { height: 400px; } }
地図を表示する関数 initMap() を作成
変数 map, map_center は関数の外でも使用するので、外で宣言
<script src="http://code.jquery.com/jquery-1.10.1.min.js"></script> <script src="http://maps.google.com/maps/api/js?sensor=true"></script> <script> jQuery(function($){ var map, map_center; function initMap(_address, _title, _url) { var opts = { //オプションの設定 zoom: 16, //初期のズーム レベル mapTypeId: google.maps.MapTypeId.ROADMAP, //初期マップ タイプ //その他のオプションの指定 mapTypeControl: true, mapTypeControlOptions: { style: google.maps.MapTypeControlStyle.DROPDOWN_MENU }, panControl: false, zoomControl: true, zoomControlOptions: { style: google.maps.ZoomControlStyle.SMALL }, scaleControl: true }; //google.maps.Map オブジェクトを生成 //(表示する div 要素の id とオプションを指定) map = new google.maps.Map(document.getElementById("map_canvas"), opts); //google.maps.Geocoder オブジェクトを生成 var geocoder = new google.maps.Geocoder(); //Geocoder.geocode() メソッドでジオコーディングサービスへリクエスト geocoder.geocode( { 'address': _address}, function(results, status) { if (status == google.maps.GeocoderStatus.OK) { //中心の位置(ジオコーディングされた緯度と経度の値) map_center = results[0].geometry.location; //地図の中心を指定 map.setCenter(map_center); //マーカーを生成 var marker = new google.maps.Marker({ //マーカーを配置する Map オブジェクトを指定 map: map, //マーカーの初期の場所を指定 position: map_center, //マーカーをアニメーションで表示(オプション) animation: google.maps.Animation.DROP, //title にパラメータで渡される _title を指定 title:_title }); //情報ウィンドウのコンテンツ(_content)を作成 var _content = _title; if (_url) { _content = '<div id="map_content"><p><a href="' + _url + '" target="_blank"> ' + _title + '</a><br />' + _address + '</p></div>'; }else { _content = '<div id="map_content"><p>' + _title + '<br />' + _address + '</p></div>'; } //情報ウィンドウの生成 var infowindow = new google.maps.InfoWindow({ content: _content, }); //marker をクリックすると情報ウィンドウを表示(リスナーの登録) google.maps.event.addListener(marker, 'click', function() { infowindow.open(map,marker); }); } else { //エラーの場合 alert("Geocode was not successful for the following reason: " + status); } }); } //ロード時に initMap() で地図を表示 google.maps.event.addDomListener(window, 'load', initMap($('p.address').text(), $('p.venue').text(), $('p.web a').attr('href'))); //リサイズイベントのリスナーを登録(中心位置を保持) google.maps.event.addDomListener(window, 'resize', function(){ map.panTo(map_center); }); }); </script>
以下はリンクをクリックすると地図を表示させる関数 showMap() のパラメータ。
jQuery(function($){ function showMap(_address, _title, _url, _map_canvas) { var map_canvas = _map_canvas ? _map_canvas : "map_canvas"; var map_target = 'div#' + map_canvas; $(map_target).fadeIn(800); //fadeInで表示 var opts = { zoom: 15, //初期のズーム レベル mapTypeId: google.maps.MapTypeId.ROADMAP //初期マップ タイプ }; // <div id="map_canvas"> に地図を表示する map オブジェクトを生成 var map = new google.maps.Map(document.getElementById(map_canvas), opts); //google.maps.Geocoder オブジェクトを使用して Google Maps API ジオコーディング サービスにアクセス var geocoder = new google.maps.Geocoder(); //Geocoder.geocode() メソッドはジオコーディング サービスへのリクエストを開始 geocoder.geocode( { 'address': _address}, function(results, status) { if (status == google.maps.GeocoderStatus.OK) { map.setCenter(results[0].geometry.location); var marker = new google.maps.Marker({ map: map, //マーカーを配置する Map オブジェクトを指定 position: results[0].geometry.location, //マーカーの初期の場所を示す LatLng を指定 animation: google.maps.Animation.DROP, //マーカーをアニメーションで表示 title:_title }); var _content = _title; if (_url) { _content = '<div id="map_content"><p><a href="' + _url + '" target="_blank"> ' + _title + '</a><br />' + _address + '</p></div>'; }else { _content = '<div id="map_content"><p>' + _title + '<br />' + _address + '</p></div>'; } var infowindow = new google.maps.InfoWindow({ content: _content, //size: new google.maps.Size(300,300),(情報ウィンドウのサイズはうまく指定できない) //maxWidth: 300(情報ウィンドウのサイズはうまく指定できない) }); //infowindow.open(map,marker); 最初から情報ウィンドウを表示する場合はコメントアウトを外す google.maps.event.addListener(marker, 'click', function() { //marker をクリックすると情報ウィンドウを表示(リスナーの登録) infowindow.open(map,marker); }); } else { alert("Geocode was not successful for the following reason: " + status); } }); } });
HTML の記述部分(抜粋)
<p class="venue">場所の名前</p> <p class="address">住所(実際の住所を記述)</p> <p class="web"><a href="http://example.com" target="_blank">ウェブサイト名</a></p> <p class="show_map"><a href="#">地図を表示</a></p> <div id="map_container"> <div id="close"><p><a href="#">閉じる</a></p></div> <div id="map_canvas"></div> </div><!-- end of #map_container --> </div><!-- end of #content -->
地図を表示する部分の CSS の記述部分。
div#map_container { clear: both; width: 500px; height: 390px; display: none; /* 最初は非表示 */ } div#map_canvas { /* 幅と高さを指定しないと地図は表示されない */ width: 500px; height: 350px; display: none; /* 最初は非表示 */ } div#map_container div#close { width: 500px; height: 2em; background: #999; } div#map_container div#close p { font-size: 12px; font-size: 1.2rem; float: right; padding-right: 20px; line-height: 2em; } div#map_container div#close p a { color: #FFF; background: url(images/close-trans.png) no-repeat left center; padding-left: 20px; } div#map_container div#close p a:hover { color: #FCF; } /* 情報ウィンドウ内 */ #map_content{ width: 250px; } #map_content p { font-size: 11px; font-size: 1.1rem; } #map_content p a{ color: #66C; }
地図を表示する jQuery の記述。
$('p.show_map a').click(function() { $('div#map_container').slideDown(1000); var address = $('p.address').text(); var my_reg = /〒\s?\d{3}(-|ー)\d{4}/; //郵便番号を含めるとおかしくなる場合があったので、郵便番号は削除 address = address.replace(my_reg, ''); if($('p.web').text() != '') {var url = $('p.web a').attr('href');} showMap(address, $('p.venue').text(), url); return false; }); $('div#close p a').click(function() { $('div#map_container').slideUp(500); $('div#map_container div#map_canvas').css('display', 'none'); return false; });