SuperMap iClient3D for WebGL教程(空間分析)- Skyline天際線分析

天際線,天際線又稱城市輪廓或全景,是指天空與觀察點(diǎn)周圍的表面以及要素相分離的界線。天際線分析功能可根據(jù)觀察點(diǎn),生成當(dāng)前場景窗口中建筑物頂端邊緣與天空的分離線,主要用于城市建筑規(guī)劃等場景中

iClient3D for WebGL提取天際線

1.創(chuàng)建天際線分析,可設(shè)定相關(guān)展示屬性參數(shù)

// 創(chuàng)建天際線分析對象
var skyline = new Cesium.Skyline(scene);
 //設(shè)置顏色
 skyline.color =Cesium.Color.CYAN;
// 設(shè)置天際線的顯示模式,DisplayMode.LINE表示天際線的線模式,DisplayMode.FACE表示天際線的面模式
//默認(rèn)為線模式
skyline.displayStyle=Cesium.Skyline.displayMode.LINE

2.設(shè)置觀測點(diǎn)參數(shù)并執(zhí)行(以場景當(dāng)前位置為例,可按照需求進(jìn)行設(shè)定)

// 獲取場景的當(dāng)前相機(jī)位置
var cartographic = scene.camera.positionCartographic;
var longitude = Cesium.Math.toDegrees(cartographic.longitude);
var latitude = Cesium.Math.toDegrees(cartographic.latitude);
var height = cartographic.height;
 //天際線分析的視口位置設(shè)置成當(dāng)前相機(jī)位置
 skyline.viewPosition = [longitude, latitude, height];
// 設(shè)置俯仰,單位:度,取值范圍為0-90 
skyline.pitch = Cesium.Math.toDegrees(scene.camera.pitch);
// 獲取或設(shè)置相機(jī)與正北方向的夾角。單位:度,取值范圍0-360
skyline.direction = Cesium.Math.toDegrees(scene.camera.heading);
// 天際線分析半徑設(shè)置為10000米,單位:米。默認(rèn)值為-1.0,表示無窮遠(yuǎn)
skyline.radius = 10000; 
// 執(zhí)行天際線分析
skyline.build(); 

這樣我們就能在場景中看到一條天際線了

image.png

上面我們已經(jīng)在場景中展示出了天際線,那除了這個(gè),我們還能從天際線分析的結(jié)果里面做什么應(yīng)用尼,接下來我們來看看吧,可結(jié)合webgl官方實(shí)例-天際線分析('http://support.supermap.com.cn:8090/webgl/examples/editor.html#skyline')進(jìn)行查看

天際線分析應(yīng)用

1.提取限高體

addLimitbody()模擬新建建筑物在不影響天際線時(shí)的高度范圍
positon:指定限高體位置信息,由經(jīng)度、緯度的數(shù)組表示
name:指定限高體名稱,用于移除限高體對象removeLimitbody(name) 的指定

//添加限高體對象
    skyline.addLimitbody({
         position: positionarray,
         name: "limitBody"
                });
2.獲取障礙物對象

getObjectIds() ,返回一個(gè)k-v對象,key為S3M圖層ID,value為對象IDS數(shù)組,你可以判定哪些建筑影響了城市的天際線,做相應(yīng)的調(diào)整;

3.獲取二三維天際線結(jié)果

getSkyline2D()&getSkyline3D()
在官方示例里面,提取二維天際線以及拉伸閉合體以及體現(xiàn)這兩種,接下來我們看看通過echarts圖表將兩者結(jié)合使用的例子

//獲取二維天際線對象  
var object = skyline.getSkyline2D();
 //獲取三維天際線對象  
var locations=skyline.getSkyline3D();
//用echarts繪制二維天際線
var myChart = echarts.init(document.getElementById("map"));
var option = {
    backgroundColor: "rgba(73,139,156,0.9)",
    title: {
        text: "二維天際線"
    },

    tooltip: {
        trigger: "axis"
    },

    calculable: true,
    xAxis: [
        {
            type: "category",
            boundaryGap: false,
            data: object.x,
            show: false
        } 
    ],

    yAxis: [
        {
            type: "value",
            min: 0,
            max: 1
        }
    ],

    series: [
        {
            name: "",
            type: "line",
            data: object.y
        }
    ]
};
myChart.setOption(option);
// 監(jiān)聽click事件,獲取相應(yīng)的點(diǎn)并繪制在場景中
myChart.on('click',function(params){
    viewer.entities.removeAll()
    viewer.entities.add({
            position:Cesium.Cartesian3.fromDegrees(locations.x[params.dataIndex], locations.y[params.dataIndex], locations.z[params.dataIndex]),
            billboard: {
                // horizontalOrigin:Cesium.HorizontalOrigin.LEFT,
                image: './images/map.png',
                pixelOffset: new Cesium.Cartesian2(0, -32),
            }
        })
})
}
sy.gif
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容