少しmap.fitBounds()
に送信する前にバウンディングボックスを縮小
2017でこの問題を修正。ここで
はバウンディングボックスを縮小する機能です:
// Values between 0.08 and 0.28 seem to work
// Any lower and the map will zoom out too much
// Any higher and it will zoom in too much
var BOUNDS_SHRINK_PERCENTAGE = 0.08; // 8%
/**
* @param {google.maps.LatLngLiteral} southwest
* @param {google.maps.LatLngLiteral} northeast
* @return {Array[google.maps.LatLngLiteral]}
*/
function slightlySmallerBounds(southwest, northeast) {
function adjustmentAmount(value1, value2) {
return Math.abs(value1 - value2) * BOUNDS_SHRINK_PERCENTAGE;
}
var latAdjustment = adjustmentAmount(northeast.lat, southwest.lat);
var lngAdjustment = adjustmentAmount(northeast.lng, southwest.lng);
return [
{lat: southwest.lat + latAdjustment, lng: southwest.lng + lngAdjustment},
{lat: northeast.lat - latAdjustment, lng: northeast.lng - lngAdjustment}
]
}
はこのようにそれを使用します。
// Ensure `southwest` and `northwest` are objects in google.maps.LatLngLiteral form:
// southwest == {lat: 32.79712, lng: -117.13931}
// northwest == {lat: 32.85020, lng: -117.09356}
var shrunkBounds = slightlySmallerBounds(southwest, northeast);
var newSouthwest = shrunkBounds[0];
var newNortheast = shrunkBounds[1];
// `map` is a `google.maps.Map`
map.fitBounds(
new google.maps.LatLngBounds(newSouthwest, newNortheast)
);
私はcodrと同じことをやってアプリを持っている:で現在のマップの境界を節約しますURLを更新し、更新時にURLの境界からマップを初期化します。この解決策は素晴らしいことです。
これはなぜ機能しますか?
fitBounds()
が呼び出されたときに
Googleマップは、本質的にこれを行います:
- センター与えられたバウンディングボックスの中心点上のマップ。
- ビューポートがになる最高ズームレベルにズームすると、の指定された境界の内側にビューポートボックスのが表示されます。
それが1つの以上のレベルをズームアウトして与えられた境界が正確一致ビューポート、Googleマップでは、境界を「含む」とすることを考慮していないだろう場合。
私はここに着陸するのに16時間以上かかりました。これがバグではない場合でも、これをやろうとしている人にはいくつか回避すべきです。 –