manage-basemap.vue 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279
  1. <script setup>
  2. /**
  3. * element-plus组件
  4. */
  5. import {
  6. ElMessage
  7. } from 'element-plus';
  8. import {
  9. Store
  10. } from '@/store/index'
  11. store = Store();
  12. import no_img from '@/assets/images/no_img.png';
  13. </script>
  14. <template>
  15. <jt-popup title="底图切换">
  16. <div class="jt-basemap">
  17. <div class="top">
  18. <div class="onceLayer" v-for="(item,index) in baseMaps" :key="index" @click="changeBasicLayer(item)">
  19. <img v-if="item.imageurl" :src="item.imageurl" :class="item.layerorder===selectImg?'selectImg':''" />
  20. </div>
  21. </div>
  22. <div class="bottom">
  23. <el-switch v-model="terrain.isTerrain" @change="changeTerrain" />
  24. <span>显示地形</span>
  25. <span> </span>
  26. <el-switch v-model="mark.isMark" @change="changeMark" />
  27. <span>显示标注</span>
  28. </div>
  29. </div>
  30. </jt-popup>
  31. </template>
  32. <script>
  33. let store = undefined
  34. import * as mapWork from "../map"
  35. export default {
  36. data() {
  37. return {
  38. //底图数据
  39. baseMaps: [], //底图
  40. selectImg: store.basemap.selectImg, //选中的底图图片
  41. selectBaseMap: store.basemap.selectBaseMap, //选中的底图数据
  42. //地形数据
  43. terrain: {
  44. isTerrain: store.terrain.isTerrain, //是否切换地形
  45. terrainData: store.terrain.terrainData, //地形数据
  46. },
  47. //标注数据
  48. mark: {
  49. isMark: store.mark.isMark, //是否显示标注
  50. markData: store.mark.markData, //地形数据
  51. }
  52. }
  53. },
  54. methods: {
  55. /**
  56. * 切换地形事件
  57. */
  58. changeTerrain() {
  59. mapWork.setLayersControl(window.viewer, this.terrain.terrainData, this.terrain.isTerrain);
  60. },
  61. /**
  62. * 切换标注
  63. */
  64. changeMark() {
  65. //图层ID
  66. let serviceId = "service_" + this.mark.markData.layercode + this.mark.markData.layerorder;
  67. this.mark.markData.serviceId = serviceId;
  68. //透明度
  69. let opacity = 1;
  70. if (this.mark.markData.opacity == null) {
  71. opacity = 1;
  72. } else {
  73. opacity = Number(this.mark.markData.opacity);
  74. }
  75. this.mark.markData.opacity = opacity;
  76. mapWork.setLayersControl(window.viewer, this.mark.markData, this.mark.isMark).then(res => {
  77. if (res === true) {
  78. } else {
  79. ElMessage(res)
  80. }
  81. });
  82. },
  83. /**
  84. * 切换底图事件
  85. * @param {Object} item
  86. */
  87. changeBasicLayer(item) {
  88. this.selectImg = item.layerorder;
  89. store.basemap.selectImg = item.layerorder;
  90. //删除底图后再添加
  91. mapWork.setLayersControl(window.viewer, this.selectBaseMap, false).then(res => {
  92. //图层ID
  93. let serviceId = "service_" + item.layercode + item.layerorder;
  94. item.serviceId = serviceId;
  95. //透明度
  96. let opacity = 1;
  97. if (item.opacity == null) {
  98. opacity = 1;
  99. } else {
  100. opacity = Number(item.opacity);
  101. }
  102. item.opacity = opacity;
  103. store.basemap.selectBaseMap = item;
  104. this.selectBaseMap = item;
  105. mapWork.setLayersControl(window.viewer, item, true).then(res => {
  106. if (res === true) {
  107. } else {
  108. ElMessage(res)
  109. }
  110. });
  111. });
  112. },
  113. /**
  114. * 添加底图图集
  115. */
  116. initBaseMap() {
  117. let _self = this;
  118. mapWork.getBaseMaps().then(basemaps => {
  119. basemaps.forEach(item => {
  120. let parameterset = item.parameterset;
  121. if (item.parameterset instanceof Object) {
  122. parameterset = item.parameterset;
  123. } else if (item.parameterset != "" && item.parameterset != null && item.parameterset != undefined) {
  124. parameterset = JSON.parse(item.parameterset);
  125. }
  126. if (item.datasource && item.datasource != '#' && item.layertype != '地形' && item.layertype != '标注') {
  127. if (parameterset) {
  128. if (parameterset.imgurl) {
  129. item.imageurl = parameterset.imgurl;
  130. } else {
  131. item.imageurl = no_img;
  132. ElMessage("请检查底图图层表parameterset字段是否设置imgurl");
  133. }
  134. _self.baseMaps.push(item);
  135. }
  136. }
  137. });
  138. //底图组件高度不变
  139. if (_self.baseMaps.length % 3 == 1) {
  140. _self.baseMaps.push({}, {})
  141. } else if (_self.baseMaps.length % 3 == 2) {
  142. _self.baseMaps.push({})
  143. } else if (_self.baseMaps.length % 3 == 0) {
  144. _self.baseMaps.push({}, {}, {})
  145. }
  146. });
  147. }
  148. },
  149. mounted() {
  150. this.initBaseMap();
  151. }
  152. }
  153. </script>
  154. <style scoped lang="scss">
  155. @charset "UTF-8";
  156. @font-face {
  157. font-family: "TTTGB-Medium";
  158. src: url("@/assets/fonts/fonts/TTTGB-Medium.ttf") format("truetype"),
  159. url("@/assets/fonts/fonts/TTTGB-Medium.eot") format("embedded-opentype"),
  160. url("@/assets/fonts/fonts/TTTGB-Medium.svg") format("svg");
  161. font-weight: normal;
  162. font-style: normal;
  163. }
  164. ::v-deep .is-checked .el-switch__core .el-switch__action {
  165. margin-left: calc(-1rem - 14rem);
  166. }
  167. ::v-deep .el-switch__core .el-switch__action {
  168. top: 1rem;
  169. }
  170. ::v-deep .el-switch__core .el-switch__action {
  171. width: 14rem;
  172. height: 14rem;
  173. }
  174. ::v-deep .el-switch__core {
  175. width: 40rem !important;
  176. height: 20rem !important;
  177. }
  178. .jt-basemap {
  179. position: absolute;
  180. width: 350rem;
  181. height: calc(100% - 105rem);
  182. .top {
  183. height: calc(100% - 50rem);
  184. padding: 10rem;
  185. flex-wrap: wrap;
  186. justify-content: space-around;
  187. overflow-y: scroll; // 设置y轴方向的滚动条
  188. overflow: hidden; // 超出部分隐藏
  189. .onceLayer {
  190. display: inline-block;
  191. padding: 5rem;
  192. width: 100rem;
  193. height: 120rem;
  194. img {
  195. height: 100%;
  196. width: 100%;
  197. border-radius: 5rem;
  198. }
  199. img:hover {
  200. cursor: pointer;
  201. height: calc(100% - 0rem);
  202. width: calc(100% - 0rem);
  203. border: 0rem solid rgba(255, 255, 255, .8);
  204. box-shadow: 0 0 2rem 2rem rgba(255, 255, 255, .5);
  205. transition: all .2s;
  206. }
  207. //选中图片样式
  208. .selectImg {
  209. border: 0rem solid rgba(255, 255, 255, .8);
  210. box-shadow: 0 0 3rem 3rem rgba(255, 255, 255, .5);
  211. }
  212. span {
  213. font-size: 14rem;
  214. display: inline-block;
  215. }
  216. }
  217. }
  218. .bottom {
  219. width: 100%;
  220. height: 40rem;
  221. line-height: 40rem;
  222. text-align: left;
  223. padding-left: 10rem;
  224. border: 0px solid red;
  225. el-switch {
  226. margin: 3rem 0rem;
  227. width: 36rem !important;
  228. }
  229. span {
  230. margin: 4rem 4rem;
  231. }
  232. }
  233. }
  234. </style>