Cesium--氣泡彈窗

參考資料

  首先感謝如下博主們的幫助,本人剛接觸Cesium不久,無奈只能拾人牙慧了。javascript

  因爲cesium沒有自帶的點擊彈出氣泡的功能,因此須要本身去開發一個這樣的功能,網絡上資源不少,看到基本思路都一致。如下奉上參考網址css

  :https://blog.csdn.net/zlx312/article/category/7232371java

 

 

實現思路

一、樣式表canvas

/*--------------------------氣泡彈窗Start---------------------------*/
/*leaflet風格氣泡窗口樣式模板*/
.trackPopUp {
    display: none;
    color: rgb(255, 255, 255);
    height: 50px;
}

.leaflet-popup {
    position: absolute;
}

.leaflet-popup-close-button {
    position: absolute;
    top: 0;
    right: 0;
    padding: 4px 4px 0 0;
    text-align: center;
    font: 25px/25px Tahoma, Verdana, sans-serif;
    color: rgb(255, 255, 255);
    text-decoration: none;
    font-weight: bold;
    background: transparent;
}

.leaflet-popup-content-wrapper {
    max-height: 200px;
    overflow-y: auto;
    height: 133px;
    padding: 1px;
    text-align: left;
    border-radius: 12px;
    background-image: url('../images/pop/popbackground.png');
}

.leaflet-popup-content {
    margin: 5px 20px;
    line-height: 1.4;
    
}
.leaflet-popup-content div{
    text-align: center;
}

    .leaflet-popup-content div {
        font-size: 18px;
    }

    .leaflet-popup-content table {
        margin-top: 15px;
    }

        .leaflet-popup-content table tr {
            height: 25px;
        }
/*--------------------------氣泡彈窗END---------------------------*/

  

 二、只是實現了單個標註點氣泡彈窗功能,所有標註能夠參考本身循環標註實現,另外地圖移動和縮放實時更新窗體位置,除了更改源碼,暫時沒有太好的辦法,所以此處未實現,當視圖變化時,窗體會隱藏。網絡

function (viewer) {
        var handler3D = new Cesium.ScreenSpaceEventHandler(viewer.scene.canvas);
        var scene = viewer.scene;
        var infoDiv = '<div id="trackPopUp" class="trackPopUp">' +
			                 '<div id="trackPopUpContent" class="leaflet-popup" style="top:5px;left:0;">' +
	                           '<a class="leaflet-popup-close-button" href="#">×</a>' +
	                           '<div class="leaflet-popup-content-wrapper">' +
	                             '<div id="trackPopUpLink" class="leaflet-popup-content"></div>' +
	                           '</div>' +
	                         '</div>' +
			           '</div>';
        $("#cesiumContainer").append(infoDiv);
        //綁定鼠標單擊
        handler3D.setInputAction(function (movement) {
            var pick = scene.pick(movement.position);
            if (pick && pick.id) {
                $('#trackPopUp').show();
                var content = '<div>' + pick.id._name + '</div><table ><tbody>';
                for (var i = 0; i < pick.id._monitoItems.length; i++) {
                 content += '<tr><td>' + pick.id._monitoItems[i].name + ':</th><td>' + pick.id._monitoItems[i].value + pick.id._monitoItems[i].units + '</td></tr>';                  
                }
                content += '</tbody></table>'
                var obj = { position: movement.position, content: content };
                infoWindow(obj);
                function infoWindow(obj) {
                    var picked = scene.pick(obj.position);
                    if (Cesium.defined(picked)) {
                        var id = Cesium.defaultValue(picked.id, picked.primitive.id);
                        if (id instanceof Cesium.Entity) {
                            $(".cesium-selection-wrapper").show();
                            $('#trackPopUpLink').empty();
                            $('#trackPopUpLink').append(obj.content);
                            function positionPopUp(c) {
                                var x = c.x - ($('#trackPopUpContent').width()) / 2;
                                var y = c.y - ($('#trackPopUpContent').height());
                                $('#trackPopUpContent').css('transform', 'translate3d(' + x + 'px, ' + y + 'px, 0)');
                            }
                            var c = new Cesium.Cartesian2(obj.position.x, obj.position.y);
                            $('#trackPopUp').show();
                            positionPopUp(c); // Initial position
                            $('.leaflet-popup-close-button').click(function () {
                                $('#trackPopUp').hide();
                                $('#trackPopUpLink').empty();
                                $(".cesium-selection-wrapper").hide();
                                return false;
                            });
                            return id;
                        }
                    }
                }
            }
            else {
                $('#trackPopUp').hide();
            }

        }, Cesium.ScreenSpaceEventType.LEFT_CLICK);
        //綁定地圖移動
        handler3D.setInputAction(function (movement) {
            $('#trackPopUp').hide();
        }, Cesium.ScreenSpaceEventType.LEFT_UP);
        //綁定地圖縮放
        handler3D.setInputAction(function (movement) {
            $('#trackPopUp').hide();
        }, Cesium.ScreenSpaceEventType.WHEEL);
        //綁定滾輪點擊事件
        handler3D.setInputAction(function (movement) {
            $('#trackPopUp').hide();
        }, Cesium.ScreenSpaceEventType.MIDDLE_DOWN);
    },

  

 

 

結果展現

  

相關文章
相關標籤/搜索