イベント処理を行う

 Google Mapsには地図がドラッグされた時などにイベントをキャッチして処理する機能があります。Google Mapsに用意されているイベントには以下のものがあります。
click地図やマーカーのクリック
move地図のドラッグ中に発生
movestart地図のドラッグ開始時に発生
moveend地図のドラッグ終了時に発生
zoom地図の表示倍率が変化した後に発生
maptypechanged地図の種類(地図、衛星写真)が切り替わった後に発生
infowindowopen情報ウィンドウが表示された時に発生
infowindowclose情報ウィンドウが閉じられた時に発生
addoverlayマーカーやアイコンが追加された後に発生
removeoverlayマーカーやアイコンが削除された後に発生(clearOverlayでは発生しない)
clearoverlays全てのマーカーやアイコンが削除された後に発生

 ここでは地図がドラッグされている間、位置をフォームのテキストフィールドに表示するサンプルを作成してみます。まず、イベントを追加するにはGEventのaddListener()メソッドを使います。このメソッドの最初の引数が、どの地図に対してイベントを追加するかの指定になっています。地図が複数ある場合には対象としたい地図を指定することができるようになっています。次の引数がイベント名です。このイベント名は上記の表で示したものになります。三番目の引数がイベントが発生した際に呼び出される関数名になります。これで地図にイベントが追加されます。(サンプルを実行する

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<script src="http://maps.google.com/maps?file=api&v=1&key=ABQIAAAAasAJryKxWJnBFVJa487d9hTHGAxTVT7IRADYa-JdYz7xQ8IQZBSthgDZdggYpQHsmm6WYtHstQFfLA" type="text/javascript"></script>
</head>
<body>
<div id="map" style="width: 500px; height: 400px"></div>
<script type="text/javascript">
//<![CDATA[

var map = new GMap(document.getElementById("map"));
map.addControl(new GLargeMapControl());
map.addControl(new GMapTypeControl());
map.centerAndZoom(new GPoint(137, 36), 15);
GEvent.addListener(map, "move", getMapXY);
function getMapXY()
{
var LatLngObj = map.getCenterLatLng();
document.getElementById("mapX").value = LatLngObj.x;
document.getElementById("mapY").value = LatLngObj.y;
}
//]]>
</script>
<form>
経度:<input type="text" id="mapX" /><br />
緯度:<input type="text" id="mapY" /><br />
</form>
</body>
</html>

 他にもいろいろなイベントを指定することができます。以下のサンプルはズームが変化した時に、ズームの値をテキストフィールドに表示します。(サンプルを実行する

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<script src="http://maps.google.com/maps?file=api&v=1&key=ABQIAAAAasAJryKxWJnBFVJa487d9hTHGAxTVT7IRADYa-JdYz7xQ8IQZBSthgDZdggYpQHsmm6WYtHstQFfLA" type="text/javascript"></script>
</head>
<body>
<div id="map" style="width: 500px; height: 400px"></div>
<script type="text/javascript">
//<![CDATA[

var map = new GMap(document.getElementById("map"));
map.addControl(new GLargeMapControl());
map.addControl(new GMapTypeControl());
map.centerAndZoom(new GPoint(137, 36), 15);
GEvent.addListener(map, "zoom", getMapZoom);
function getMapZoom()
{
document.getElementById("zm").value = map.getZoomLevel();
}

//]]>
</script>
<form>
ズーム:<input type="text" id="zm" /><br />
</form>
</body>
</html>

 追加したイベントを削除することができます。削除する場合にはGEvent.addListener()で返されるデータを変数に入れておきます。削除する際にGEvent.removeListener()の引数に指定することで設定したイベントを削除することができます。(サンプルを実行する

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<script src="http://maps.google.com/maps?file=api&v=1&key=ABQIAAAAasAJryKxWJnBFVJa487d9hTHGAxTVT7IRADYa-JdYz7xQ8IQZBSthgDZdggYpQHsmm6WYtHstQFfLA" type="text/javascript"></script>
</head>
<body>
<div id="map" style="width: 500px; height: 400px"></div>
<script type="text/javascript">
//<![CDATA[

var map = new GMap(document.getElementById("map"));
map.addControl(new GLargeMapControl());
map.addControl(new GMapTypeControl());
map.centerAndZoom(new GPoint(137, 36), 15);
zoomEvent = GEvent.addListener(map, "zoom", getMapZoom);
function getMapZoom()
{
document.getElementById("zm").value = map.getZoomLevel();
}
function removeEvent()
{
GEvent.removeListener(zoomEvent);
}
//]]>
</script>
<form>
ズーム:<input type="text" id="zm" /><br />
<input type="button" value="ズームイベントを削除" onClick="removeEvent()" /><br />
</form>
</body>
</html>

 次章ではアマゾンを利用してみます。

[第八章 1:アマゾンのWebサービスを利用するにはへ]
[目次へ]

(2006.1.24)