在谷歌地图应用编程接口v2中,我国地图很好地拟合到了700x400px的地图上,如下所示:
map.getBoundsZoomLevel(<bounds of our country>)
但是在API v3中, map.fitBounds() 方法不适合700x400的缩放级别-它缩小了一个级别。
map.fitBounds()
这意味着 map.fitBounds() 会有一些“宽限”或其他东西。
如何影响此页边距的大小?
发布于 2014-06-30 21:00:34
这里有一个解决方案,可以在没有自定义边距的情况下尽可能地放大地图。如果你想的话,你应该能够调整它来考虑一些边际。
我的解决方案是基于 this comment in a Google Groups thread 的。不幸的是,对 helper.getProjection() 的调用总是返回undefined,所以我稍微修改了上面的答案,并提出了这个有效的代码。
helper.getProjection()
只需将现有的对 map.fitBounds(bounds) 的调用替换为 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());