2016-07-07 4 views
0

なぜこれが機能しないのかわかりません。私は円の境界に従って境界を設定する必要がありますが、十分に拡大していないので余分な余白があるので、fitBoundsの後にズームを増やしてみてください。何もしません。地図の拡大がfitBoundsコール後に機能しない

???

LatLngDとLatLngOはグローバルで、別の場所に設定されています。

function initializeMap() { 
    map = new google.maps.Map(document.getElementById('map_canvas'), { 
     zoom: 10, 
     center: LatLngO, 
     mapTypeId: google.maps.MapTypeId.ROADMAP, 
     zoomControl: false 
    }); 
    setRadius(); 
} 

function setRadius() { 
    var distance = google.maps.geometry.spherical.computeDistanceBetween(LatLngO, LatLngD); 
    circle = new google.maps.Circle({ 
     strokeColor: '#FF0000', 
     strokeOpacity: 0.8, 
     strokeWeight: 2, 
     fillColor: '#FF0000', 
     fillOpacity: 0.35, 
     map: map, 
     center: LatLngO, 
     radius: distance, 
    }); 
    map.fitBounds(circle.getBounds()); 
    map.setZoom(map.getZoom() + 1); 
} 

答えて

1

GoogleマップのJavaScript API v3には、イベントベースです。新しいズームレベルが有効になるまで待ってから1ずつ増やす必要があります。

map.fitBounds(circle.getBounds()); 
google.maps.event.addListenerOnce(map, 'bounds_changed', function() { 
    map.setZoom(map.getZoom() + 1); 
}); 

addListenerOnceアクションが一度、イベントリスナーを削除実行)

proof of concept fiddle

コードスニペット:

var LatLngO = new google.maps.LatLng(42, -72); 
 
var LatLngD = new google.maps.LatLng(42.5, -72.7); 
 

 
function initializeMap() { 
 
    map = new google.maps.Map(document.getElementById('map_canvas'), { 
 
    zoom: 10, 
 
    center: LatLngO, 
 
    mapTypeId: google.maps.MapTypeId.ROADMAP, 
 
    zoomControl: false 
 
    }); 
 
    setRadius(); 
 
} 
 

 
function setRadius() { 
 
    var distance = google.maps.geometry.spherical.computeDistanceBetween(LatLngO, LatLngD); 
 
    circle = new google.maps.Circle({ 
 
    strokeColor: '#FF0000', 
 
    strokeOpacity: 0.8, 
 
    strokeWeight: 2, 
 
    fillColor: '#FF0000', 
 
    fillOpacity: 0.35, 
 
    map: map, 
 
    center: LatLngO, 
 
    radius: distance, 
 
    }); 
 
    map.fitBounds(circle.getBounds()); 
 
    google.maps.event.addListenerOnce(map, 'bounds_changed', function() { 
 
    map.setZoom(map.getZoom() + 1); 
 
    }); 
 
} 
 
google.maps.event.addDomListener(window, "load", initializeMap);
html, 
 
body, 
 
#map_canvas { 
 
    height: 100%; 
 
    width: 100%; 
 
    margin: 0px; 
 
    padding: 0px 
 
}
<script src="https://maps.googleapis.com/maps/api/js?libraries=geometry"></script> 
 
<div id="map_canvas"></div>

+0

最初の回答は正しく機能しており、実行可能でした。あなたのものはより包括的かつ柔軟なものでしたので、私はそれを最高の答えとしています。ありがとうございました。 – user192632

1

これは通常のマップが初期化された後に呼び出されidleイベントを使用して行われ、かつ、適正な境界を設定されている:

var listener = google.maps.event.addListener(map, "idle", function() { 
    map.setZoom(map.getZoom() - 1); 
    google.maps.event.removeListener(listener); 
}); 
+0

それはうまくいくのですが、幸運にも最初のロードでは1だけ増加したいだけです。半径が小さくなるにつれてマップが継続的にサイズ変更されず、半径は常に小さくなります。しかし、仕事はありません。次の1時間で誰も他の提案がない場合は、説明された状況で機能するため、回答としてマークします。 – user192632

関連する問題