0

我想在我的地图中设置最小和最大缩放级别。

我的第一个想法是监听“zoomstart”事件,但是 org.gwtopenmaps.openlayers.client.Map 类没有实现任何具有这种事件类型的监听器。然后我试着听“zoomend”事件。我的想法是在缩放事件之后检查缩放级别,以及它是否高于/低于阈值,而不是缩放到该阈值。示例代码:

    @Override
    public void onMapZoom(MapZoomEvent eventObject) {
        if (eventObject.getSource().getZoom() > 18) {
            eventObject.getSource().zoomTo(18);
        }
    }

但我发现,在这种情况下,zoomTo 事件不会触发。有没有人解决这个问题?

4

3 回答 3

2

好主意Imreking。

我已将此添加到 GWT-Openlayers 库中。因此,如果您现在从 github 下载最新版本,您可以:

map.setMinMaxZoomLevel(6, 8);

而且您不再需要在自己的代码中使用一些 javascript 方法。

实际上,我还添加了一个展示,但在将其上传到我们的网站时遇到了困难。

现在已经成功上传新的陈列柜。请参阅http://demo.gwt-openlayers.org/gwt_ol_showcase/GwtOpenLayersShowcase.html?example=Min%20max%20zoom%20example以查看新添加的 Map.setMinMaxZoomLevel(minZoom, maxZoom) 的示例。

于 2013-11-20T20:04:54.600 回答
1

我认为这在 OpenLayers(普通和 GWT)中是不可能的。据我所知,有两种解决方案。

选项 1 这对用户来说很难看。当他看到地图被缩放时,就在这之后又回到了之前的缩放级别。需要 Timer 才能让 OL 有机会为缩放设置动画。

    map.addMapZoomListener(new MapZoomListener()
    {
        @Override
        public void onMapZoom(final MapZoomEvent eventObject)
        {
            Timer t = new Timer()
            {

                @Override
                public void run()
                {
                    if (eventObject.getSource().getZoom() > 15)
                    {
                      map.zoomTo(15);
                    }
                    else if (eventObject.getSource().getZoom() < 10)
                    {
                        map.zoomTo(10);
                    }
                }
            };
            t.schedule(500);
        }
    });

选项 2 不要使用缩放默认缩放控件,而是创建自己的缩放按钮(使用普通 GWT),并将它们放在地图的顶部。如果您愿意,您可以按照与普通按钮相同的方式设置这些按钮的样式。“在普通 GWT 中创建并使其看起来像 OL”的技巧是我经常使用的技巧(例如创建更高级的图层切换器)。

注意:我是 GWT-OpenLayers 的开发人员之一,如果您愿意,我可以在我们的展示中添加一个示例,展示如何执行“选项 2”。

于 2013-11-20T12:40:57.527 回答
0

Knarf,谢谢你的回复。我尝试了“选项 1”并且它有效,但我找到了另一种可能更适合用户接受的解决方案。

我的解决方案是:

    map.isValidZoomLevel = function(zoomLevel) {
       return ((zoomLevel != null) &&
          (zoomLevel >= minZoomLevel) && 
          (zoomLevel <= maxZoomLevel) &&
          (zoomLevel < this.getNumZoomLevels()));
    }

我覆盖了 isValidZoomLevel 方法。minZoomLevel 和 maxZoomLevel 变量是在应用程序启动时设置的。我不喜欢从 GWT 代码调用 javascript,但在这里我没有任何其他机会。

于 2013-11-20T13:45:05.883 回答