ジオコーダを使って郵便番号の周辺地図を表示する
Google Maps API を使って日本地図を表示します。
検索ボックスで入力した郵便番号から Postal.Lookup クラス を使って住所を検索し、その結果から住所をリスト表示します。
続けて、GClientGeocoder クラス を使って、その住所の緯度経度を検索し、その緯度経度を中心とした周辺地図をズーム表示します。さらにマーカーと吹き出しを表示します。その吹き出しには住所を表示します。
同様に、リスト表示した住所をクリックすると、GClientGeocoder クラス を使って、その住所の緯度経度を検索し、その緯度経度を中心とした周辺地図をズーム表示します。さらにマーカーと吹き出しを表示します。その吹き出しには住所を表示します。
<script type="text/javascript"> //<![CDATA[ var map; var geocoder; var focusId; // window.onload window.onload = function() { map = new GMap2(document.getElementById('map')); map.setCenter(new GLatLng(37,139),4); map.addControl(new GLargeMapControl()); map.addControl(new GMapTypeControl()); map.addControl(new GOverviewMapControl()); map.setMapType(G_NORMAL_MAP); geocoder = new GClientGeocoder(); } // run function run(c) { var lookup = new Postal.Lookup(); lookup.onload = function() { var ul = document.getElementById('r'); ul.innerHTML = ''; focusId = null; for (var i=0; i<lookup.response.length; i++) { var postal = lookup.response[i]; var li = document.createElement('li'); li.setAttribute('id', i); var a = document.createElement('a'); a.appendChild(document.createTextNode(postal.a)); a.setAttribute('href', 'javascript: select("' + i + '")'); a.setAttribute('id', 'link_' + i); li.appendChild(a); var span = document.createElement('span'); span.setAttribute('id', 'warn_' + i); li.appendChild(span); ul.appendChild(li); if (focusId == null) { selectedAddress = postal.a; focusId = i; } } select(focusId); }; lookup.send(c); } // show function show(address) { if (geocoder) { geocoder.getLatLng( address, function(point) { if (!point) { var span = document.getElementById('warn_' + focusId); span.innerHTML = '(地図が見つかりませんでした)'; } else { var span = document.getElementById('warn_' + focusId); span.innerHTML = ''; map.setCenter(point, 13); var marker = new GMarker(point); map.addOverlay(marker); marker.openInfoWindowHtml(address); } } ); } } // select function select(selectId) { focusId = selectId; var a = document.getElementById('link_' + selectId); a.setAttribute('class', 'selected'); show(a.innerHTML); } //]]> </script> <form name="f" onsubmit="run(this.c.value); return false;"> <input type="text" name="c" value="160-0021" size="20" /> <input type="submit" name="g" value="検索" /> </form> <ul id="r"></ul> <div id="map" style="width:480px;height:400px"></div>
関連情報
- ベーシック
- 送信フォーム
- with jQuery
- Google Maps API
- BLOGRANGER API