4

我发布了这个问题以使用 openlayers3 在运行时更改 maxZoom 并且效果很好:

map.setView(new ol.View({
  zoom: 10,
  maxZoom: 17,
  minZoom: 10,
}));

但是,我尝试使用angular-openlayers-directive集成此解决方案,并且地图正在消失。这是一个Plunker 演示失败。我尝试创建新指令,但也没有用。

olData.getMap().then(function(map){
  map.setView(new ol.View({
    zoom: 11,
    maxZoom: 11,
    minZoom: 0,
  }));
});

任何关于如何集成它以及是否可以在 Plunker 演示中使其工作的建议都会很棒。

4

2 回答 2

1

查看ol.View对象的文档

http://openlayers.org/en/v3.2.1/apidoc/ol.View.html

如果在创建对象时未给出 center 选项,ol.View则将其视为undefined. 如果它的undefined然后层源将不会被获取。在$scope.changeZoom()方法中心是未定义的,因为它在创建时没有提供。由于此地图对象未正确加载。

使固定

olData.getMap().then(function(map){
   map.setView(new ol.View({
      center: ol.proj.transform([37.41, 8.82], 'EPSG:4326', 'EPSG:3857'),
      zoom: 11,
      maxZoom: 11,
      minZoom: 0,
   }));
});

我给了一些随机坐标作为中心。请参阅此处的工作 plunk 代码

于 2017-02-20T17:50:29.427 回答
0

我不完全确定它们为什么不一样(我没有调查您所说的普通 ol3 解决方案)但是在逐步完成 ol-debug.js 代码之后,它似乎正在绘制一个空白框架,因为新视图没有没有中心。

您可以使用现有视图的中心设置中心:

$scope.changeZoom = function () {
    olData.getMap().then(function (map) {
        newView = new ol.View({
            zoom: 5,
            maxZoom: 20,
            minZoom: 0,
        });
        newView.setCenter(map.getView().getCenter());
        map.setView(newView);
    });
};

这是一个有效的 plunker *.

*在此之前我没有使用过 plunker,所以如果它不起作用,请告诉我,我会再试一次!

于 2017-02-20T19:54:29.943 回答