2013-10-29

Google Maps API :zoom, center を適当な値に設定する

◆mapOptions を定義するスクリプト

  1. var layout = new gmLayout(mapId, arrLatLng);
  2. var mapOptions = {
  3. zoom: layout.zoom,
  4. center: layout.center,
  5. mapTypeId: google.maps.MapTypeId.ROADMAP
  6. };
  7. map = new google.maps.Map(document.getElementById('map_canvas'),mapOptions);
gmLayout は最適化した zoom (lauout.zoom) と 最適化したcenter (layout.center)を求めるコンストラクタ
緯度経度の値の入った配列 arrLatLang に基づき、google.maps.Map の mapOptions の zoom と center を適当な値に決める。

◆コンストラクタ gmLayout

  1. function gmLayout(mapId, arrLatLng){
  2.  
  3. var arrLat = new Array() ;
  4. var arrLng = new Array() ;
  5. for ( i = 0; i < arrLatLng.length; i++ ) {
  6. arrLat[i] = arrLatLng[i].lat();
  7. arrLng[i] = arrLatLng[i].lng();
  8. }
  9.  
  10. var maxLat = Math.max.apply(null,arrLat);
  11. var maxLng = Math.max.apply(null,arrLng);
  12. var minLat = Math.min.apply(null,arrLat);
  13. var minLng = Math.min.apply(null,arrLng);
  14.  
  15. var ctrLat = (maxLat+minLat)/2;
  16. var ctrLng = (maxLng+minLng)/2;
  17.  
  18. var rangeLat = maxLat-minLat;
  19. var rangeLng = maxLng-minLng;
  20. var zoomLat = Math.floor( Math.log(340/rangeLat*$('#'+mapId).height()/256) / Math.log(2) );
  21. var zoomLng = Math.floor( Math.log(340/rangeLng*$('#'+mapId).width()/256) / Math.log(2) );
  22.  
  23. this.zoom = Math.min ( zoomLat, zoomLng );
  24. this.center = new google.maps.LatLng(ctrLat,ctrLng);
  25.  
  26. }
10-13行目:Math.max.apply(null,配列), Math.min.apply(null,配列) は配列の中から最大値、最小値を求める関数。
20-21行目:340°(360°ではない)が 256×2zoom に対応していることを利用している〔リンク〕


応用例(GpxClipper:gpxファイルを加工するウェブアプリ)


関連ページ
参考にしたページ

2013-11-10 改定


以上