學習Cesium記錄
阿新 • • 發佈:2018-12-28
這篇文章只是記錄我學習的過程,會持續更新,侵刪
在這裡感謝原博主的文章http://blog.sina.com.cn/s/blog_15e866bbe0102xnml.html
2018.12.7
模型載入
載入的程式碼為:
var entity = viewer.entities.add({ name: url, position: position, orientation: orientation, model: { uri: url, minimumPixelSize: 128, maximumScale: 20000 } });
引數:minimumPixelSize :無論縮放如何,模型近似最小畫素大小來確保即使在觀看者縮小時模型也可見
maximumScale :模型的最大比例尺寸,給出一個上限Model#minimumPixelSize,確保模型永遠不是一個不合理的規模。
基礎程式碼還同之前一樣,
①.用ArcGIS/rest/services做資料來源
②.建立viewer並且設定相應小元件
③.用你電腦上的gltf檔案做模型, obj格式線上轉gltf格式,因為Cesium支援gltf,一般常用的三維建模工具都不支援gltf格式檔案的直接匯出。
④.用核心程式碼載入
1.載入arcGIS資料來源 var arcGISMap = new Cesium.ArcGisMapServerImageryProvider({ url:'https://services.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer', }); 2.viewer var viewer = new Cesium.Viewer('cesiumContainer',{ imageryProvider:arcGISMap, conytextOptions:{ webgl:{ alpha:true } }, creditContainer:'creditContainer', selectionIndicator: false, animation:false, baseLayerPicker:false, geocoder:false, timeline:false, sceneModePicker:true,//投影方式控制元件 navigationHelpButton:false,//幫助資訊控制元件 infoBox:false,//顯示點選點要素之後顯示的資訊 fullscreenButton:true }); 3.建立3D模型的方法 createModel('./ceshi/file.gltf',0.0); function createModel(url, height) { //查過API瞭解到viewer中的entity是返回一個EntityCollection,先從集合中刪除所有實體。 viewer.entities.removeAll(); var position = Cesium.Cartesian3.fromDegrees(-123.0744619, 44.0503706, height); var heading = Cesium.Math.toRadians(135); var pitch = 0; var roll = 0; //HeadingPitchRoll中的三個引數分別是:航向,俯仰,滾動,航向是圍繞負z軸的旋轉。俯仰是圍繞負y軸的旋轉。滾動是圍繞正x軸的旋轉。 var hpr = new Cesium.HeadingPitchRoll(heading, pitch, roll); //headingPitchRollQuaternion 是transform中的一個方法,API中發現他有5個引數,但是我沒弄明白具體是怎麼和意思,如果有大佬知道還請告知 var orientation = Cesium.Transforms.headingPitchRollQuaternion(position, hpr); 4. var entity = viewer.entities.add({ name: url, position: position, orientation: orientation, model: { uri: url, // 無論縮放如何,模型近似最小畫素大小來確保即使在觀看者縮小時模型也可見 minimumPixelSize: 128, //模型的最大比例尺寸,給出一個上限Model#minimumPixelSize,確保模型永遠不是一個不合理的規模。 maximumScale: 20000 } }); //trackedEntity :獲取或設定攝像頭當前正在跟蹤的Entity例項。 viewer.trackedEntity = entity; }
效果圖:
因為剛學Cesium沒多久,而且還是看著大佬的總結然後自己在一點一點按照自己理解的總結,和大牛差的很遠,但卻是我自己的理解,難免會出錯,懇請大家批評指正。
2018.12.6
baseLayerPicker的使用
步驟:
①:建立資料來源
②:設定ProviderViewModel
①:用ArcGIS/rest/services做資料來源 var arcGISMap = new Cesium.ArcGisMapServerImageryProvider({ url: 'https://services.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer', }); ②:設定ProviderViewModel var providerViewModels = []; var arcGISMapModel = new Cesium.ProviderViewModel({ name: 'arcGISMap ', //iconUrl:表示圖層的圖示。tooltip:用於顯示專案被滑鼠懸停的工具提示。 iconUrl: Cesium.buildModuleUrl('./Widgets/Images/ImageryProviders/esriWorldImagery.png'), tooltip: 'ArcGIS 地圖服務 \nhttps://services.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer', creationFunction: function () { return esriMap; } }); providerViewModels.push(esriMapModel); var viewer = new Cesium.Viewer('cesiumContainer', { // imageryProvider:globemap, //指定此項 則必須設定: baseLayerPicker: false contextOptions: { webgl: { alpha: true } }, creditContainer: "creditContainer", selectionIndicator: false, animation: false, //是否顯示動畫控制元件 // baseLayerPicker就是viewer提供的一個可以選擇地圖的小元件,如果設定了imageryProvider則baseLayerPicker要設定成fasle **// baseLayerPicker: false, //是否顯示圖層選擇控制元件** imageryProviderViewModels: providerViewModels,//自定義擴充套件 geocoder: false, //是否顯示地名查詢控制元件 timeline: false, //是否顯示時間線控制元件 sceneModePicker: true, //是否顯示投影方式控制元件 navigationHelpButton: false, //是否顯示幫助資訊控制元件 infoBox: false, //是否顯示點選要素之後顯示的資訊 fullscreenButton: true });