LayerManage.vue 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509
  1. <template>
  2. <layer-manage-split
  3. @visibleChange="visibleChange"
  4. @transSliderChange="transSliderChange"
  5. @handleCheckChange="handleCheckChange"
  6. @location="location"
  7. @raise="raise"
  8. @lower="lower"
  9. ></layer-manage-split>
  10. </template>
  11. <script>
  12. import { Collect, GetResourceTree, GetMyCollect } from "@/api/map";
  13. export default {
  14. name: "LayerManage",
  15. data() {
  16. return {
  17. modellayerlist: [],
  18. vectorlayerlist: [],
  19. username: "admin",
  20. // treeSearchText: "",
  21. addlayerdata: [],
  22. sceneLayers: {},
  23. // favoriteLayerList: [],
  24. sharedState: store.state,
  25. // flag: false,
  26. // s3mLen: 0,
  27. // hid: true,
  28. layerparams: {},
  29. // ImgHid: false, //影响图层移动默认不显示
  30. // S3MLayersObj: {
  31. // title: Resource.s3mLayer,
  32. // expand: true,
  33. // checked: true,
  34. // type: "S3M",
  35. // children: [],
  36. // },
  37. // imgLayersObj: {
  38. // title: Resource.imageryLayer,
  39. // expand: true,
  40. // checked: true,
  41. // type: "IMG",
  42. // children: [],
  43. // },
  44. // TerrainLayersObj: {
  45. // title: Resource.terrainLayer,
  46. // expand: true,
  47. // checked: true,
  48. // type: "TERRAIN",
  49. // children: [],
  50. // },
  51. contextData: null,
  52. S3MList:[],
  53. };
  54. },
  55. computed: {
  56. imgLayers: function () {
  57. return this.sharedState.imgLayerManage;
  58. },
  59. terrainLayers: function () {
  60. return this.sharedState.terrainLayerManage;
  61. },
  62. S3MLayers: function () {
  63. return this.sharedState.S3MLayerManage;
  64. },
  65. },
  66. methods: {
  67. toggleVisibility() {
  68. store.setToolBarAction(0);
  69. },
  70. filterNode(value, data) {
  71. if (!value) return true;
  72. return data.label.indexOf(value) !== -1;
  73. },
  74. favorite(data) {
  75. console.log(data);
  76. },
  77. checkboxChange(obj, checked, a) {
  78. obj.checked = checked;
  79. this.handleCheckChange(obj, checked);
  80. },
  81. visibleChange(obj, visible, a) {
  82. console.log(obj, visible, a);
  83. switch (obj.type) {
  84. case "S3M": //场景
  85. if (this.sceneLayers[obj.title]) {
  86. this.sceneLayers[obj.title][0][0].visible = visible;
  87. }
  88. break;
  89. case "3DTiles": //场景
  90. if (this.sceneLayers[obj.title]) {
  91. this.sceneLayers[obj.title].show = visible;
  92. }
  93. break;
  94. case "S3MDATA": //scp
  95. if (this.sceneLayers[obj.title]) {
  96. this.sceneLayers[obj.title][0][0].visible = visible;
  97. }
  98. break;
  99. case "IMG": //影像
  100. this.layerparams[obj.id].show = visible;
  101. break;
  102. case "Vector": //矢量
  103. this.layerparams[obj.id].show = visible;
  104. break;
  105. case "Terrain": //地形
  106. if (visible) {
  107. viewer.terrainProvider = new Cesium.CesiumTerrainProvider({
  108. url: obj.url,
  109. isSct: true,
  110. requestVertexNormals: true,
  111. });
  112. } else {
  113. viewer.scene.terrainProvider = new Cesium.EllipsoidTerrainProvider(
  114. {}
  115. );
  116. }
  117. break;
  118. default:
  119. null;
  120. }
  121. },
  122. transSliderChange(obj, v, a) {
  123. if (typeof v == undefined) {
  124. return;
  125. }
  126. let value = v / 100;
  127. let imageryLayers = viewer.imageryLayers;
  128. switch (obj.type) {
  129. case "S3M": //场景
  130. if (this.sceneLayers[obj.title]) {
  131. this.sceneLayers[obj.title][0][0].style3D.fillForeColor =
  132. new Cesium.Color(1.0, 1.0, 1.0, value);
  133. }
  134. break;
  135. case "S3MDATA": //scp
  136. if (this.sceneLayers[obj.title]) {
  137. this.sceneLayers[obj.title][0][0].style3D.fillForeColor =
  138. new Cesium.Color(1.0, 1.0, 1.0, value);
  139. }
  140. break;
  141. case "3DTiles": //tileset
  142. if (this.sceneLayers[obj.title]) {
  143. this.sceneLayers[obj.title].style = new Cesium.Cesium3DTileStyle({
  144. color: "color('rgba(255,255,255," + value + ")')",
  145. });
  146. }
  147. break;
  148. case "IMG": //影像
  149. for (let i = 0; i < imageryLayers._layers.length; i++) {
  150. let element = imageryLayers._layers[i];
  151. if (element._imageryProvider._name == obj.title) {
  152. element.alpha = value;
  153. break;
  154. }
  155. }
  156. break;
  157. case "Vector": //矢量
  158. for (let i = 0; i < imageryLayers._layers.length; i++) {
  159. let element = imageryLayers._layers[i];
  160. if (element._imageryProvider._name == obj.title) {
  161. element.alpha = value;
  162. break;
  163. }
  164. }
  165. break;
  166. case "Terrain": //地形
  167. break;
  168. default:
  169. null;
  170. }
  171. },
  172. addS3M(LayerURL) {
  173. let promiseArray = [];
  174. promiseArray.push(viewer.scene.addS3MTilesLayerByScp(LayerURL));
  175. this.promiseWhen(promiseArray, true);
  176. },
  177. addTerrain(LayerURL) {
  178. viewer.terrainProvider = new Cesium.CesiumTerrainProvider({
  179. url: LayerURL,
  180. isSct: true,
  181. requestVertexNormals: true,
  182. });
  183. },
  184. add3DTiles(obj) {
  185. let tileset = new Cesium.Cesium3DTileset({
  186. url: obj.url + "?id=" + obj.id,
  187. skipLevelOfDetail: true,
  188. });
  189. this.sceneLayers[obj.title] = tileset;
  190. let thisLayer = viewer.scene.primitives.add(tileset);
  191. viewer.flyTo(thisLayer);
  192. },
  193. addImage(LayerURL) {
  194. var layer = viewer.imageryLayers.addImageryProvider(
  195. new Cesium.SuperMapImageryProvider({
  196. url: LayerURL,
  197. })
  198. );
  199. viewer.flyTo(layer);
  200. },
  201. promiseWhen(promiseArray, sceneName, obj) {
  202. let this_ = this;
  203. Cesium.when.all(
  204. promiseArray,
  205. (layers) => {
  206. this_.sceneLayers[obj.title] = layers;
  207. if (sceneName) {
  208. this.flyTo(sceneName);
  209. }
  210. if (obj.title == "分层分户") {
  211. store.setLayerList(layers[0][0]);
  212. layers[0][0].setQueryParameter({
  213. url: "https://www.supermapol.com/realspace/services/data-HeBing8HaoLou/rest/data",
  214. dataSourceName: "Model_8_old",
  215. dataSetName: "属性表",
  216. keyWord: "SmID",
  217. });
  218. }
  219. store.state.S3MList.push(layers[0])
  220. store.state.tempLatData=layers[0]
  221. // for (var i = 0; i < layers.length; i++) {
  222. // let style = new Cesium.Style3D();
  223. // style.bottomAltitude = window.modelBottomAltitude; //底部高度
  224. // if (layers[i].length > 0) {
  225. // for (var j = 0; j < layers[i].length; j++) {
  226. // layers[i][j].style3D = style;
  227. // layers[i][j].refresh();
  228. // layers[i][j].isOverlapDisplayed = true; //开启避让
  229. // }
  230. // } else {
  231. // layers[i].style3D = style;
  232. // layers[i].refresh();
  233. // layers[i].isOverlapDisplayed = true; //开启避让
  234. // }
  235. // }
  236. },
  237. function (e) {
  238. if (widget._showRenderLoopErrors) {
  239. let title = Resource.scpUrlErrorMsg;
  240. widget.showErrorPanel(title, undefined, e);
  241. }
  242. }
  243. );
  244. },
  245. handleSelectChange(selectedList, obj) {
  246. obj ? (obj.expand = !obj.expand) : null;
  247. },
  248. // 复选框改变
  249. handleCheckChange(obj, checked) {
  250. // console.log(obj, checked ,);
  251. if (typeof checked == "boolean") {
  252. obj.checked = checked;
  253. } else {
  254. obj.checked = !obj.checked;
  255. }
  256. if (obj.children && obj.children.length > 0) {
  257. for (let i = 0; i < obj.children.length; i++) {
  258. this.handleCheckChange(obj.children[i], checked);
  259. }
  260. } else {
  261. let imageryLayers = viewer.imageryLayers;
  262. if (obj.checked) {
  263. obj.trans = 100;
  264. obj.visible = true;
  265. this.addlayerdata.push(obj);
  266. switch (obj.type) {
  267. case "S3M": //场景
  268. let s = viewer.scene.open(obj.url);
  269. this.vectorlayerlist.push(obj);
  270. this.promiseWhen([s], undefined, obj);
  271. // store.setModelLayerList(this.vectorlayerlist);
  272. // console.log(store.state.modellayerlist,'vvvvv');
  273. // store.state.S3MList.push(obj)
  274. break;
  275. case "S3MDATA": //scp
  276. viewer.scene.addS3MTilesLayerByScp(obj.url, {
  277. name: obj.title,
  278. });
  279. break;
  280. case "3DTiles": //tileset
  281. this.add3DTiles(obj);
  282. this.vectorlayerlist.push(obj);
  283. break;
  284. case "IMG": //影像
  285. let layer = viewer.imageryLayers.addImageryProvider(
  286. new Cesium.SuperMapImageryProvider({
  287. url: obj.url,
  288. name: obj.title,
  289. })
  290. );
  291. this.layerparams[obj.id] = layer;
  292. // viewer.flyTo(layer);
  293. break;
  294. case "Vector": //矢量
  295. let layer2 = viewer.imageryLayers.addImageryProvider(
  296. new Cesium.SuperMapImageryProvider({
  297. url: obj.url,
  298. name: obj.title,
  299. })
  300. );
  301. this.vectorlayerlist.push(obj);
  302. this.layerparams[obj.id] = layer2;
  303. // viewer.flyTo(layer2);
  304. break;
  305. case "Terrain": //地形
  306. this.addTerrain(obj.url);
  307. break;
  308. default:
  309. null;
  310. }
  311. } else {
  312. for (let i = 0; i < this.addlayerdata.length; i++) {
  313. if (this.addlayerdata[i].title == obj.title) {
  314. this.addlayerdata.splice(i, 1);
  315. break;
  316. }
  317. }
  318. for (let i = 0; i < this.vectorlayerlist.length; i++) {
  319. if (this.vectorlayerlist[i].title == obj.title) {
  320. this.vectorlayerlist.splice(i, 1);
  321. break;
  322. }
  323. }
  324. for (let i = 0; i < this.modellayerlist.length; i++) {
  325. if (this.modellayerlist[i].title == obj.title) {
  326. this.modellayerlist.splice(i, 1);
  327. break;
  328. }
  329. }
  330. delete this.layerparams[obj.id];
  331. switch (obj.type) {
  332. case "S3M": //场景
  333. if (this.sceneLayers[obj.title]) {
  334. for (let i = 0; i < this.sceneLayers[obj.title].length; i++) {
  335. if (this.sceneLayers[obj.title][i].length > 0) {
  336. for (
  337. let u = 0;
  338. u < this.sceneLayers[obj.title][i].length;
  339. u++
  340. ) {
  341. viewer.scene.layers.remove(
  342. this.sceneLayers[obj.title][i][u]._name
  343. );
  344. }
  345. } else {
  346. viewer.scene.layers.remove(
  347. this.sceneLayers[obj.title][i]._name
  348. );
  349. }
  350. }
  351. }
  352. break;
  353. case "S3MDATA": //scp
  354. viewer.scene.layers.remove(obj.title);
  355. break;
  356. case "3DTiles": //tileset
  357. viewer.scene.primitives.remove(this.sceneLayers[obj.title]);
  358. break;
  359. case "IMG": //影像
  360. for (let i = 0; i < imageryLayers._layers.length; i++) {
  361. let element = imageryLayers._layers[i];
  362. if (element._imageryProvider._name == obj.title) {
  363. imageryLayers.remove(element);
  364. break;
  365. }
  366. }
  367. break;
  368. case "Vector": //矢量
  369. for (let i = 0; i < imageryLayers._layers.length; i++) {
  370. let element = imageryLayers._layers[i];
  371. if (element._imageryProvider._name == obj.title) {
  372. imageryLayers.remove(element);
  373. break;
  374. }
  375. }
  376. break;
  377. case "Terrain": //地形
  378. viewer.scene.terrainProvider =
  379. new Cesium.EllipsoidTerrainProvider({});
  380. break;
  381. default:
  382. null;
  383. }
  384. }
  385. }
  386. store.setVectorLayerList(this.vectorlayerlist);
  387. store.setModelLayerList(this.modellayerlist);
  388. },
  389. //图层定位
  390. location(obj) {
  391. let imageryLayers = viewer.imageryLayers;
  392. switch (obj.type) {
  393. case "S3M": //场景
  394. if (this.sceneLayers[obj.title]) {
  395. viewer.flyTo(this.sceneLayers[obj.title][0][0]);
  396. }
  397. break;
  398. case "S3MDATA": //scp
  399. viewer.flyTo(this.sceneLayers[obj.title][0][0]);
  400. break;
  401. case "3DTiles": //tileset
  402. viewer.flyTo(this.sceneLayers[obj.title]);
  403. break;
  404. case "IMG": //影像
  405. for (let i = 0; i < imageryLayers._layers.length; i++) {
  406. let element = imageryLayers._layers[i];
  407. if (element._imageryProvider._name == obj.title) {
  408. viewer.flyTo(element);
  409. break;
  410. }
  411. }
  412. break;
  413. case "Vector": //矢量
  414. for (let i = 0; i < imageryLayers._layers.length; i++) {
  415. let element = imageryLayers._layers[i];
  416. if (element._imageryProvider._name == obj.title) {
  417. viewer.flyTo(element);
  418. break;
  419. }
  420. }
  421. break;
  422. case "Terrain": //地形
  423. viewer.scene.terrainProvider = new Cesium.EllipsoidTerrainProvider(
  424. {}
  425. );
  426. break;
  427. default:
  428. null;
  429. }
  430. },
  431. //影像图层操作
  432. raise(obj) {
  433. viewer.imageryLayers.raise(this.layerparams[obj.id]);
  434. for (let i = 0; i < this.addlayerdata.length; i++) {
  435. if (this.addlayerdata[i].title == obj.title) {
  436. let arr = Array.from(this.addlayerdata);
  437. this.addlayerdata = [];
  438. this.addlayerdata = this.moveUp(arr, i);
  439. break;
  440. }
  441. }
  442. },
  443. lower(obj) {
  444. viewer.imageryLayers.lower(this.layerparams[obj.id]);
  445. for (let i = 0; i < this.addlayerdata.length; i++) {
  446. if (this.addlayerdata[i].title == obj.title) {
  447. let arr = Array.from(this.addlayerdata);
  448. this.addlayerdata = [];
  449. this.addlayerdata = this.moveDown(arr, i);
  450. break;
  451. }
  452. }
  453. },
  454. raiseToTop() {
  455. let imageryLayers = viewer.imageryLayers._layers;
  456. let ly = imageryLayers[this.contextData.id];
  457. viewer.imageryLayers.raiseToTop(ly);
  458. this.updataImgLayers();
  459. },
  460. lowerToBottom() {
  461. let imageryLayers = viewer.imageryLayers._layers;
  462. let ly = imageryLayers[this.contextData.id];
  463. viewer.imageryLayers.lowerToBottom(ly);
  464. this.updataImgLayers();
  465. },
  466. // 上移操作
  467. moveUp(array, index) {
  468. if (index > 0 && index < array.length) {
  469. let temp = array[index];
  470. array[index] = array[index - 1];
  471. array[index - 1] = temp;
  472. }
  473. return array;
  474. },
  475. // 下移操作
  476. moveDown(array, index) {
  477. if (index >= 0 && index < array.length - 1) {
  478. let temp = array[index];
  479. array[index] = array[index + 1];
  480. array[index + 1] = temp;
  481. }
  482. return array;
  483. },
  484. },
  485. mounted() {
  486. },
  487. watch: {
  488. },
  489. };
  490. </script>
  491. <style lang="scss">
  492. @import "./LayerManage.scss";
  493. </style>