如何影响map.fitBounds()的“宽限”
在谷歌地图API v2中,我们国家的地图很适合700x400px地图,具体如下:
map.getBoundsZoomLevel(<bounds of our country>)
但在API v3中, map.fitBounds()
方法不适合在700x400的缩放级别 - 它缩小了一个级别。
这意味着map.fitBounds()
计算一些“宽限边界”或其他东西。
我如何影响这个边距的大小?
这里有一个解决方案,尽可能放大地图,而不需要自定义边距。 如果你愿意,你应该能够适应它来考虑一些保证金。
我的解决方案基于Google Groups主题中的此评论。 不幸的是,对helper.getProjection()
的调用总是返回undefined,所以我适应了上面的答案,并提出了这个工作代码。
只需用myFitBounds(map, bounds)
将现有的调用替换为map.fitBounds(bounds)
myFitBounds(map, bounds)
:
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));
}
现在,fitBounds方法有第二个参数来表示填充的大小。 对于那些想要删除它,你只需要通过0。
Map.map.fitBounds(bounds, 0);
New method signature: fitBounds(bounds:LatLngBounds|LatLngBoundsLiteral, padding?:number)
链接地址: http://www.djcxy.com/p/81565.html