如何垂直限制OpenLayers地图的范围?

时间:2014-08-05 23:37:19

标签: javascript openlayers

当我向北移动时,地图会熄灭,我会看到HTML的白色背景。我想垂直平移,地图在到达顶部(或分别为底部)时阻止。

我试图设置边界,但是这个解决方案也是水平限制。我希望能够向左或向右无限地平移,但是可以上下限制平移。

我怎么能这样做?

由于

编辑1: 我倾向于不扩展OpenLayers核心。我希望解决方案涵盖所有平移,拖动,缩放案例。我认为,一般解决方案都没问题。我听说地图初始化中有一个选项,只能垂直限制范围。你对此有所了解吗?

Map out on pan north

1 个答案:

答案 0 :(得分:0)

我通过覆盖OpenLayers.Control.PanZoom的buttonDown函数来完成此操作,该函数以这样的方式开始:

    buttonDown: function (evt) {
        if (!OpenLayers.Event.isLeftClick(evt)) {
            return;
        }

        switch (this.action) {
            case "panup":
                this.map.pan(0, -this.getSlideFactor("h"));
                break;
        switch (this.action) {
            case "pandown":
                this.map.pan(0, this.getSlideFactor("h"));
                break;
        ... etc

所以不是这样,你可以这样做:

OpenLayes.Control.PanZoom.prototype.buttonDown = function (evt){
       if (!OpenLayers.Event.isLeftClick(evt)) {
            return;
        }
        //get map bounds
        var mapBounds=map.getExtent(); 

         switch (this.action) {
            case "panup":
                //add you code here to check extents
                if (mapBounds.top < some_number){ 
                   this.map.pan(0, -this.getSlideFactor("h"));
                   break;
                }
        switch (this.action) {
            case "pandown":
                 //add you code here to check extents
                if (mapBounds.bottom > some_number){ 
                    this.map.pan(0, this.getSlideFactor("h"));
                    break;
                }
             //leave this as it was, as you don't care about left/right
             case "panleft":
                  this.map.pan(-this.getSlideFactor("w"), 0);
                  break;
             ....

等。请注意,您必须填写函数的其余部分,因为它正在覆盖它。您希望确保在加载OpenLayers.js后添加此功能。