index.vue 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. <template>
  2. <div class="map-container">
  3. <div id="yztMap" class="map-container"></div>
  4. <!-- <el-button type="primary" class="btn" @click="switchMap('satellite')">切换卫星图</el-button>-->
  5. <!-- <el-button type="primary" class="btn" style="left: 150px" @click="removeLayers()">清除图层</el-button>-->
  6. </div>
  7. </template>
  8. <script setup lang="ts">
  9. import { getMapProduct } from '@/api/globalMap';
  10. import WMTSManager from "@/utils/wmtsManager";
  11. import AMapLoader from "@amap/amap-jsapi-loader";
  12. interface Props {
  13. center?: number[];
  14. zoom?: number;
  15. minZoom?: number;
  16. maxZoom?: number;
  17. activeMap: string;
  18. }
  19. const props = withDefaults(defineProps<Props>(), {
  20. center: [110.93154257997, 21.669064031332],
  21. zoom: 11,
  22. minZoom: 6,
  23. maxZoom: 16
  24. });
  25. const { proxy } = getCurrentInstance() as ComponentInternalInstance;
  26. let map, wmtsManager, wmtslayergroup;
  27. // 初始化事件
  28. const initMapEvent = () => {
  29. const simple = {
  30. version: 8,
  31. sources: {},
  32. layers: []
  33. };
  34. const wgs84_wgs84_mapcrs = {
  35. topTileExtent: [-180, -270, 180, 90],
  36. coordtransform: 'none',
  37. tileSize: 256
  38. };
  39. map = new GeoGlobe.Map({
  40. mapCRS: wgs84_wgs84_mapcrs,
  41. style: simple,
  42. maxZoom: props.maxZoom,
  43. zoom: props.zoom,
  44. minZoom: props.minZoom,
  45. center: props.center,
  46. container: 'yztMap'
  47. });
  48. // style加载完成
  49. map.on('style.load', function (e) {
  50. const token = '3e25b8af23f8d5194175220fe67fe941';
  51. const layer_vtc = new GeoGlobe.TDTLayer('vec_c', token);
  52. const layer_cva = new GeoGlobe.TDTLayer('cva_c', token);
  53. layer_vtc.metadata = { group: 'basemap' };
  54. layer_cva.metadata = { group: 'basemap' };
  55. map.addLayer(layer_vtc);
  56. map.addLayer(layer_cva);
  57. if (props.activeMap !== 'vectorgraph') {
  58. removeLayers();
  59. switchMap(props.activeMap);
  60. }
  61. });
  62. };
  63. // 切换地图
  64. const switchMap = (type) => {
  65. let queryParamsArr = [];
  66. if (type === 'satellite') {
  67. queryParamsArr = [
  68. {
  69. serviceCode: 'YZT1715739306532'
  70. },
  71. {
  72. serviceCode: 'YZT1695608158269',
  73. REQUEST: 'GetCapabilities'
  74. }
  75. ];
  76. }
  77. if (!wmtsManager) {
  78. wmtsManager = new WMTSManager(map);
  79. wmtsManager.init();
  80. }
  81. wmtsManager.addWmtsLayers(queryParamsArr, (res) => {});
  82. // AMapLoader.load({
  83. // // key: 'ef9090f018b879c7b896b352c01816dd', // 申请好的Web端开发者Key,首次调用 load 时必填
  84. // key: '30d3d8448efd68cb0b284549fd41adcf', // 申请好的Web端开发者Key,首次调用 load 时必填
  85. // version: '2.0' // 指定要加载的 JSAPI 的版本,缺省时默认为 1.4.15
  86. // }).then(AMap => {
  87. // let map = new AMap.Map('yztMap', {
  88. // // 是否为3D地图模式
  89. // viewMode: '3D',
  90. // pitch: 0,
  91. // // 初始化地图级别
  92. // zoom: 9.4,
  93. // // 初始化地图中心点位置
  94. // // center: [props.center[0], props.center[1]],
  95. // center: [121.456493, 31.252764],
  96. // // // 是否可拖拽
  97. // // dragEnable: false,
  98. // // // 是否允许通过鼠标滚轮来缩放
  99. // // scrollWheel: false
  100. // });
  101. // // map.setFeatures([]);
  102. // var wms = new AMap.TileLayer.WMTS({
  103. // url: 'http://t0.tianditu.gov.cn/img_c/wmts',
  104. // // url: 'http://10.181.7.236:9988/api/oneShare/proxyHandler/mm/' + queryParamsArr[0].serverCode,
  105. // // blend: true,
  106. // // tileSize: 256,
  107. // params: {
  108. // Layer: "img",
  109. // Version: "1.0.0",
  110. // Format: "tiles",
  111. // TileMatrixSet: "w",
  112. // STYLE: "default",
  113. // tk: 'd31190edaa4190af833234ab7b1a6f27'
  114. // }
  115. // });
  116. // wms.setMap(map);
  117. // });
  118. };
  119. // 清除图层
  120. const removeLayers = () => {
  121. if (wmtsManager) {
  122. wmtsManager.removeWmtsLayers();
  123. }
  124. };
  125. // 加载事件
  126. onMounted(() => {
  127. initMapEvent();
  128. });
  129. </script>
  130. <style scoped>
  131. .map-container {
  132. width: 100%;
  133. height: 100%;
  134. position: relative;
  135. .btn {
  136. position: absolute;
  137. bottom: 20px;
  138. left: 20px;
  139. }
  140. }
  141. </style>