日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

cesium 局部加载_Cesium(四)常用代码总结

發(fā)布時(shí)間:2025/3/15 编程问答 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 cesium 局部加载_Cesium(四)常用代码总结 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1、陰影效果

viewer.shadows = true;

2、取消左鍵雙擊事件

viewer.cesiumWidget.screenSpaceEventHandler.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_DOUBLE_CLICK);

3、定位飛到某處

viewer.scene.camera.flyTo({ destination: rectangle });

4、開啟燈光

scene.globe.enableLighting = true;

5、限制縮放距離

scene.screenSpaceCameraController.minimumZoomDistance = 100;

6、解決Cesium繪制幾何圖形被高程遮擋問題

viewer.scene.globe.depthTestAgainstTerrain = true;

7、point貼地

var point = viewer.entities.add({

position: worldPosition,

point: {

pixelSize: 10,

color: Cesium.Color.YELLOW,

//控制是否貼地

heightReference: Cesium.HeightReference.CLAMP_TO_GROUND

},

});

8、地球移動(dòng)事件

camera.moveStart.addEventListener(function() {

});

camera.moveEnd.addEventListener(function() {

});

9、取消Cesium版權(quán)信息

$(".cesium-widget-credits").remove();

10、自定義BaseLayerPicker

var esriMap = new Cesium.ArcGisMapServerImageryProvider({

url:'https://services.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer',

enablePickFeatures:false

});

//設(shè)置ProviderViewModel:

var esriMapModel = new Cesium.ProviderViewModel({

name:'esri Maps',

iconUrl:Cesium.buildModuleUrl('./Widgets/Images/ImageryProviders/esriWorldImagery.png'),

tooltip:'ArcGIS 地圖服務(wù)',

creationFunction:function () {

return esriMap;

}

});

//只有一個(gè)

var providerViewModels = [];

providerViewModels.push(esriMapModel);

viewer.baseLayerPicker.viewModel.imageryProviderViewModels = providerViewModels;

11、設(shè)置時(shí)間

// 設(shè)置時(shí)鐘和時(shí)間線

viewer.clock.shouldAnimate = true; // 當(dāng)viewer開啟后,啟動(dòng)動(dòng)畫

viewer.clock.startTime = Cesium.JulianDate.fromIso8601("2017-07-11T16:00:00Z");

viewer.clock.stopTime = Cesium.JulianDate.fromIso8601("2017-07-11T16:20:00Z");

viewer.clock.currentTime = Cesium.JulianDate.fromIso8601("2017-07-11T16:00:00Z");

viewer.clock.multiplier = 2; // 設(shè)置加速倍率

viewer.clock.clockStep = Cesium.ClockStep.SYSTEM_CLOCK_MULTIPLIER; // tick computation mode(還沒理解具體含義)

viewer.clock.clockRange = Cesium.ClockRange.LOOP_STOP; // 循環(huán)播放

viewer.timeline.zoomTo(viewer.clock.startTime, viewer.clock.stopTime); // 設(shè)置時(shí)間的可見范圍

12、拾取

/**

* 返回對(duì)應(yīng)窗口位置最上面一個(gè)Entity 如果該位置沒有對(duì)象那么返回undefined

* @param {Cartesian2} windowPosition 窗口坐標(biāo)

* @returns {Entity} 返回值

*/

function pickEntity(viewer, windowPosition) {

var picked = viewer.scene.pick(windowPosition);

if (defined(picked)) {

var id = Cesium.defaultValue(picked.id, picked.primitive.id);

if (id instanceof Cesium.Entity) {

return id;

}

}

return undefined;

};

/**

*返回對(duì)應(yīng)窗口位置所有Entity的列表 如果該位置沒有對(duì)象那么返回undefined

* 返回值按可視化順序從前到后存儲(chǔ)在數(shù)組里

*

* @param {Cartesian2} windowPosition 窗口位置

* @returns {Entity[]}

*/

function drillPickEntities(viewer, windowPosition) {

var i;

var entity;

var picked;

var pickedPrimitives = viewer.scene.drillPick(windowPosition);

var length = pickedPrimitives.length;

var result = [];

var hash = {};

for (i = 0; i < length; i++) {

picked = pickedPrimitives[i];

entity = Cesium.defaultValue(picked.id, picked.primitive.id);

if (entity instanceof Cesium.Entity &&

!Cesium.defined(hash[entity.id])) {

result.push(entity);

hash[entity.id] = true;

}

}

return result;

};

該代碼出自:https://www.jianshu.com/p/8ae3624347cb

13、檢測(cè)深度

//為false時(shí),沒有高程遮擋效果

viewer.scene.globe.depthTestAgainstTerrain = false;

//為true時(shí),有高程遮擋效果

viewer.scene.globe.depthTestAgainstTerrain = true;

14、加載geoserver的WMS服務(wù)

var provider = new Cesium.WebMapServiceImageryProvider({

url: 'http://localhost:8080/geoserver/cite/wms',

layers: 'cite:city',

parameters: {

service : 'WMS',

format: 'image/png',

transparent: true,

}

});

viewer.imageryLayers.addImageryProvider(provider);

15、自定義credit

var viewer = new Cesium.Viewer('cesiumContainer');

var credit = new Cesium.Credit('Title', '../images/facility.gif', 'http://www.cesiumjs.org');

viewer.scene.frameState.creditDisplay.addDefaultCredit(credit)

16、拾取

Scene.pick : 返回窗口坐標(biāo)對(duì)應(yīng)的圖元的第一個(gè)對(duì)象。

Scene.drillPick :返回窗口坐標(biāo)對(duì)應(yīng)的所有對(duì)象列表。

Globe.pick : 返回一條射線和地形的相交位置點(diǎn)。

17、禁止縮放

viewer.scene.screenSpaceCameraController.enableZoom = false;

18、控制時(shí)鐘暫停與繼續(xù)

pauseOrContinue (state) {

this.viewer.clock.shouldAnimate = state

}

19、繞點(diǎn)飛行

var viewer = new Cesium.Viewer('cesiumContainer');

var options = {

lng: 117.1423291616,

lat: 39.0645831633,

height: 15.8,

heading: 0.0,

pitch: 0.0,

roll: 0.0

};

var position = Cesium.Cartesian3.fromDegrees(options.lng, options.lat, options.height);

// 相機(jī)看點(diǎn)的角度,如果大于0那么則是從地底往上看,所以要為負(fù)值,這里取-30度

var pitch = Cesium.Math.toRadians(-30);

// 給定飛行一周所需時(shí)間,比如10s, 那么每秒轉(zhuǎn)動(dòng)度數(shù)

var angle = 360 / 30;

// 給定相機(jī)距離點(diǎn)多少距離飛行,這里取值為5000m

var distance = 5000;

var startTime = Cesium.JulianDate.fromDate(new Date());

// var stopTime = Cesium.JulianDate.addSeconds(startTime, 10, new Cesium.JulianDate());

viewer.clock.startTime = startTime.clone(); // 開始時(shí)間

// viewer.clock.stopTime = stopTime.clone(); // 結(jié)速時(shí)間

viewer.clock.currentTime = startTime.clone(); // 當(dāng)前時(shí)間

viewer.clock.clockRange = Cesium.ClockRange.CLAMPED; // 行為方式

viewer.clock.clockStep = Cesium.ClockStep.SYSTEM_CLOCK; // 時(shí)鐘設(shè)置為當(dāng)前系統(tǒng)時(shí)間; 忽略所有其他設(shè)置。

// 相機(jī)的當(dāng)前heading

var initialHeading = viewer.camera.heading;

var Exection = function TimeExecution() {

// 當(dāng)前已經(jīng)過去的時(shí)間,單位s

var delTime = Cesium.JulianDate.secondsDifference(viewer.clock.currentTime, viewer.clock.startTime);

var heading = Cesium.Math.toRadians(delTime * angle) + initialHeading;

viewer.scene.camera.setView({

destination :position, // 點(diǎn)的坐標(biāo)

orientation:{

heading: heading,

pitch : pitch,

}

});

viewer.scene.camera.moveBackward(distance);

if (Cesium.JulianDate.compare(viewer.clock.currentTime, viewer.clock.stopTime) >= 0) {

viewer.clock.onTick.removeEventListener(Exection);

}

};

20、只讓地球顯示一塊區(qū)域,其余裁剪

var coffeeBeltRectangle = Cesium.Rectangle.fromDegrees(-180.0, -23.43687, 180.0, 23.43687);

viewer.scene.globe.cartographicLimitRectangle = coffeeBeltRectangle;

21、關(guān)閉HDR

viewer.scene.highDynamicRange = false;

22、防止進(jìn)入地下

23、billboard顯示不完整怎么解決?

24、gltf模型雙面渲染

doubleSided改為true

25、開啟debugShowFramesPerSecond

scene.debugShowFramesPerSecond = true;

26、監(jiān)聽entity選擇改變代碼示例

var lastSelectedPin;

viewer.selectedEntityChanged.addEventListener(function(newEntity) {

if (lastSelectedPin && lastSelectedPin.billboard) {

lastSelectedPin.billboard.show = false;

}

lastSelectedPin = newEntity;

if (lastSelectedPin && lastSelectedPin.billboard) {

lastSelectedPin.billboard.show = true;

}

});

27、局部坐標(biāo)系

//以點(diǎn)為原點(diǎn)建立局部坐標(biāo)系(東方向?yàn)閤軸,北方向?yàn)閥軸,垂直于地面為z軸),得到一個(gè)局部坐標(biāo)到世界坐標(biāo)轉(zhuǎn)換的變換矩陣

var localToWorld_Matrix = Cesium.Transforms.eastNorthUpToFixedFrame(position);

28、顯示與隱藏cesium的控件

viewer.homeButton.container.childNodes[1].style.display = "none"

29、判斷是否在可視范圍內(nèi)

var cullingVolume = frameState.cullingVolume;

var boundingVolume = defaultValue(surfaceTile.orientedBoundingBox, surfaceTile.boundingSphere3D);

var intersection = cullingVolume.computeVisibility(boundingVolume);

30、計(jì)算一個(gè)圖元的法向量

var geometry = GeometryPipeline.computeNormal(new Geometry({

attributes: attributes,

indices: indices,

primitiveType: PrimitiveType.TRIANGLES,

boundingSphere: boundingSphere

}));

31、圖元生成線框形式

var instance = new Cesium.GeometryInstance({

geometry : Cesium.GeometryPipeline.toWireframe(new Cesium.TetrahedronGeometry()),

modelMatrix : modelMatrix,

attributes : {

color : Cesium.ColorGeometryInstanceAttribute.fromColor(Cesium.Color.WHITE)

}

});

總結(jié)

以上是生活随笔為你收集整理的cesium 局部加载_Cesium(四)常用代码总结的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。