我在我的应用中使用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
参数,但我再也看不到如何将它应用于多个标记。
答案 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")