一尘不染

使用AJAX控件的v7限制Bing地图上的最小/最大缩放?

ajax

我正在使用Bing Maps AJAX控件v7的网站上工作。我需要做的一件事是限制缩放级别,以防止用户放大到某个级别或缩小到某个级别。

我在Map对象上找到一个“ getZoomRange”方法,对其进行检查后,它仅返回具有“ min”和“
max”属性的对象文字。因此,我认为重载可能会达到目的:

// "map" is our Bing Maps object
map.getZoomRange = function ()
{
  return {
    max:      14
    min:      5
  };
};

…但不是。它没有任何效果(实际上与使用默认仪表板时缩放滑块的外观有关)。

劫持事件并阻止其继续进行似乎也没有任何效果。


阅读 272

收藏
2020-07-26

共1个答案

一尘不染

根据Bing Maps的支持,做到这一点的唯一方法(这不是特别优雅,并且会在地图上产生一些不受欢迎的抖动),如下所示:

// "map" is our Bing Maps object, overload the built-in getZoomRange function
// to set our own min/max zoom
map.getZoomRange = function ()
{
  return {
    max:      14,
    min:      5
  };
};

// Attach a handler to the event that gets fired whenever the map's view is about to change
Microsoft.Maps.Events.addHandler(map,'viewchangestart',restrictZoom);

// Forcibly set the zoom to our min/max whenever the view starts to change beyond them 
var restrictZoom = function ()
{
  if (map.getZoom() <= map.getZoomRange().min) 
  {
    map.setView({
      'zoom':       map.getZoomRange().min,
      'animate':    false
    });
  }
  else if (map.getZoom() >= map.getZoomRange().max) 
  {
    map.setView({
      'zoom':       map.getZoomRange().max,
      'animate':    false
    });
  }
};
2020-07-26