Sample8の応用スクリプト。リンクをクリックしたら対応したマーカーを表示する。
支店マップとか散策マップみたいな用途に向いてる。
var map; window.onload = function() { if (GBrowserIsCompatible()) { map = new GMap2(document.getElementById("map")); var point =new GLatLng(35.681099,139.767084); var marker = new GMarker(point); map.setCenter(point, 14); map.addOverlay(marker); map.addControl(new GMapTypeControl()); map.addControl(new GLargeMapControl()); } } //panTo & openInfoWindow function office(i) { var latlng = new GLatLng( area[i].lat, area[i].lng ); var mark = new GMarker( latlng ); map.clearOverlays(); map.panTo(latlng); map.addOverlay( mark ); mark.openInfoWindowHtml( '<p>'+ area[i].name + '<br />' + area[i].text+'<br />TEL:'+area[i].tel+' FAX:'+area[i].fax+'</p>'); } var area =[ { name:'新宿御苑' ,lat:35.687038, lng:139.710688, text:'〒000-0000 東京都', tel:'0120-123-4567', fax:'0120-123-4568'}, { name:'東京ビッグサイト', lat:35.630028, lng:139.793839,text:'〒000-0000 東京都',tel:'0120-123-4567',fax:'0120-123-4568' }, { name:'羽田空港' ,lat:35.549922, lng:139.786216, text:'〒000-0000 東京都', tel:'0120-123-4567', fax:'0120-123-4568'}, { name:'表参道ヒルズ', lat:35.667213, lng:139.708961, text:'〒000-0000 東京都', tel:'0120-123-4567', fax:'0120-123-4568'}, { name:'東京タワー', lat:35.658587, lng:139.745428, text:'〒000-0000 東京都', tel:'0120-123-4567', fax:'0120-123-4568'} ]
<ul> <li><a href="javascript:office(0)">新宿御苑</a></li> <li><a href="javascript:office(1)">東京ビッグサイト</a></li> <li><a href="javascript:office(2)">羽田空港</a></li> <li><a href="javascript:office(3)">表参道ヒルズ</a></li> <li><a href="javascript:office(4)">東京タワー</a></li></ul> <div id="map"><!--GoogleMap--></div>
var map = new GMap2(document.getElementById("map"));
地図を表示する要素のIDを指定する。
var point =new GLatLng(35.681099,139.767084);
初期の中心位置。
function office(i)
リンクをクリックしたとき呼ばれるメソッド。引数iは配列areaの並び順とリンクする。
var latlng = new GLatLng( area[i].lat, area[i].lng );
area[i].lat で要素にアクセスしています
map.clearOverlays();
移動する前に消去。
map.panTo(latlng);
引数で指定した位置まで移動させる
var array =[];に並ぶ配列はいくつでも追加出来ます。やりすぎると重いが…
また各配列の要素も増減できるので、表示したい情報にあわせて編集すればおk。
これ作ったときポイントが90くらいあって、配列の方はテーブルソースからの置換、
HTMLのoffice()に入れる連番はPHPでやったので、それもついでに載せときます。
上の配列の名前の所を置換で変換してPHPの配列を作る。
<?php $array =array( '<li><a href="javascript:office()">新宿御苑</a></li>', '<li><a href="javascript:office()">東京ビッグサイト</a></li>', '<li><a href="javascript:office()">羽田空港</a></li>', '<li><a href="javascript:office()">表参道ヒルズ</a></li>', '<li><a href="javascript:office()">東京タワー</a></li>' );//配列最後にカンマはつけない for($i=0;$i<count($array);$i++){ print preg_replace("/(<li><a href=\"javascript:office\()(.+)/i","$1",$array[$i]); print $i; print preg_replace("/(<li><a href=\"javascript:office\()(\)\">)(.*)(<\/a><\/li>)/i","$2$3$4",$array[$i])."\n"; } ?>
preg_replaceでoffice前カッコと後ろカッコ以降に分割して、間に変数$iの値を入れてます。
正規表現の置換はDreamweaverとそう変わらんです。