在谷歌地图应用编程接口v2中,我国地图很好地拟合到了700x400px的地图上,如下所示:
map.getBoundsZoomLevel(<bounds of our country>)
但是在API v3中,map.fitBounds()
方法不适合700x400的缩放级别-它缩小了一个级别。
这意味着map.fitBounds()
会有一些“宽限”或其他东西。
如何影响此页边距的大小?
发布于 2014-06-30 21:00:34
这里有一个解决方案,可以在没有自定义边距的情况下尽可能地放大地图。如果你想的话,你应该能够调整它来考虑一些边际。
我的解决方案是基于this comment in a Google Groups thread的。不幸的是,对helper.getProjection()
的调用总是返回undefined,所以我稍微修改了上面的答案,并提出了这个有效的代码。
只需将现有的对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));
}
发布于 2017-11-30 17:35:05
现在,方法fitBounds有了表示填充大小的第二个参数。对于那些想要移除它的人,你只需要传递0。
Map.map.fitBounds(bounds, 0);
New method signature: fitBounds(bounds:LatLngBounds|LatLngBoundsLiteral, padding?:number)
https://stackoverflow.com/questions/9843732
复制相似问题