1. 程式人生 > >學習Cesium記錄

學習Cesium記錄

這篇文章只是記錄我學習的過程,會持續更新,侵刪
在這裡感謝原博主的文章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
        });