Google Maps(グーグルマップ)上に矩形(Rectangle)を自由に描く方法(その2)
前回、自作で矩形を自由に描けるようにしたのですが、正直、かなり難易度が高く、かつ、操作性もあまりよくありませんでした。今回は、もっと簡単に気軽に矩形を描ける方法を紹介します。
なお、Google Maps関連の記事についてはこちらにまとめてありますので、ご覧ください。
Contents
Google Maps(グーグルマップ)上に矩形(Rectangle)を自由に描く方法(その2)
サンプル
矩形をドラッグ、または、サイズ、形を変更させてみてください。
北東:, | |
南西:, |
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 defer
src="https://maps.googleapis.com/maps/api/js?key=(APIキー)&callback=initMap" >
</script>
<style type="text/css">
#map_canvas {
width: 100%;
height:80%;
}
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.683934,139.737612);
var mapOptions = {
zoom: 14,
center: myLatlng
}
map = new google.maps.Map(document.getElementById("map_canvas"), mapOptions);
var LatLngBounds = new google.maps.LatLngBounds(
new google.maps.LatLng( 35.677599, 139.743311) /*sw:南西*/
,new google.maps.LatLng( 35.694476, 139.762552) /*ne:北東*/
);
rectangle = new google.maps.Rectangle({
strokeColor: "#FF0000",
strokeOpacity: 0.8,
strokeWeight: 3,
fillColor: "#FF0000",
fillOpacity: 0.25,
map,
editable: true,
draggable: true,
bounds: LatLngBounds
});
setRectangleBoundsInfo(rectangle.getBounds());
rectangle.addListener("bounds_changed",function(e) {
setRectangleBoundsInfo(rectangle.getBounds());
});
}
function setRectangleBoundsInfo(bounds) {
document.getElementById('lblNeLat').innerHTML = bounds.getNorthEast().lat();
document.getElementById('lblNeLng').innerHTML = bounds.getNorthEast().lng();
document.getElementById('lblSwLat').innerHTML = bounds.getSouthWest().lat();
document.getElementById('lblSwLng').innerHTML = bounds.getSouthWest().lng();
}
</script>
</head>
<body>
<div id="map_canvas"></div>
<table>
<tr><td></td><td><span style="font-weight:bold">北東:</span><span id="lblNeLat"></span>,<span id="lblNeLng"></span></td></tr>
<tr><td><span style="font-weight:bold">南西:</span><span id="lblSwLat"></span>,<span id="lblSwLng"></span></td><td></td></tr>
</table>
</body>
</html>
デモ
矩形を自由に編集する
矩形を自由に編集するには、「RectangleOptions」の『editable』をtrueにすると、自由に編集できるようになるのです。加えて『draggable』をtrueにするとドラッグが可能となり、移動させることができます。
rectangle = new google.maps.Rectangle({
strokeColor: "#FF0000",
strokeOpacity: 0.8,
strokeWeight: 3,
fillColor: "#FF0000",
fillOpacity: 0.25,
map,
editable: true,
draggable: true,
bounds: LatLngBounds
});
この『editable』オプションをtrueにするだけで、簡単に編集可能になるんですよね。本当に簡単です。
もし、描いた矩形の情報を取得するにはするにはgetBounds()メソッドで取得します。
setRectangleBoundsInfo(rectangle.getBounds());
function setRectangleBoundsInfo(bounds) {
document.getElementById('lblNeLat').innerHTML = bounds.getNorthEast().lat();
document.getElementById('lblNeLng').innerHTML = bounds.getNorthEast().lng();
document.getElementById('lblSwLat').innerHTML = bounds.getSouthWest().lat();
document.getElementById('lblSwLng').innerHTML = bounds.getSouthWest().lng();
}
サンプルコードではgetBounds()メソッドを実行し、矩形の北東位置と南西位置を取得し、<span>エリアに緯度と経度を設定してあります。
これで表示されている矩形の情報を取得できます。
bounds_changedイベント
矩形へ変更されたときに発生するのが「bounds_changed」イベントです。サンプルではこのイベントを仕掛けて、変更された矩形の情報を<span>に再設定させるようにさせています。
rectangle.addListener("bounds_changed",function(e) {
setRectangleBoundsInfo(rectangle.getBounds());
});
addListenerメソッドを実行し、イベントを仕掛けてあります。
表示させた矩形を編集させたいのなら自作より『editable』をtrueとしたほうが簡単ですね。
ご参考
関連ページ