◆mapOptions を定義するスクリプト
gmLayout は最適化した zoom (lauout.zoom) と 最適化したcenter (layout.center)を求めるコンストラクタ
- var layout = new gmLayout(mapId, arrLatLng);
- var mapOptions = {
- zoom: layout.zoom,
- center: layout.center,
- mapTypeId: google.maps.MapTypeId.ROADMAP
- };
- map = new google.maps.Map(document.getElementById('map_canvas'),mapOptions);
緯度経度の値の入った配列 arrLatLang に基づき、google.maps.Map の mapOptions の zoom と center を適当な値に決める。
◆コンストラクタ gmLayout
10-13行目:Math.max.apply(null,配列), Math.min.apply(null,配列) は配列の中から最大値、最小値を求める関数。
- function gmLayout(mapId, arrLatLng){
- var arrLat = new Array() ;
- var arrLng = new Array() ;
- for ( i = 0; i < arrLatLng.length; i++ ) {
- arrLat[i] = arrLatLng[i].lat();
- arrLng[i] = arrLatLng[i].lng();
- }
- var maxLat = Math.max.apply(null,arrLat);
- var maxLng = Math.max.apply(null,arrLng);
- var minLat = Math.min.apply(null,arrLat);
- var minLng = Math.min.apply(null,arrLng);
- var ctrLat = (maxLat+minLat)/2;
- var ctrLng = (maxLng+minLng)/2;
- var rangeLat = maxLat-minLat;
- var rangeLng = maxLng-minLng;
- var zoomLat = Math.floor( Math.log(340/rangeLat*$('#'+mapId).height()/256) / Math.log(2) );
- var zoomLng = Math.floor( Math.log(340/rangeLng*$('#'+mapId).width()/256) / Math.log(2) );
- this.zoom = Math.min ( zoomLat, zoomLng );
- this.center = new google.maps.LatLng(ctrLat,ctrLng);
- }
20-21行目:340°(360°ではない)が 256×2zoom に対応していることを利用している〔リンク〕。
応用例(GpxClipper:gpxファイルを加工するウェブアプリ)
関連ページ
参考にしたページ
2013-11-10 改定
以上