LayerManage.vue 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708
  1. <template>
  2. <div>
  3. <layer-manage-split
  4. :addlayerdata="addlayerdata"
  5. @visibleChange="visibleChange"
  6. @transSliderChange="transSliderChange"
  7. @handleCheckChange="handleCheckChange"
  8. @location="location"
  9. @raise="raise"
  10. @lower="lower"
  11. ></layer-manage-split>
  12. <LayerLegend></LayerLegend>
  13. <mousePoint></mousePoint>
  14. </div>
  15. </template>
  16. <script>
  17. import { Collect, GetResourceTree, GetMyCollect } from "@/api/map";
  18. import LayerLegend from "./LayerLegend.vue";
  19. import mousePoint from "./mousePoint";
  20. import xml2js from "xml2js";
  21. let geoLayers = [];
  22. export default {
  23. name: "LayerManage",
  24. components: { LayerLegend, mousePoint },
  25. data() {
  26. return {
  27. modellayerlist: [],
  28. vectorlayerlist: [],
  29. username: "admin",
  30. // treeSearchText: "",
  31. addlayerdata: [],
  32. sceneLayers: {},
  33. // favoriteLayerList: [],
  34. sharedState: store.state,
  35. // flag: false,
  36. // s3mLen: 0,
  37. // hid: true,
  38. layerparams: {},
  39. // ImgHid: false, //影响图层移动默认不显示
  40. // S3MLayersObj: {
  41. // title: Resource.s3mLayer,
  42. // expand: true,
  43. // checked: true,
  44. // type: "S3M",
  45. // children: [],
  46. // },
  47. // imgLayersObj: {
  48. // title: Resource.imageryLayer,
  49. // expand: true,
  50. // checked: true,
  51. // type: "IMG",
  52. // children: [],
  53. // },
  54. // TerrainLayersObj: {
  55. // title: Resource.terrainLayer,
  56. // expand: true,
  57. // checked: true,
  58. // type: "TERRAIN",
  59. // children: [],
  60. // },
  61. contextData: null,
  62. S3MList: [],
  63. allLayers: [],
  64. allCheckedLayers: [],
  65. };
  66. },
  67. computed: {
  68. imgLayers: function () {
  69. return this.sharedState.imgLayerManage;
  70. },
  71. terrainLayers: function () {
  72. return this.sharedState.terrainLayerManage;
  73. },
  74. S3MLayers: function () {
  75. return this.sharedState.S3MLayerManage;
  76. },
  77. },
  78. methods: {
  79. toggleVisibility() {
  80. store.setToolBarAction(0);
  81. },
  82. filterNode(value, data) {
  83. if (!value) return true;
  84. return data.label.indexOf(value) !== -1;
  85. },
  86. favorite(data) {
  87. console.log(data);
  88. },
  89. visibleChange(obj, visible, a) {
  90. console.log(obj, visible, a);
  91. switch (obj.type) {
  92. case "S3M": //场景
  93. if (this.sceneLayers[obj.title]) {
  94. for (let i = 0; i < this.sceneLayers[obj.title][0].length; i++) {
  95. this.sceneLayers[obj.title][0][i].visible = visible;
  96. }
  97. }
  98. break;
  99. case "3DTiles": //场景
  100. if (this.sceneLayers[obj.title]) {
  101. this.sceneLayers[obj.title].show = visible;
  102. }
  103. break;
  104. case "S3MDATA": //scp
  105. if (this.sceneLayers[obj.title]) {
  106. this.sceneLayers[obj.title][0][0].visible = visible;
  107. }
  108. break;
  109. case "wms":
  110. case "wmts":
  111. case "IMG": //影像
  112. this.layerparams[obj.id].show = visible;
  113. break;
  114. case "Vector": //矢量
  115. this.layerparams[obj.id].show = visible;
  116. break;
  117. case "Terrain": //地形
  118. if (visible) {
  119. viewer.terrainProvider = new Cesium.CesiumTerrainProvider({
  120. url: obj.url,
  121. isSct: true,
  122. requestVertexNormals: true,
  123. });
  124. } else {
  125. viewer.scene.terrainProvider = new Cesium.EllipsoidTerrainProvider(
  126. {}
  127. );
  128. }
  129. break;
  130. default:
  131. null;
  132. }
  133. },
  134. transSliderChange(obj, v, a) {
  135. if (typeof v == undefined) {
  136. return;
  137. }
  138. let value = v / 100;
  139. let imageryLayers = viewer.imageryLayers;
  140. switch (obj.type) {
  141. case "S3M": //场景
  142. if (this.sceneLayers[obj.title]) {
  143. this.sceneLayers[obj.title][0][0].style3D.fillForeColor =
  144. new Cesium.Color(1.0, 1.0, 1.0, value);
  145. }
  146. break;
  147. case "S3MDATA": //scp
  148. if (this.sceneLayers[obj.title]) {
  149. this.sceneLayers[obj.title][0][0].style3D.fillForeColor =
  150. new Cesium.Color(1.0, 1.0, 1.0, value);
  151. }
  152. break;
  153. case "3DTiles": //tileset
  154. if (this.sceneLayers[obj.title]) {
  155. this.sceneLayers[obj.title].style = new Cesium.Cesium3DTileStyle({
  156. color: "color('rgba(255,255,255," + value + ")')",
  157. });
  158. }
  159. break;
  160. case "wms":
  161. case "wmts":
  162. case "IMG": //影像
  163. case "Vector": //矢量
  164. this.layerparams[obj.id].alpha = value;
  165. // for (let i = 0; i < imageryLayers._layers.length; i++) {
  166. // let element = imageryLayers._layers[i];
  167. // if (element._imageryProvider._name == obj.title) {
  168. // element.alpha = value;
  169. // break;
  170. // }
  171. // }
  172. break;
  173. case "Terrain": //地形
  174. break;
  175. default:
  176. null;
  177. }
  178. },
  179. addS3M(LayerURL) {
  180. let promiseArray = [];
  181. promiseArray.push(viewer.scene.addS3MTilesLayerByScp(LayerURL));
  182. this.promiseWhen(promiseArray, true);
  183. },
  184. addTerrain(LayerURL) {
  185. viewer.terrainProvider = new Cesium.CesiumTerrainProvider({
  186. url: LayerURL,
  187. isSct: true,
  188. requestVertexNormals: true,
  189. });
  190. this.bus.$emit("setDepthAgainst", true);
  191. },
  192. add3DTiles(obj) {
  193. let tileset = new Cesium.Cesium3DTileset({
  194. url: obj.url + "?id=" + obj.id,
  195. skipLevelOfDetail: true,
  196. });
  197. this.sceneLayers[obj.title] = tileset;
  198. store.setSceneLayersList(this.sceneLayers);
  199. let thisLayer = viewer.scene.primitives.add(tileset);
  200. // viewer.flyTo(thisLayer);
  201. },
  202. addImage(LayerURL) {
  203. var layer = viewer.imageryLayers.addImageryProvider(
  204. new Cesium.SuperMapImageryProvider({
  205. url: LayerURL,
  206. })
  207. );
  208. viewer.flyTo(layer);
  209. },
  210. addWMS(obj) {
  211. let layer = viewer.imageryLayers.addImageryProvider(
  212. new Cesium.WebMapServiceImageryProvider({
  213. url: obj.url,
  214. layers: `${obj.fwgzkj}:${obj.fwmc}`, //"demo:Ahtq_czkfbj",
  215. parameters: {
  216. service: obj.type, //"WMS",
  217. format: obj.format,
  218. transparent: true,
  219. // srs: "EPSG:4326", // 坐标参考系统,可以根据需要更改
  220. },
  221. })
  222. );
  223. return layer;
  224. },
  225. addWMTS(obj) {
  226. return viewer.imageryLayers.addImageryProvider(
  227. new Cesium.WebMapTileServiceImageryProvider({
  228. url: obj.url, //'http://192.168.60.52:28085/geoserver/gwc/service/wmts';
  229. layer: `${obj.fwgzkj}:${obj.fwmc}`, //"demo:yzq_czkfbj"
  230. style: "", // 替换为你的WMTS图层风格
  231. tileMatrixSetID: obj.qpfa, // 或者其他的EPSG代码
  232. format: obj.format,
  233. tilingScheme: new Cesium.WebMercatorTilingScheme(), // 当想要加载EPSG:4326瓦片服务时,只需要创建一个GeographicTilingScheme对象即可
  234. maximumLevel: obj.maximumlevel,
  235. minimumlevel: obj.minimumlevel,
  236. })
  237. );
  238. },
  239. addArcGis(obj) {
  240. let layer = viewer.imageryLayers.addImageryProvider(
  241. new Cesium.ArcGisMapServerImageryProvider({
  242. url: "http://192.168.60.20:6080/arcgis/rest/services/150500/DLTB00_2019/MapServer?f=jsapi",
  243. })
  244. );
  245. viewer.flyTo(layer);
  246. },
  247. promiseWhen(promiseArray, sceneName, obj) {
  248. let this_ = this;
  249. Cesium.when.all(
  250. promiseArray,
  251. (layers) => {
  252. this_.sceneLayers[obj.title] = layers;
  253. // if (sceneName) {
  254. // this.flyTo(sceneName);
  255. // }
  256. const exists = this_.allCheckedLayers.some(
  257. (item) => item.title === obj.title
  258. );
  259. if (!exists) {
  260. this_.allCheckedLayers.push({
  261. title: obj.title,
  262. layers: layers,
  263. });
  264. }
  265. // 更新store为所有图层数组
  266. store.state.tempLatData = this_.allCheckedLayers.map(
  267. (item) => item.layers
  268. );
  269. store.setSceneLayersList(this_.sceneLayers);
  270. if (obj.url.indexOf("3D-HeBing8HaoLou") > 0) {
  271. store.setLayerList(layers[0][0]);
  272. layers[0][0].setQueryParameter({
  273. url: "https://www.supermapol.com/realspace/services/data-HeBing8HaoLou/rest/data",
  274. dataSourceName: "Model_8_old",
  275. dataSetName: "属性表",
  276. keyWord: "SmID",
  277. });
  278. } else if (obj.dataexplain == "分层分户") {
  279. store.setLayerList(layers[0][0]);
  280. layers[0][0].title = obj.title;
  281. // layers[0][0].indexedDBSetting.isAttributesSave = true;
  282. }
  283. // store.state.S3MList.push(layers[0]);
  284. // store.state.tempLatData = layers;
  285. layers[0].forEach((item) => {
  286. item.RGBTOBGR = true;
  287. if (obj.title == "倾斜摄影") {
  288. let style = new Cesium.Style3D();
  289. style.bottomAltitude = window.modelBottomAltitude; //底部高度
  290. item.style3D = style;
  291. item.brightness = 1.2;
  292. item.contrast = 1.2;
  293. item.saturation = 1.2;
  294. item.gamma = 1.1;
  295. }
  296. if (
  297. item.name.indexOf("雨水") > -1 ||
  298. item.name.indexOf("管线") > -1 ||
  299. item.name.indexOf("单体") > -1
  300. ) {
  301. item._baseUri.query = obj.id;
  302. }
  303. });
  304. // store.state.tempLatData = layers[0];
  305. store.setSceneLayersList(this_.sceneLayers);
  306. // for (var i = 0; i < layers.length; i++) {
  307. // let style = new Cesium.Style3D();
  308. // style.bottomAltitude = window.modelBottomAltitude; //底部高度
  309. // if (layers[i].length > 0) {
  310. // for (var j = 0; j < layers[i].length; j++) {
  311. // layers[i][j].style3D = style;
  312. // layers[i][j].refresh();
  313. // layers[i][j].isOverlapDisplayed = true; //开启避让
  314. // }
  315. // } else {
  316. // layers[i].style3D = style;
  317. // layers[i].refresh();
  318. // layers[i].isOverlapDisplayed = true; //开启避让
  319. // }
  320. // }
  321. },
  322. function (e) {
  323. if (widget._showRenderLoopErrors) {
  324. let title = Resource.scpUrlErrorMsg;
  325. widget.showErrorPanel(title, undefined, e);
  326. }
  327. }
  328. );
  329. },
  330. handleSelectChange(selectedList, obj) {
  331. obj ? (obj.expand = !obj.expand) : null;
  332. },
  333. // 复选框改变
  334. handleCheckChange(obj, checked) {
  335. if (obj.children && obj.children.length > 0) {
  336. for (let i = 0; i < obj.children.length; i++) {
  337. this.handleCheckChange(obj.children[i], checked);
  338. }
  339. } else {
  340. this.checkedChange(obj);
  341. if (checked) store.setCheckedData(obj);
  342. }
  343. store.setVectorLayerList(this.vectorlayerlist);
  344. store.setModelLayerList(this.modellayerlist);
  345. },
  346. //type roller 卷帘 split分屏splitId
  347. checkedChange(obj, type, splitId) {
  348. let imageryLayers = viewer.imageryLayers;
  349. if (obj.checked) {
  350. obj.trans = 100;
  351. obj.visible = true;
  352. this.addlayerdata.unshift(obj); //将最新添加的对象放到第一位
  353. if (obj.serverType == "geoserver") {
  354. switch (obj.type) {
  355. case "wms":
  356. this.vectorlayerlist.push(obj);
  357. this.layerparams[obj.id] = this.addWMS(obj);
  358. store.setlayerparamsList(this.layerparams);
  359. break;
  360. case "wmts":
  361. this.vectorlayerlist.push(obj);
  362. this.layerparams[obj.id] = this.addWMTS(obj);
  363. store.setlayerparamsList(this.layerparams);
  364. break;
  365. }
  366. } else if (obj.serverType == "arcgis") {
  367. } else {
  368. switch (obj.type) {
  369. case "S3M": //场景
  370. let s = viewer.scene.open(obj.url, undefined, {
  371. autoSetView: false, // obj.title != "倾斜摄影",
  372. });
  373. this.vectorlayerlist.push(obj);
  374. this.promiseWhen([s], undefined, obj);
  375. this.bus.$emit("setDepthAgainst", true);
  376. if (
  377. obj.title.indexOf("雨水") > -1 ||
  378. obj.title.indexOf("管线") > -1
  379. ) {
  380. this.bus.$emit("setnUderground", obj.checked);
  381. }
  382. // store.setModelLayerList(this.vectorlayerlist);
  383. // console.log(store.state.modellayerlist,'vvvvv');
  384. // store.state.S3MList.push(obj)
  385. break;
  386. case "S3MDATA": //scp
  387. viewer.scene.addS3MTilesLayerByScp(obj.url, {
  388. name: obj.title,
  389. });
  390. break;
  391. case "3DTiles": //tileset
  392. this.add3DTiles(obj);
  393. this.vectorlayerlist.push(obj);
  394. break;
  395. case "IMG": //影像
  396. let layer = viewer.imageryLayers.addImageryProvider(
  397. new Cesium.SuperMapImageryProvider({
  398. url: obj.url,
  399. name: obj.title,
  400. })
  401. );
  402. this.layerparams[obj.id] = layer;
  403. store.setlayerparamsList(this.layerparams);
  404. if (type == "roller")
  405. this.bus.$emit("setImageryRoller", layer, splitId);
  406. // viewer.flyTo(layer);
  407. break;
  408. case "Vector": //矢量
  409. // let provider = new Cesium.SuperMapImageryProvider({
  410. // url: obj.url,
  411. // name: obj.title,
  412. // })
  413. // let layer2 = viewer.imageryLayers.addImageryProvider(
  414. // provider
  415. // );
  416. // var params = [{
  417. // layerName: 'YJJBNTBHTB@YJJBNTBH',
  418. // isVisible: true,
  419. // displayFilter: "xzqdm='460205000003'"
  420. // }
  421. // ]
  422. // provider.setLayerStatusParameters(params)
  423. // let layer2 = viewer.imageryLayers.addImageryProvider(
  424. // new Cesium.SuperMapImageryProvider({
  425. // url: obj.url,
  426. // name: obj.title,
  427. // })
  428. // );
  429. // var provider = new Cesium.SuperMapImageryProvider({ url: 'http://192.168.60.3:8099/iserver/services/map-GuiHuaDiKuai/rest/maps/GHDK%40%E8%A7%84%E5%88%92%E5%9C%B0%E5%9D%97' });
  430. // var layer2 = viewer.imageryLayers.addImageryProvider(provider);
  431. // var params = [
  432. // {
  433. // layerName: 'GHDK@规划地块',
  434. // isVisible: true,
  435. // displayFilter: "XZQDM LIKE '460203%' and PFSJ < '20190808'"
  436. // }
  437. // ]
  438. // provider.setLayerStatusParameters(params)
  439. let layer2 = viewer.imageryLayers.addImageryProvider(
  440. new Cesium.SuperMapImageryProvider({
  441. url: obj.url,
  442. name: obj.title,
  443. })
  444. );
  445. this.vectorlayerlist.push(obj);
  446. this.layerparams[obj.id] = layer2;
  447. store.setlayerparamsList(this.layerparams);
  448. if (type == "roller")
  449. this.bus.$emit("setImageryRoller", layer2, splitId);
  450. // viewer.flyTo(layer2);
  451. break;
  452. case "Terrain": //地形
  453. this.addTerrain(obj.url);
  454. break;
  455. default:
  456. null;
  457. }
  458. }
  459. if (type == "split") {
  460. this.bus.$emit("setImagerySplit", obj, obj.checked, splitId, true);
  461. } else if (type == "share") {
  462. this.bus.$emit("setShareResources", obj, obj.checked, -2, true);
  463. }
  464. } else {
  465. let index = this.allCheckedLayers.findIndex(
  466. (item) => item.title === obj.title
  467. );
  468. if (index !== -1) {
  469. this.allCheckedLayers.splice(index, 1);
  470. // 更新store
  471. store.state.tempLatData = this.allCheckedLayers.map(
  472. (item) => item.layers
  473. );
  474. }
  475. if (obj.title.indexOf("雨水") > -1 || obj.title.indexOf("管线") > -1) {
  476. this.bus.$emit("setnUderground", obj.checked);
  477. }
  478. for (let i = 0; i < this.addlayerdata.length; i++) {
  479. if (this.addlayerdata[i].title == obj.title) {
  480. this.addlayerdata.splice(i, 1);
  481. break;
  482. }
  483. }
  484. for (let i = 0; i < this.vectorlayerlist.length; i++) {
  485. if (this.vectorlayerlist[i].title == obj.title) {
  486. this.vectorlayerlist.splice(i, 1);
  487. break;
  488. }
  489. }
  490. for (let i = 0; i < this.modellayerlist.length; i++) {
  491. if (this.modellayerlist[i].title == obj.title) {
  492. this.modellayerlist.splice(i, 1);
  493. break;
  494. }
  495. }
  496. switch (obj.type) {
  497. case "S3M": //场景
  498. if (this.sceneLayers[obj.title]) {
  499. for (let i = 0; i < this.sceneLayers[obj.title].length; i++) {
  500. if (this.sceneLayers[obj.title][i].length > 0) {
  501. for (
  502. let u = 0;
  503. u < this.sceneLayers[obj.title][i].length;
  504. u++
  505. ) {
  506. viewer.scene.layers.remove(
  507. this.sceneLayers[obj.title][i][u]._name
  508. );
  509. }
  510. } else {
  511. viewer.scene.layers.remove(
  512. this.sceneLayers[obj.title][i]._name
  513. );
  514. }
  515. }
  516. }
  517. break;
  518. case "S3MDATA": //scp
  519. viewer.scene.layers.remove(obj.title);
  520. break;
  521. case "3DTiles": //tileset
  522. viewer.scene.primitives.remove(this.sceneLayers[obj.title]);
  523. break;
  524. case "wms":
  525. case "wmts":
  526. case "IMG": //影像
  527. case "Vector": //矢量
  528. imageryLayers.remove(this.layerparams[obj.id]);
  529. delete this.layerparams[obj.id];
  530. // for (let i = 0; i < imageryLayers._layers.length; i++) {
  531. // let element = imageryLayers._layers[i];
  532. // if (element._imageryProvider._name == obj.title) {
  533. // imageryLayers.remove(element);
  534. // break;
  535. // }
  536. // }
  537. break;
  538. case "Terrain": //地形
  539. viewer.scene.terrainProvider = new Cesium.EllipsoidTerrainProvider(
  540. {}
  541. );
  542. break;
  543. default:
  544. null;
  545. }
  546. }
  547. },
  548. async getPos(obj) {
  549. let ind =
  550. obj.url.indexOf("geoserver") >= 0
  551. ? obj.url.indexOf("geoserver")
  552. : obj.url.indexOf("siweiserver");
  553. let url = obj.url.substring(0, ind + 9) + "/wms";
  554. let params = {
  555. service: "WMS",
  556. version: "1.1.1",
  557. request: "GetCapabilities",
  558. };
  559. let res = await axios.get(url, { params });
  560. new xml2js.Parser().parseString(res.data, (err, result) => {
  561. geoLayers = result.WMT_MS_Capabilities.Capability[0].Layer[0].Layer;
  562. });
  563. },
  564. async flyTogeo(obj) {
  565. if (geoLayers) await this.getPos(obj);
  566. let ser = geoLayers.find(
  567. (li) => li.Name.indexOf(`${obj.fwgzkj}:${obj.fwmc}`) >= 0
  568. );
  569. if (ser) {
  570. let pos = ser.LatLonBoundingBox[0]["$"];
  571. viewer.camera.flyTo({
  572. destination: Cesium.Rectangle.fromDegrees(
  573. pos.minx,
  574. pos.miny,
  575. pos.maxx,
  576. pos.maxy
  577. ),
  578. });
  579. }
  580. },
  581. //图层定位
  582. location(obj) {
  583. let imageryLayers = viewer.imageryLayers;
  584. if (obj.serverType == "geoserver") {
  585. switch (obj.type) {
  586. case "wms":
  587. case "wmts":
  588. // console.log("11", this.layerparams[obj.id]);
  589. this.flyTogeo(obj);
  590. break;
  591. }
  592. } else if (obj.serverType == "arcgis") {
  593. } else {
  594. switch (obj.type) {
  595. case "S3M": //场景
  596. if (this.sceneLayers[obj.title]) {
  597. viewer.flyTo(this.sceneLayers[obj.title][0][0]);
  598. }
  599. break;
  600. case "S3MDATA": //scp
  601. viewer.flyTo(this.sceneLayers[obj.title][0][0]);
  602. break;
  603. case "3DTiles": //tileset
  604. viewer.flyTo(this.sceneLayers[obj.title]);
  605. break;
  606. case "IMG": //影像
  607. case "Vector": //矢量
  608. viewer.flyTo(this.layerparams[obj.id]);
  609. // for (let i = 0; i < imageryLayers._layers.length; i++) {
  610. // let element = imageryLayers._layers[i];
  611. // if (element._imageryProvider._name == obj.title) {
  612. // viewer.flyTo(element);
  613. // break;
  614. // }
  615. // }
  616. break;
  617. case "Terrain": //地形
  618. viewer.scene.terrainProvider = new Cesium.EllipsoidTerrainProvider(
  619. {}
  620. );
  621. break;
  622. default:
  623. null;
  624. }
  625. }
  626. },
  627. //影像图层操作
  628. raise(obj) {
  629. viewer.imageryLayers.raise(this.layerparams[obj.id]);
  630. for (let i = 0; i < this.addlayerdata.length; i++) {
  631. if (this.addlayerdata[i].title == obj.title) {
  632. let arr = Array.from(this.addlayerdata);
  633. this.addlayerdata = [];
  634. this.addlayerdata = this.moveUp(arr, i);
  635. break;
  636. }
  637. }
  638. },
  639. lower(obj) {
  640. viewer.imageryLayers.lower(this.layerparams[obj.id]);
  641. for (let i = 0; i < this.addlayerdata.length; i++) {
  642. if (this.addlayerdata[i].title == obj.title) {
  643. let arr = Array.from(this.addlayerdata);
  644. this.addlayerdata = [];
  645. this.addlayerdata = this.moveDown(arr, i);
  646. break;
  647. }
  648. }
  649. },
  650. raiseToTop() {
  651. let imageryLayers = viewer.imageryLayers._layers;
  652. let ly = imageryLayers[this.contextData.id];
  653. viewer.imageryLayers.raiseToTop(ly);
  654. this.updataImgLayers();
  655. },
  656. lowerToBottom() {
  657. let imageryLayers = viewer.imageryLayers._layers;
  658. let ly = imageryLayers[this.contextData.id];
  659. viewer.imageryLayers.lowerToBottom(ly);
  660. this.updataImgLayers();
  661. },
  662. // 上移操作
  663. moveUp(array, index) {
  664. if (index > 0 && index < array.length) {
  665. let temp = array[index];
  666. array[index] = array[index - 1];
  667. array[index - 1] = temp;
  668. }
  669. return array;
  670. },
  671. // 下移操作
  672. moveDown(array, index) {
  673. if (index >= 0 && index < array.length - 1) {
  674. let temp = array[index];
  675. array[index] = array[index + 1];
  676. array[index + 1] = temp;
  677. }
  678. return array;
  679. },
  680. },
  681. mounted() {
  682. this.bus.$on("checkedChange", this.checkedChange);
  683. },
  684. watch: {},
  685. };
  686. </script>
  687. <style lang="scss">
  688. @import "./LayerManage.scss";
  689. </style>