cesium添加多個geojson文件並分別控制顯示和隱藏


/*獲取geojson數據*/
function get_geojson(name,h,n){
    let x=document.getElementById(n);
    if(x.className === "la"){
       loadgeojson(name,h,n);
       x.className = "la2";
    }else{
        x.className = "la";
        let len = viewer.dataSources.length;
        if(len>0){
            for(let i=0;i<len;i++){
                var dataSource = viewer.dataSources.get(i);
                if(dataSource._name === n){
                    viewer.dataSources.remove(dataSource);
                }
            }
        }
    }
}
var promise=new Array(9);
function loadgeojson(name,h,n){
    let xmlhttp,p;
    if (window.XMLHttpRequest)
    {
        xmlhttp=new XMLHttpRequest();
    } else
    {
        xmlhttp=new ActiveXObject("Microsoft.XMLHTTP_geo");
    }
    xmlhttp.onreadystatechange=function()
    {
        if (xmlhttp.readyState==4 && xmlhttp.status==200 )
        {
            p=xmlhttp.response;
            Cesium.Math.setRandomNumberSeed(0);//設置隨機數種子
            promise[n] = Cesium.GeoJsonDataSource.load(p);
            promise[n].then(function (dataSource) {
                viewer.dataSources.add(dataSource);
                dataSource.name= n;
                let entities = dataSource.entities.values;
                entities.id=n;
                let colorHash = {};
                //可對單個實體進行設置
                for (let i = 0; i < entities.length; i++) {
                    let entity = entities[i];//geojson里面必須得有一個name屬性,entity.name對應
                    let name = entity.name;//可以使兩個同名要素使用同一種顏色
                    let color = colorHash[name];
                    if (!color) {
                        color = Cesium.Color.fromRandom({
                            alpha : 1.0
                        });
                        colorHash[name] = color;
                    }
                    entity.polygon.material = color;
                    entity.polygon.outline = true;// polygon邊線顯示與否
                    entity.polygon.height=h;//底面距離地面高度
                    entity.polygon.extrudedHeight =h+0.2;//頂面距離地面高度
                }
            });
            /*viewer.flyTo(promise[n]);*/
        }
    };
    xmlhttp.open("GET","./jsp/get_geojson.jsp?floor_name="+name,true);
    xmlhttp.send();
}

完整代碼如上所示。

1創建promise數組,長度為geojson數據的個數;

2loadgeojson(name,h,n)函數異步加載geojson文件(服務器后台從數據庫中下載json數據到本地,返回文件地址p),name為geojson數據名稱,h為高度,n為id,設為datasource名稱;

3getjson(name,h,n)函數,name為geojson數據名稱,h為高度,n為datasource名稱(參數與loadgeojson相同),datasource的id從1開始記錄geojson加載順序,判斷名稱是否一致,刪除該資源(無序)。

4代碼實現了在頁面通過button控制geojson的加載和移除,對於已經加載的geojson數據,button.style.backgroundcolor變為紅色(.la2樣式),當移除該數據時,button回到.la樣式。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM