勉強したことのメモ

webプログラマが勉強したことのメモ。

GoogleMapsAPIでマーカーが全て表示されるように自動ズーム

   

GoogleMapsAPIでマーカーを複数設置した場合にズームの値や、マーカーの位置によっては全てのマーカーが表示されない場合がある。これを何とかしたかった。調べると自動でズーム調整できる機能がある模様。

 

■サンプル

http://sample.taitan916.info/autozoom/

 

■ソース

<!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>
<meta name="robots" content="noindex, nofollow" />
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<meta id="viewport" name="viewport" content="width=320; initial-scale=1.0; maximum-scale=1.0; user-scalable=0;" />
<title>GoogleMapsAPI 自動ズームテスト</title>
<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=true"></script> 
<meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
</head>
<body>

	<div id="map_canvas" style="width:500px; height:500px;"></div>

	<script>
	var mapData = [
		{ 'name':'大阪城', 'x':'34.687315', 'y':'135.526201'}, 
		{ 'name':'通天閣', 'x':'34.644885', 'y':'135.494516'}, 
		{ 'name':'道頓堀', 'x':'34.668548', 'y':'135.502715'}, 
		{ 'name':'京都タワー', 'x':'34.987574', 'y':'135.759362'}, 
	];
	var minLat = 999;
	var maxLat = 0;
	var minLng = 999;
	var maxLng = 0;

	var currentWindow = null;

	var latlng = new google.maps.LatLng(mapData[0].x, mapData[0].y);
	var myOptions = {
		center: latlng, 
		mapTypeId: google.maps.MapTypeId.ROADMAP
	};

	var map = new google.maps.Map(document.getElementById("map_canvas"), myOptions); //map生成

	for (var key in mapData){
		makeMarker(mapData[key]);
	}

	autoZoom( maxLat, minLat, maxLng, minLng );

	//マーカー作成
	function makeMarker( mapData ){
		if( !mapData ) return false;

		if(mapData.x < minLat) minLat = mapData.x;
		if(mapData.x > maxLat) maxLat = mapData.x;
		if(mapData.y < minLng) minLng = mapData.y;
		if(mapData.y > maxLng) maxLng =mapData.y;

		var marker = new google.maps.Marker({
			position : new google.maps.LatLng(mapData.x,mapData.y), 
			map: map 
		});

		var infoWindow = new google.maps.InfoWindow();
		google.maps.event.addListener(marker, 'click', function() {
			if( currentWindow ) currentWindow.close();

			infoWindow.setContent(mapData.name);
			infoWindow.open(map,marker);
			currentWindow = infoWindow;
		});
	}

	//オートズーム
	function autoZoom( maxLat, minLat, maxLng, minLng ){
		if( !maxLat || !minLat || !maxLng || !minLng ) return false;

		var sw = new google.maps.LatLng(maxLat,minLng);
		var ne = new google.maps.LatLng(minLat,maxLng);
		var bounds = new google.maps.LatLngBounds(sw, ne);
		map.fitBounds(bounds);
	}

	</script>
</body>
</html>

 

■その他

fitBoundsメソッドで対応できるみたい。これは便利。

 - Google Maps API, Google

  関連記事

GoogleMapAPIでヒートマップを表示する方法

GoogleMapAPIで花粉状況や雨量を可視化しやすいようなヒートマップ的なも ...

Advanced Custom FieldsでGoogleMapの使用

Advanced Custom FieldsでGoogleMapを使用したかった ...

GoogleMapAPIで現在地取得と目的地までのルート表示

GoogleMapAPIを使って現在地を取得しつつ、目的地までのルートを表示させ ...

GASを使ってみて感じたメリットとデメリット

Google Apps Scriptを色々勉強した中で感じたメリットとデメリット ...

GASで「小説家になろう」サイトの更新通知をLINEに送る

Google Apps Scriptの勉強として「小説家になろう」サイトの特定小 ...

Google map APIでマーカー(アイコン)を好きな画像に変える

Googleマップでユーザーにマーカー画像をアップロードさせて、それをマップ表示 ...

PHPで位置情報を取得してGoogleMapAPIで使用する方法

GPSみたいな位置情報をPHPで取得し、GoogleMapAPIでその場所を反映 ...

androidでgeolocationを使うとtimeoutになる

Geolocation APIを用いて現在地をGoogleMapに表示させるとい ...

google map apiとPHPを組み合わせて複数マーカーとウィンドウを連携させる

やりたかった事は、 mysqlから経度緯度、マーカー名、マーカーIDを持ってきて ...

GoogleMapAPIでジオコーディングできない

住所から経度緯度を取得するジオコーディングをGoogleMapAPIを用いて行お ...