平移气泡

时间:2018-09-19 15:44:26

标签: here-api

当地图视图之外的区域存在时,是否可以平移当前视图中的气泡?

例如https://dev2.gruppenunterkuenfte.de/nordrhein-westfalen__r187.html?vs=1

您可以单击边缘的气泡,然后在外面看到它们。

使用google:https://www.gruppenunterkuenfte.de/nordrhein-westfalen__r187.html?vs=1

将在全屏状态下自动平移...

问候 克里斯

2 个答案:

答案 0 :(得分:0)

开箱后可能无法使用,但是可以执行以下操作来检查打开气泡并移动地图中心时的情况。

    var checkBubble = function(evt) {
    setTimeout(function() {
        if(infoBubble && infoBubble.getState() == "open"){
            var border = 50;
            var objRect = infoBubble.getContentElement().parentElement.getBoundingClientRect();
            var objStyleRight = Math.abs(parseInt(infoBubble.getContentElement().parentElement.style.right));
            objStyleRight = objStyleRight ? objStyleRight : 0;

            var mapRect = map.getElement().getBoundingClientRect();
            var shiftX = 0;
            var shiftY = 0;

            // check, if infobubble isn't too far to up
            if ((objRect.top-border)  < mapRect.top)  {
                shiftY = (mapRect.top - (objRect.top-border));
            }

            // check, if infobubble isn't too far to the left
            var objLeft = (objRect.left - objStyleRight);
            if ((objLeft-border) < mapRect.left) {
                shiftX = (mapRect.left - (objLeft-border));
            } // check, if infobubble isn't too far to the right
            else if ((objRect.right+border) > mapRect.right) {
                shiftX = -(objRect.right - (mapRect.right-border));
            }


            if ((shiftX == 0) && (shiftY == 0)) {
                return;
            }

            var currScreenCenter = map.geoToScreen(map.getCenter());
            var newY = (currScreenCenter.y - shiftY);
            var newX = (currScreenCenter.x - shiftX);

             var newGeoCenter = map.screenToGeo(newX, newY);
             map.setCenter(newGeoCenter, true); 
        }


     }, 20);
}

map.addEventListener("mapviewchange",checkBubble);

答案 1 :(得分:0)

非常感谢!我扩展到气泡位于底部外部的情况:

...

                    // check, if infobubble isn't too far to up
                    if ((objRect.top-border)  < mapRect.top)  {
                        shiftY = (mapRect.top - (objRect.top-border));
                    } else {
                        if ((objRect.bottom+border) > mapRect.bottom) {
                            shiftY = -(objRect.bottom - (mapRect.bottom-border));
                        }
                    }

...

问候 克里斯