説明
複数のマーカーが地図内に全て表示されるようにするには、マーカーの緯度経度で最大と最小のものを求めます。求めた緯度経度を元にmapオブジェクトのfitBounds()メソッドで表示調整を行います。自動的に緯度経度だけでなくズームレベルも調整されます。
Google API Expertが解説する Google Maps APIプログラミングガイド。Google Maps API Expertが最新のGoogle Maps API等について解説しています。
【
アマゾンで購入する】
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>Google Maps API ver 3 Sample/グーグルマップAPIサンプル/Google Maps API样品</title>
<link rel="stylesheet" href="css/main.css" type="text/css" media="all">
<script src="http://maps.google.com/maps/api/js?sensor=false" type="text/javascript"></script>
</head>
<body>
<div id="gmap"></div>
<p>ランダムに生成したマーカーが全て地図内に収まるように調整</p>
<script type="text/javascript">
var lat = 35.689160610317174;
var lng = 139.70083951950073;
var map = new google.maps.Map(
document.getElementById("gmap"),{
zoom : 10,
center : new google.maps.LatLng(lat, lng),
mapTypeId : google.maps.MapTypeId.ROADMAP
}
);
// マーカーをランダムに10個生成
var marker = new Array();
for(var i=0; i<10; i++){
var lat = 34 + Math.random()*2;
var lng = 137 + Math.random()*2;
marker[i] = new google.maps.Marker({
position: new google.maps.LatLng(lat, lng),
map: map
});
}
// 範囲内に収める
var minX = marker[0].getPosition().lng();
var minY = marker[0].getPosition().lat();
var maxX = marker[0].getPosition().lng();;
var maxY = marker[0].getPosition().lat();;
for(var i=0; i<10; i++){
var lt = marker[i].getPosition().lat();
var lg = marker[i].getPosition().lng();
if (lg <= minX){ minX = lg; }
if (lg > maxX){ maxX = lg; }
if (lt <= minY){ minY = lt; }
if (lt > maxY){ maxY = lt; }
}
var sw = new google.maps.LatLng(maxY, minX);
var ne = new google.maps.LatLng(minY, maxX);
var bounds = new google.maps.LatLngBounds(sw, ne);
map.fitBounds(bounds);
</script>
</body>
</html>