Özel bir kenar boşluğu olmadan, haritayı olabildiğince yakınlaştıracak bir çözüm. İsterseniz bir miktar marjı hesaba katmanız gerekir.
Benim çözümüm this comment in a Google Groups thread dayanmaktadır. Ne yazık ki, helper.getProjection()
numaralı çağrı her zaman tanımsız olarak geri döndü, bu yüzden yukarıdaki cevabı biraz uyarladım ve bu çalışma koduyla geldim.
Sadece
myFitBounds(map, bounds)
ile
map.fitBounds(bounds)
için mevcut aramaları değiştirin:
function myFitBounds(myMap, bounds) {
myMap.fitBounds(bounds);
var overlayHelper = new google.maps.OverlayView();
overlayHelper.draw = function() {
if (!this.ready) {
var projection = this.getProjection(),
zoom = getExtraZoom(projection, bounds, myMap.getBounds());
if (zoom > 0) {
myMap.setZoom(myMap.getZoom() + zoom);
}
this.ready = true;
google.maps.event.trigger(this, 'ready');
}
};
overlayHelper.setMap(myMap);
}
// LatLngBounds b1, b2 -> zoom increment
function getExtraZoom(projection, expectedBounds, actualBounds) {
var expectedSize = getSizeInPixels(projection, expectedBounds),
actualSize = getSizeInPixels(projection, actualBounds);
if (Math.floor(expectedSize.x) == 0 || Math.floor(expectedSize.y) == 0) {
return 0;
}
var qx = actualSize.x/expectedSize.x;
var qy = actualSize.y/expectedSize.y;
var min = Math.min(qx, qy);
if (min < 1) {
return 0;
}
return Math.floor(Math.log(min)/Math.log(2) /* = log2(min) */);
}
// LatLngBounds bnds -> height and width as a Point
function getSizeInPixels(projection, bounds) {
var sw = projection.fromLatLngToContainerPixel(bounds.getSouthWest());
var ne = projection.fromLatLngToContainerPixel(bounds.getNorthEast());
return new google.maps.Point(Math.abs(sw.y - ne.y), Math.abs(sw.x - ne.x));
}
"Ödül marjı" istenen sınırların yüzdesi olabilir mi? Bu kenar boşluğu düzeltilmişse, daha az, ölçülmüş, sığ bir şekilde fitBounds() öğesine girebilirsiniz. Böylece, teminat marjının sonu, istediğiniz başlangıç sınırlarıyla eşleşecektir. Umarım bu mantıklıdır. –
@HeitorChang, bu gerçekten hacky ve beceriksiz bir çözüm olurdu, ama yine de "lütuf marjı" nın fitBounds() tarafından nasıl hesaplandığını bilmeden, bunu yapamazsınız. – TMS
Bilgisayar korsanlığı yaptıktan sonra, v3 fitBounds() öğesinin, yalnızca yakınlaştırma düzeyinde en az 45 piksel dolgu (dikdörtgenin her iki tarafına sınırlarınızla tanımlanmış) olması durumunda yakınlaştırılacağını düşündüm. Yakın bir çağrı olduğunu farz edersek, harita büyük bir boşluk bırakarak uzaklaştırılır. Umarım bu sizin için yararlı olabilir. –