1

根据 OpenLayers 文档,构造函数 OpenLayers.Map() 允许附加属性范围,即“地图的初始范围”参见此处)。

但是,我无法让它产生任何效果。我知道我可以在构建地图后通过调用.zoomToExtent() 来设置初始范围。但我想使用这个范围属性,因为我在eventListeners属性中设置了一个zoomend事件,但不希望它通过对.zoomToExtent()的初始调用来触发。有谁知道如何使用这个范围属性?

这是不起作用的代码

map = new OpenLayers.Map('map',{
        extent: bounds,
        layers: [osmLayer,vectorLayer],
        projection: "EPSG:900913",
        eventListeners: {
            zoomend: function() {
                //..zoomend event listener code
            }
        }
    });

在上面的例子中:

  • bounds是一个有效的OpenLayers.Bounds对象
  • osmLayervectorLayer是有效的OpenLayers.Layer对象,其中osmLayer是基础层。

上面的代码会发生什么,地图被完全缩小了(实际上你什么都看不到),任何平移的尝试都会导致错误被抛出。要使地图进入正确状态,用户必须放大,然后再次平移,您可以看到地图。

4

2 回答 2

0

我遇到了同样的问题。

文档中提到的“范围”选项可能是错误的。它不存在。我检查了源代码,看不到任何处理此类选项的代码。我联系了作者,他已经创建了一个从文档中删除此选项的拉取请求

于 2013-07-17T20:57:01.210 回答
0

恐怕我不确定如何使您列出的代码正常工作,但是以下替代方法对我有用:

map = new OpenLayers.Map('map',{projection: new OpenLayers.Projection("EPSG:4326")});

//ADD A BUNCH OF LAYERS AND SUCH HERE

//Set map center to this location at this zoom level
map.setCenter(new OpenLayers.LonLat(-93.9196,45.7326),5);

作为最后的手段,您可以在缩放功能的开头放置一行:

if(!map_ready) return;

然后在适当的时候将变量设置map_ready为 true。

于 2012-10-07T08:01:17.693 回答