smViewer.vue 6.7 KB

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