SuperMap的WebGL是基於開源JS庫Cesium作的修改而造成的產品,理論上用起來大同小異,若是在有不同的地方再看,基本上仍是與Cesium的接口名稱和結構是同樣的。html
定位方法有基於Cesium.Camera類(SuperMap/Cesium),它不須要去單首創建這個,由於他是Cesium.viewer的Member成員之一,直接使用建立好的view容器,使用view.camera就能夠拿到web
也可使用Cesium.Viewer類作定位,方法下文會提到webgl
這個方法是直接定位到該位置, 參數用Obj構造{destination:,orientation:, endTransform}ui
相機在WGS84世界座標系中的最終位置,或是自頂向下視圖中可見的矩形區域。便可以是一個點座標({Cartesian3}格式點座標)或一個四至範圍({Rectangle}格式)spa
有不少方法,我最經常使用的是.net
viewer.camera.setView({ destination:Cesium.Cartesian3.fromDegrees(116.4139265527,39.8865940599,100), orientation:{ pitch: -0.3870743833538963, roll: 0.00004766518822663102, heading:5.71581666483758, } });
有不少方法,我最經常使用的是code
viewer.camera.setView({ destination:Cesium.Rectangle(1.9911131841002994,0.6863576116684447,2.0676847898509436, 0.7171078891208857), orientation:{ pitch: -0.3870743833538963, roll: 0.00004766518822663102, heading:5.71581666483758, } });
Camera.flyTo(_Obj)方法的參數和setView其實差很少,它注重的是飛行體驗,飛往目的地有一個過程,也就是其中的duration參數,它以秒爲單位,表徵飛行持續時間。若是省略,由飛行距離計算合理的持續時間。orm
viewer.camera.flyTo({ destination : Cesium.Cartesian3.fromDegrees(-122.19, 46.25, 5000.0), orientation : { heading : Cesium.Math.toRadians(175.0), pitch : Cesium.Math.toRadians(-35.0), roll : 0.0 }, duration:3 //飛行到目的地花費時間3秒 })
在cesium中viewer.flyTo和Camera.flyTo的區別挺大,咱們一般會用camera來定位,但當須要加上一個傾斜角的時候,可能定位的結果就和預想的區別很大server
這個時候,就能夠制定一個目標去,例如定位建立的Entity實體htm
loactionTectEntity = viewer.entities.add({ name: 'locationRectangle', id: 'locationRectangle', rectangle: { coordinates: Cesium.Rectangle(1.9911131841002994,0.6863576116684447,2.0676847898509436, 0.7171078891208857), material: Cesium.Color.GREEN.withAlpha(1.0), height: 10.0, outline: false } }); var flyPromise = viewer.flyTo(loactionTectEntity, { duration: 5, offset: new Cesium.HeadingPitchRange(0.0, Cesium.Math.toRadians(-20.0)) });
具體方法能夠參考Cesium中定位方法使用,他寫的很詳細,也很清楚,本文再也不贅述,只作整理