我想在我的地图上设置一个最小的和最大的缩放级别。
我的第一个想法是侦听“缩放启动”事件,但是org.gwtopenmaps.openlayers.client.Map类没有实现任何具有这种事件类型的侦听器。然后我试着听“变焦”事件。我的想法是在缩放事件之后检查缩放级别,如果它高于/低于阈值,则放大到该阈值。示例代码:
@Override
public void onMapZoom(MapZoomEvent eventObject) {
if (eventObject.getSource().getZoom() > 18) {
eventObject.getSource().zoomTo(18);
}
}但我发现,在这种情况下,zoomTo事件不会触发。有谁能解决这个问题吗?
发布于 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)的示例。
发布于 2013-11-20 12:40:57
我认为这在OpenLayers (normal和GWT)中是不可能的。据我所知,有两种解决办法。
选项1,这对用户来说很难看。当他看到地图正在放大,就在这之后,又回到了以前的缩放级别。需要计时器给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”是我经常使用的技巧(例如,创建一个更高级的层切换程序)。
注意:我是的开发人员之一,如果您想要的话,我可以在我们的展示中添加一个示例,展示如何执行“选项2”。
发布于 2013-11-20 13:45:05
克纳夫,谢谢你的答复。我尝试了‘选项1’,它起了作用,但我找到了另一个解决方案,可能更容易为用户所接受。
我的解决办法是:
map.isValidZoomLevel = function(zoomLevel) {
return ((zoomLevel != null) &&
(zoomLevel >= minZoomLevel) &&
(zoomLevel <= maxZoomLevel) &&
(zoomLevel < this.getNumZoomLevels()));
}我推翻了isValidZoomLevel方法。应用程序启动时设置了minZoomLevel和maxZoomLevel变量。我不喜欢从GWT代码中调用javascript,但在这里我没有任何其他机会。
https://stackoverflow.com/questions/20091088
复制相似问题