KeyDragZoomを使って、Google Maps(グーグルマップ)上に矩形(Rectangle)を描く方法
KeyDragZoomについては、「KeyDragZoomを使って、Google Maps(グーグルマップ)にドラッグズームコントロールを追加する方法」と「KeyDragZoomを使って、Google Maps(グーグルマップ)にドラッグズームコントロールを追加する方法(その2)」も合わせてご覧ください。
Contents
KeyDragZoomを使って、Google Maps(グーグルマップ)上に矩形(Rectangle)を描く方法
サンプル
altキーを押すか、ドラッグズームアイコンをクリックして、エリアを選択してください。
HTMLコード
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1" />
<title>Sample Map</title>
<script
src="https://maps.googleapis.com/maps/api/js?key=(APIキー)" >
</script>
<script type="text/javascript" src="/assets/keydragzoom/keydragzoom.js"></script>
<style type="text/css">
#map_canvas {
width: 100%;
height:70%;
}
html,
body {
height: 100%;
margin: 0;
padding: 0;
}
</style>
<script type="text/javascript">
var map;
var rectangle;
function initMap() {
var myLatlng = new google.maps.LatLng(35.68517826190777,139.7528236934712);
var mapOptions = {
zoom: 15,
center: myLatlng,
}
map = new google.maps.Map(document.getElementById("map_canvas"), mapOptions);
map.enableKeyDragZoom({
visualEnabled: true,
visualPosition: google.maps.ControlPosition.TOP_CENTER,
visualSprite: "https://maps.gstatic.com/mapfiles/ftr/controls/dragzoom_btn.png",
key: "alt",
noZoom:true,
visualTips: {
off: "描画する",
on: "描画をやめる"
}
});
var dz = map.getDragZoomObject();
// 矩形描画モードへ
google.maps.event.addListener(dz, 'activate', function () {
document.getElementById('msg').innerHTML ="";
log('KeyDragZoom Activated');
if ( rectangle != undefined ) {
rectangle.setMap(null);
}
});
// 矩形描画モード終了
google.maps.event.addListener(dz, 'deactivate', function (bnds) {
if ( rectangle != undefined ) {
rectangle.setMap(map);
}
log('KeyDragZoom Deactivated: ' + bnds);
});
// ドラッグ開始
google.maps.event.addListener(dz, 'dragstart', function (latlng) {
log('KeyDragZoom Started: ' + latlng);
});
// ドラッグ中
google.maps.event.addListener(dz, 'drag', function (startPt, endPt, prj) {
log('KeyDragZoom Dragging: ' + startPt + endPt);
});
// ドラッグ終了
google.maps.event.addListener(dz, 'dragend', function (bnds) {
log('KeyDragZoom Ended: ' + bnds);
rectangle = new google.maps.Rectangle({
strokeColor: "#FF0000",
strokeOpacity: 0.8,
strokeWeight: 3,
fillColor: "#FF0000",
fillOpacity: 0.25,
map: map,
bounds: bnds
});
});
}
function log(msg) {
document.getElementById('msg').innerHTML += "<br />" + msg;
}
</script>
</head>
<body onload="initMap()">
<div id="map_canvas"></div>
<div id="msg" style="height:30%;overflow-y:auto;"></div>
</body>
</html>
デモ
手順
描画モードへ
まず、ドラッグズームコントロールをクリックするか、altキーを押して、描画モードにしてください。
エリアを選択
次にエリアを選択すると、矩形(Rectangle)を描画することができます。
KeyDragZoomイベント一覧
「KeyDragZoom」オブジェクトにはイベントを設定し、イベント時の処理を書き込むことができます。
activate
ドラッグズームコントロールをクリックしたり、altキーなどkeyで指定された操作が実行された場合、エリアを選択する前の最初のイベントが「activate」になります。
activateイベント時の引数
引数 | (なし) |
イベント実行時、取得できる情報はありません。
deactivate
エリア選択モードが終了した時に呼び出されるのが「deactivate」イベントになります。
deactivateイベント時の引数
第1引数 | 選択エリアの南西と北東の位置情報を保持する「LatLngBounds」型オブジェクト |
dragstart
ドラッグが始まったときに呼び出されるのが「dragstart」イベントになります。
dragstartイベント時の引数
第1引数 | ドラッグ開始時の位置を保持する「LatLng」型の位オブジェクト |
drag
ドラッグ中、繰り返し呼び出されるのが「drag」になります。
取得できる情報は、位置情報ではなくて、マップ上の座標(Point)になります。
dragイベント時の引数
第1引数 | ドラッグ中、生成中の矩形の南西位置の座標を保持した「Point」型のオブジェクト |
第2引数 | ドラッグ中、生成中の矩形の北東位置の座標を保持した「Point」型のオブジェクト |
第3引数 | Point型からLatLng型へ変換するためなどに利用できる「MapCanvasProjection」型のオブジェクト |
dragend
ドラッグ終了後に呼び出されるのが「dragend」になります。
dragendイベント時の引数
第1引数 | 描画された矩形の南西と北東の位置情報を保持する「LatLngBounds」型オブジェクト |
KeyDragZoomを使って、矩形(Rectangle)を描く方法
「dragend」時に『Rectangle』を生成する
// ドラッグ終了
google.maps.event.addListener(dz, 'dragend', function (bnds) {
log('KeyDragZoom Ended: ' + bnds);
rectangle = new google.maps.Rectangle({
strokeColor: "#FF0000",
strokeOpacity: 0.8,
strokeWeight: 3,
fillColor: "#FF0000",
fillOpacity: 0.25,
map: map,
bounds: bnds
});
});
}
「dragend」イベントで、「LatLngBounds」型のオブジェクトを取得できるので、それをRectangleクラスのオプション「bounds」にしていするだけで、描画した矩形をマップ上に描画させることができます。
簡単ですよね。
ぜひ、ご参考ください。
ご参考
関連ページ