首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何影响map.fitBounds()的“宽限”

如何影响map.fitBounds()的“宽限”
EN

Stack Overflow用户
提问于 2012-03-24 01:24:33
回答 2查看 5.3K关注 0票数 18

在谷歌地图应用编程接口v2中,我国地图很好地拟合到了700x400px的地图上,如下所示:

代码语言:javascript
复制
map.getBoundsZoomLevel(<bounds of our country>)

但是在API v3中,map.fitBounds()方法不适合700x400的缩放级别-它缩小了一个级别。

这意味着map.fitBounds()会有一些“宽限”或其他东西。

如何影响此页边距的大小?

EN

回答 2

Stack Overflow用户

发布于 2014-06-30 21:00:34

这里有一个解决方案,可以在没有自定义边距的情况下尽可能地放大地图。如果你想的话,你应该能够调整它来考虑一些边际。

我的解决方案是基于this comment in a Google Groups thread的。不幸的是,对helper.getProjection()的调用总是返回undefined,所以我稍微修改了上面的答案,并提出了这个有效的代码。

只需将现有的对map.fitBounds(bounds)的调用替换为myFitBounds(map, bounds)

代码语言:javascript
复制
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));
}
票数 2
EN

Stack Overflow用户

发布于 2017-11-30 17:35:05

现在,方法fitBounds有了表示填充大小的第二个参数。对于那些想要移除它的人,你只需要传递0。

代码语言:javascript
复制
Map.map.fitBounds(bounds, 0);


New method signature: fitBounds(bounds:LatLngBounds|LatLngBoundsLiteral, padding?:number)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9843732

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档