Angularjs - Google Maps Set缩放多个标记

时间:2014-04-17 19:55:33

标签: javascript angularjs google-maps google-maps-api-3 angularjs-directive

我在我的应用中使用this set of Google Maps directives。我的问题...为什么某些标记对具有正确的缩放级别(意味着我可以看到它们并且它们没有放得太近),而在某些情况下缩放级别是关闭的(意味着我看不到没有标记缩小一两次点击次数

在我的(jade,fwiw)模板中,我这样使用它:

div(ng-if="mapready") //this ng-if is to force the map repaint when done, otherwise it can glitch
    google-map(center="fromCenter.center", zoom="zoomcalc")
        markers
            marker(coords="fromMarker", icon="greenMarker")
            marker(coords="toMarker", icon="redMarker")

缩放的计算如下:

    getBoundsZoomLevel: function (bounds, mapDim) {
        var zoomValue = 10;

        var WORLD_DIM = { height: 256, width: 256 };
        var ZOOM_MAX = 21;

        var ne = bounds.getNorthEast();
        var sw = bounds.getSouthWest();

        var latFraction = Math.abs((this._latRad(ne.lat()) - this._latRad(sw.lat())) / Math.PI);

        var lngDiff = ne.lng() - sw.lng();
        var lngFraction = ((lngDiff < 0) ? (lngDiff + 360) : lngDiff) / 360;

        var latZoom = this._zoom(mapDim.height, WORLD_DIM.height, latFraction);
        var lngZoom = this._zoom(mapDim.width, WORLD_DIM.width, lngFraction);

        zoomValue = lngZoom <= 0 ? latZoom : Math.min(latZoom, lngZoom, ZOOM_MAX);

        return zoomValue;
    }

在该代码中_zoom是:

    _zoom: function (mapPx, worldPx, fraction) {
        return Math.floor(Math.log(mapPx / worldPx / fraction) / Math.LN2);
     }

以下是此计算中使用的其他函数,以防它对您有所帮助:

    _latRad: function (lat) {
        var sin = Math.sin(lat * Math.PI / 180);
        var radX2 = Math.log((1 + sin) / (1 - sin)) / 2;

        return Math.max(Math.min(radX2, Math.PI), -Math.PI) / 2;
    }

问题是缩放的计算偶尔(通常可以正常工作)关闭。一个很好的例子,如果我将两个标记设置为旧金山,它们将起作用。但是,如果我将其中一个标记放在奥克兰的海湾(另一个在SF中),则缩放将太紧,我需要缩小以查看两个标记。

我已经阅读了有关map API fitBounds()方法的内容,但不知道它是否适用于这些指令,也不知道如何应用它。该指令确实有一个bounds参数,但我再也看不到如何将它应用于多个标记。

1 个答案:

答案 0 :(得分:1)

尝试使用:

div(ng-if="mapready")
    google-map(center="fromCenter.center", zoom="zoomcalc")
        markers(fit="true")
            marker(coords="fromMarker", icon="greenMarker")
            marker(coords="toMarker", icon="redMarker")