首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >设置最小和最大zoomLevels (GWT-OpenLayers)

设置最小和最大zoomLevels (GWT-OpenLayers)
EN

Stack Overflow用户
提问于 2013-11-20 08:44:32
回答 3查看 591关注 0票数 0

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

我的第一个想法是侦听“缩放启动”事件,但是org.gwtopenmaps.openlayers.client.Map类没有实现任何具有这种事件类型的侦听器。然后我试着听“变焦”事件。我的想法是在缩放事件之后检查缩放级别,如果它高于/低于阈值,则放大到该阈值。示例代码:

代码语言:javascript
复制
    @Override
    public void onMapZoom(MapZoomEvent eventObject) {
        if (eventObject.getSource().getZoom() > 18) {
            eventObject.getSource().zoomTo(18);
        }
    }

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-11-20 20:04:54

好主意。

我已经将其添加到GWT-Open层库中。因此,如果您现在从github下载最新版本,您可以这样做:

map.setMinMaxZoomLevel(6,8);

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

我实际上也增加了一个展示,但有困难上传到我们的网站。

上传新的展示现在已经成功了。请参阅showcase/GwtOpenLayersShowcase.html?example=Min%20max%20zoom%20example以查看新添加的Map.setMinMaxZoomLevel(minZoom,maxZoom)的示例。

票数 2
EN

Stack Overflow用户

发布于 2013-11-20 12:40:57

我认为这在OpenLayers (normal和GWT)中是不可能的。据我所知,有两种解决办法。

选项1,这对用户来说很难看。当他看到地图正在放大,就在这之后,又回到了以前的缩放级别。需要计时器给OL动画缩放的机会。

代码语言:javascript
复制
    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”是我经常使用的技巧(例如,创建一个更高级的层切换程序)。

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

票数 1
EN

Stack Overflow用户

发布于 2013-11-20 13:45:05

克纳夫,谢谢你的答复。我尝试了‘选项1’,它起了作用,但我找到了另一个解决方案,可能更容易为用户所接受。

我的解决办法是:

代码语言:javascript
复制
    map.isValidZoomLevel = function(zoomLevel) {
       return ((zoomLevel != null) &&
          (zoomLevel >= minZoomLevel) && 
          (zoomLevel <= maxZoomLevel) &&
          (zoomLevel < this.getNumZoomLevels()));
    }

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20091088

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档