テキストエリアに入力した住所から緯度・経度を取得、地図上にマーカーと情報ウィンドウを表示。
また、地図をクリックするとクリックした場所にマーカーと情報ウィンドウが表示され、
情報ウィンドウの中に緯度と経度が表示されます。
下の「◆lat(緯度):Lat ◆lng(経度):Lng」の赤い文字の箇所にも表示されます。
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script> <script type="text/javascript" src="http://maps.googleapis.com/maps/api/js?sensor=false&language=ja"></script>
<script type="text/javascript"> // prototype.js とのコンフリクト(競合対策)。 jQuery.noConflict(); //「$」を jQuery として動作させる。(そうしないと「$」はprototypeとして動作してしまう。) jQuery(document).ready(function($){ var geocoder, map; var marker_ary = new Array(); // 地図上に追加されたオーバーレイを格納する配列 var overlays = []; // ページロード時実行 $(function(){ initialize(); $("#btn").bind("click",function(){ codeAddress(); }).trigger("click"); }); // 地図の初期化 function codeAddress() { // 地図クリックで表示されていたマーカーと情報ウィンドウを削除 MarkerClear(); var address = document.getElementById('address').value; // geocode (住所から緯度経度を取得) geocoder.geocode( { 'address': address, 'language': 'ja'}, function(results, status) { if(status==google.maps.GeocoderStatus.OK){ // オーバーレイ消去 if(overlays.length>0){ // for(i in overlays){ //この書き方はprototype.js に汚染せれるため次行に書換。 for(var i=0; i < overlays.length; i++ ){ overlays[i].setMap(null); } overlays.length=0; } // 地図の中心点を変更 map.setCenter(results[0].geometry.location); // 指定された境界に合うように地図を表示 if(results[0].geometry.bounds)map.fitBounds(results[0].geometry.bounds); if(results[0].geometry.viewport)map.fitBounds(results[0].geometry.viewport); // マーカー var marker = new google.maps.Marker({ map:map, position: results[0].geometry.location }); var latLngArr = results[0].geometry.location.toUrlValue(); var Arrayltlg = latLngArr.split(","); var contentString=""; contentString+="◆住所:"+address+"
"; contentString+="◆lat(緯度):"+Arrayltlg[0]+"
"; contentString+="◆lng(経度):"+Arrayltlg[1]+"
"; // 情報ウィンドウ var infowindow = new google.maps.InfoWindow({ content: contentString, maxWidth: 250 }); infowindow.open(map, marker); overlays=[marker, infowindow] // lat(緯度)・lng(経度)を表示(IDがgoogle_map_latとgoogle_map_lngの箇所に) document.getElementById("google_map_lat").innerHTML = Arrayltlg[0]; document.getElementById("google_map_lng").innerHTML = Arrayltlg[1]; }else{ alert("ジオコードの取得に失敗しました\n"+status); } }); return false; } function initialize(){ // テキストエリア(ページロード時はHTML内のソースのvalueの値。mapクリックでvalueの値がなくなる(mylistener(event)内)。) document.getElementById("address").value = "東京タワー"; // ジオコードオブジェクト geocoder = new google.maps.Geocoder(); // 緯度・経度:日本 var myLatlng=new google.maps.LatLng(36.204824,138.252924); // 地図のオプション設定 var myOptions={ // 初期のズーム レベル zoom: 2, // 地図の中心点 center: myLatlng, // 地図タイプ mapTypeId: google.maps.MapTypeId.ROADMAP }; // 地図オブジェクト map=new google.maps.Map(document.getElementById("map_canvas"), myOptions); // 地図上クリックで mylistenerへ google.maps.event.addListener(map, 'click', mylistener); } // mylistener 地図上クリック挙動 function mylistener(event) { MarkerClear(); document.getElementById("address").value = ""; // lat(緯度)・lng(経度)を表示(IDがgoogle_map_latとgoogle_map_lngの箇所に) document.getElementById("google_map_lat").innerHTML = event.latLng.lat(); document.getElementById("google_map_lng").innerHTML = event.latLng.lng(); // codeAddress_onclick へ値を渡す codeAddress_onclick(event.latLng.toUrlValue()); } // codeAddress_onclick 地図上クリック挙動 function codeAddress_onclick(clatlng) { var clatlngarr = clatlng.split(","); var clat = clatlngarr[0]; var clng = clatlngarr[1]; // オーバーレイ消去 if(overlays.length>0){ // for(i in overlays){ //この書き方はprototype.js に汚染せれるため次行に書換。 for(var i=0; i < overlays.length; i++ ){ overlays[i].setMap(null); } overlays.length=0; } // 地図の中心点を変更(クリックした場所をセンターにすると不便なので不採用) // map.setCenter(new google.maps.LatLng(clat,clng)); // マーカー var Markerlatlng; var marker_num = marker_ary.length; marker_ary[marker_num] = new google.maps.Marker({ map: map, position: new google.maps.LatLng(clat,clng) }); var ccontentString=""; ccontentString+="◆lat(緯度):"+clat+"
"; ccontentString+="◆lng(経度):"+clng+"
"; // 情報ウィンドウ var infowindow = new google.maps.InfoWindow({ content: ccontentString, maxWidth: 250 }); // infowindow.open(map, marker); infowindow.open(map, marker_ary[marker_num]); coverlays=[marker, infowindow] } // end of codeAddress_onclick function MarkerClear() { //マーカー削除 for (i = 0; i < marker_ary.length; i++) { marker_ary[i].setMap(null); } //配列削除 for (i = 0; i <= marker_ary.length; i++) { marker_ary.shift(); } //IDがgoogle_map_lat、google_map_lng の箇所の文字、IDがaddressの内容を空に document.getElementById("google_map_lat").innerHTML = ""; document.getElementById("google_map_lng").innerHTML = ""; } }); // prototype.js とのコンフリクト(競合対策)終了。 </script>
地図のサイズは、上記12行目の style 属性で指定しています。◆lat(緯度):Lat
◆lng(経度):Lng
地図をクリックでも座標が取得できます。