「GoogleMaps API V3」 の使い方その6(続々イベント)


■マップのイベントとマーカーのイベントの複合的な使い方

マップ上でクリックした位置にマーカーを表示し、さらにそのマーカーをクリックした時に マーカーの緯度経度の値を情報ウインドウに表示します。

この例は、Googleのサンプルとして乗っているものを変更したものです。
マップ上でのクリックイベント時の関数を設定し、その中でマーカーを生成し、さらに情報ウインドウの表示を行うように、マーカーのクリックイベント時の関数を設定しています。

また、マーカーを生成した時に、そのマーカーをグローバル変数の配列に保存し、その配列のマーカーを 使って、再表示、クリア、削除処理を行っています。

<head>
<title>Google Map API v3-6</title>
<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false" charset="utf-8"></script>
<script type="text/javascript">
var map;          // GoogleMapオブジェクトの変数宣言
var markers = []; // マーカー保存配列

function initialize() {
    // Google Mapで利用する初期設定用の変数
    var latlng = new google.maps.LatLng(36.062092, 136.223323);
    var mapOptions = {
        zoom: 14,
        mapTypeId: google.maps.MapTypeId.ROADMAP,
        center: latlng
    };
    // GoogleMapの生成
    map = new google.maps.Map(document.getElementById("map"), mapOptions);
    // マップのクリックイベントの関数登録
    google.maps.event.addListener(map, 'click', function(event) {
	// マップ上の位置でマーカーを生成
        addMarker(event.latLng);
    });
}
// マーカーの生成関数
function addMarker(location) {
    // マーカーを生成
    marker = new google.maps.Marker({
        position: location,
        map: map
    });
    // 情報ウインドウの生成とクリックイベント関数の登録処理
    setMarkerListener(marker, location);
    // 生成されたマーカーを保存
    markers.push(marker);
}
// 情報ウインドウの生成とクリックイベント関数の登録処理
function setMarkerListener(marker, location) {
    // 表示文字列の生成(緯度・経度)
    var contentString = "lat:" + location.lat() + "<br>"
                      + "lng:" + location.lng();
    // 情報ウィンドウの生成
    var infoWindow = new google.maps.InfoWindow({
        content: contentString,
        maxWidth: 200
    });
    // マーカーのクリックイベントの関数登録
    google.maps.event.addListener(marker, 'click', function(event) {
        // 情報ウィンドウの表示
        infoWindow.open(map, marker);
    });
}
// マップからマーカーの画像を消す(保存されたマーカーはそのまま)
function clearMarkers() {
    if (markers) {
        for (i in markers) {
            markers[i].setMap(null);
        }
    }
}
// 保存されたマーカーをマップ上に表示
function showMarkers() {
    if (markers) {
        for (i in markers) {
            markers[i].setMap(map);
        }
    }
}
// マップからマーカーの画像を消し、マーカーも削除
function deleteMarkers() {
    if (markers) {
        clearMarkers();
        markers.length = 0;
    }
}
</script> 
</head> 
<body onload="initialize();">
  マップ上をクリックするとマーカーを表示します。<br>
  さらにそのマーカーをクリックすると緯度経度をウインドウに表示します。
  <div>
    <input onclick="clearMarkers();"  type=button value="マーカー消去"/>
    <input onclick="showMarkers();"   type=button value="マーカー表示"/>
    <input onclick="deleteMarkers();" type=button value="マーカー削除"/> 
  </div> 
  <div id="map" style="width: 400px; height: 300px;"></div>
</body> 
</html> 

マップ上をクリックするとマーカーを表示します。 そのマーカーをクリックすると緯度経度をウインドウに表示します。 さらに他の位置でクリックを続けると、複数のマーカーの表示ができます。

いくつかのマーカーがマップ上に表示されたあとで、「マーカー消去」ボタンをクリックすると全てのマーカーを非表示にします。 その後、「マーカー表示」ボタンをクリックすると全てのマーカーを再度表示します。
「マーカー削除」ボタンをクリックで、記憶している全てのマーカーを削除します。

     


■関連記事
「GoogleMaps API V3」の使い方その1
「GoogleMaps API V3」の使い方その2
「GoogleMaps API V3」の使い方その3(マーカーの表示)
「GoogleMaps API V3」の使い方その4(イベント)
「GoogleMaps API V3」の使い方その5(続イベント)
「GoogleMaps API V3」の使い方その7(ポリライン・ポリゴン)
「GoogleMaps API V3」の使い方その8(ジオコーディング)
「GoogleMaps API V3」の使い方その9(ルート検索)
「GoogleMaps API V3」の使い方その10(ルート検索2)
「GoogleMaps API V3」の使い方その11(さらにInfowindow)

ページのトップへ戻る