smViewer.vue 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226
  1. <template>
  2. <div id="cesiumContainer" class="cockpitNew" :class="isbig?'cesiumbig':''" ref="viewer">
  3. <i class="cesiumbtn" :class="isbig?'el-icon-aim':'el-icon-rank'" :title="isbig?'缩小':'放大'" @click="viewerChange"></i>
  4. <!-- 工具选择组件 -->
  5. <!-- <tool-bar></tool-bar>
  6. <compass></compass>
  7. <china-epidemic-map></china-epidemic-map>
  8. <world-epidemic-map></world-epidemic-map> -->
  9. </div>
  10. </template>
  11. <script>
  12. import Config from "@/common/js/webServeConfig.js";
  13. export default {
  14. name: "sm-viewer",
  15. props: {
  16. combination: {
  17. //组合接口
  18. type: Boolean,
  19. },
  20. sceneUrl: {
  21. //场景接口
  22. type: String,
  23. },
  24. s3mScps: {
  25. //s3m图层接口
  26. type: Array,
  27. },
  28. collapsed: {
  29. //是否折叠
  30. type: Boolean,
  31. },
  32. },
  33. data() {
  34. return {
  35. sharedState: store.state,
  36. isbig: false,
  37. };
  38. },
  39. computed: {
  40. isInitViewer: function () {
  41. return this.sharedState.isInitViewer;
  42. },
  43. },
  44. methods: {
  45. init() {
  46. //初始化viewer
  47. if (window.viewer) {
  48. return;
  49. }
  50. var obj = [6378137.0, 6378137.0, 6356752.3142451793];
  51. Cesium.Ellipsoid.WGS84 = Object.freeze(
  52. new Cesium.Ellipsoid(obj[0], obj[1], obj[2])
  53. );
  54. let viewer;
  55. let isPCBroswer = (window.isPCBroswer =
  56. Cesium.FeatureDetection.isPCBroswer());
  57. if (isPCBroswer) {
  58. viewer = new Cesium.Viewer("cesiumContainer", {
  59. imageryProvider: new Cesium.TileMapServiceImageryProvider({
  60. url: Cesium.buildModuleUrl(
  61. "/static/Cesium/Assets/Textures/NaturalEarthII"
  62. ),
  63. }),
  64. selectionIndicator: false,
  65. timeline: false,
  66. baseLayerPicker: false,
  67. homeButton: false,
  68. //shadows: true,
  69. infoBox: false,
  70. geocoder: false,
  71. // skyBox: false, // 关闭天空盒会一同关闭太阳,场景会变暗
  72. navigation: false,
  73. contextOptions: {
  74. requestWebgl2: true,
  75. },
  76. });
  77. // viewer.scene.globe.enableLighting = true;
  78. // document.getElementsByClassName(
  79. // "cesium-viewer-timelineContainer"
  80. // )[0].style.visibility = "hidden"; //隐藏时间线控件
  81. } else {
  82. viewer = new Cesium.Viewer("cesiumContainer", {
  83. selectionIndicator: false,
  84. infoBox: false,
  85. imageryProvider: new Cesium.TileMapServiceImageryProvider({
  86. url: Cesium.buildModuleUrl(
  87. "/static/Cesium/Assets/Textures/NaturalEarthII"
  88. ),
  89. }),
  90. homeButton: false,
  91. skyBox: true,
  92. navigation: false,
  93. contextOptions: {
  94. requestWebgl2: true,
  95. },
  96. });
  97. let scene = viewer.scene;
  98. if (Cesium.defined(scene.sun)) {
  99. scene.globe.enableLighting = false;
  100. }
  101. if (Cesium.defined(scene.moon)) {
  102. scene.moon.show = false;
  103. }
  104. document.documentElement.style.height = window.innerHeight + "px";
  105. document.addEventListener(
  106. "touchmove",
  107. function (e) {
  108. e.preventDefault();
  109. },
  110. false
  111. );
  112. store.setCompass(false); //关闭罗盘等
  113. }
  114. viewer.scene.lightSource.ambientLightColor = new Cesium.Color(
  115. 0.65,
  116. 0.65,
  117. 0.65,
  118. 1
  119. );
  120. // viewer.scene.globe.enableLighting = true;
  121. if (window.baseImgLayer) {
  122. viewer.imageryLayers.addImageryProvider(
  123. new Cesium.SuperMapImageryProvider({
  124. url: window.baseImgLayer,
  125. })
  126. );
  127. }
  128. viewer.scene.fog.enabled = false;
  129. viewer.scene.debugShowFramesPerSecond = false;
  130. window.viewer = viewer;
  131. window.scene = viewer.scene;
  132. let widget = viewer.cesiumWidget;
  133. // iEarth进行初始化设置
  134. viewer.scene.globe.depthTestAgainstTerrain = true;
  135. viewer.scene.globe.baseColor = Cesium.Color.BLACK; // 没有影像图层时地球的底色
  136. if (viewer.geocoder) {
  137. // 请开发者自行到supermap online官网(http://www.supermapol.com/)申请key
  138. viewer.geocoder.viewModel.geoKey = "fvV2osxwuZWlY0wJb8FEb2i5";
  139. document.querySelector(".cesium-geocoder-input").placeholder =
  140. Resource.searchPlaceHolder;
  141. }
  142. viewer.camera.flyTo({
  143. destination: Cesium.Cartesian3.fromDegrees(
  144. window.mapview[0],
  145. window.mapview[1],
  146. window.mapview[2]
  147. ), //海南经纬度
  148. orientation: {
  149. heading: 0,
  150. pitch: -0.7672,
  151. roll: 0,
  152. },
  153. duration: 0,
  154. complete: function () {
  155. common.initHandler("Polygon"); //初始化全局常用的画面的drawhandler
  156. store.setToolBarShow(true); //显示工具栏
  157. document.getElementById("loadingbar").remove(); //移除加载动画
  158. // viewer.camera.flyTo({
  159. // destination: new Cesium.Cartesian3.fromDegrees(
  160. // 110.60396458865515,
  161. // 34.54408834959379,
  162. // 30644793.325518917
  163. // ),
  164. // duration: 5,
  165. // complete: function () {
  166. // common.initHandler("Polygon"); //初始化全局常用的画面的drawhandler
  167. // store.setToolBarShow(true); //显示工具栏
  168. // },
  169. // });
  170. // setTimeout(() => {
  171. // document.getElementById("loadingbar").remove(); //移除加载动画
  172. // }, 1000);
  173. },
  174. });
  175. store.setisInitViewer(true); //初始化viewer标志
  176. },
  177. viewerChange(){
  178. this.isbig = !this.isbig
  179. this.$emit("viewerChange",this.isbig)
  180. }
  181. },
  182. mounted() {
  183. this.init();
  184. // 临时加载影像和地形,方便测试开发
  185. // viewer.terrainProvider = new Cesium.CesiumTerrainProvider({
  186. // url: URL_CONFIG.STK,
  187. // requestWaterMask: true,
  188. // requestVertexNormals: true,
  189. // isSct: false
  190. // });
  191. // const terrainP = new Cesium.ArcGISTiledElevationTerrainProvider({
  192. // url: 'https://elevation3d.arcgis.com/arcgis/rest/services/WorldElevation3D/Terrain3D/ImageServer',
  193. // });
  194. // viewer.terrainProvider = terrainP;
  195. // viewer.imageryLayers.addImageryProvider(new Cesium.BingMapsImageryProvider({
  196. // url: 'https://dev.virtualearth.net',
  197. // mapStyle: Cesium.BingMapsStyle.AERIAL,
  198. // key: URL_CONFIG.BING_MAP_KEY
  199. // }));
  200. // setTimeout(() => {
  201. // viewer.scene.camera.setView({
  202. // destination: Cesium.Cartesian3.fromDegrees(88.3648, 29.0946, 90000),
  203. // orientation: {
  204. // heading: 6.10547067016156,
  205. // pitch: -0.8475077031996778,
  206. // roll: 6.2831853016686185
  207. // }
  208. // });
  209. // }, 1000);
  210. },
  211. };
  212. </script>
  213. <style lang="scss">
  214. @import "smViewer";
  215. </style>