hookehuyr

新增导航预警模块

...@@ -326,9 +326,12 @@ var toiletInfo = [ ...@@ -326,9 +326,12 @@ var toiletInfo = [
326 }, 326 },
327 ], 327 ],
328 }, 328 },
329 +];
330 +
331 +var warnInfo = [
329 { 332 {
330 name: '预警演示', 333 name: '预警演示',
331 - position: [120.587747, 31.314202], 334 + position: [120.58704, 31.313773],
332 icon: 'https://cdn.ipadbiz.cn/xys/map/%E5%BC%82%E5%B8%B802@2x.png', 335 icon: 'https://cdn.ipadbiz.cn/xys/map/%E5%BC%82%E5%B8%B802@2x.png',
333 details: [ 336 details: [
334 { 337 {
...@@ -425,4 +428,5 @@ export default { ...@@ -425,4 +428,5 @@ export default {
425 toiletInfo, 428 toiletInfo,
426 activityInfo, 429 activityInfo,
427 publicInfo, 430 publicInfo,
431 + warnInfo,
428 }; 432 };
......
...@@ -84,7 +84,6 @@ export default { ...@@ -84,7 +84,6 @@ export default {
84 methods: { 84 methods: {
85 // 关闭 85 // 关闭
86 close() { 86 close() {
87 - console.warn(this.infoWindow);
88 // 高德地图信息窗关闭的api 87 // 高德地图信息窗关闭的api
89 this.infoWindow.close() 88 this.infoWindow.close()
90 }, 89 },
......
1 <!-- 1 <!--
2 * @Date: 2023-05-19 14:54:27 2 * @Date: 2023-05-19 14:54:27
3 * @LastEditors: hookehuyr hookehuyr@gmail.com 3 * @LastEditors: hookehuyr hookehuyr@gmail.com
4 - * @LastEditTime: 2023-06-07 15:58:14 4 + * @LastEditTime: 2023-06-08 17:33:46
5 * @FilePath: /map-demo/src/views/index.vue 5 * @FilePath: /map-demo/src/views/index.vue
6 * @Description: 地图主体页面 6 * @Description: 地图主体页面
7 --> 7 -->
...@@ -12,7 +12,7 @@ ...@@ -12,7 +12,7 @@
12 <div class="hideScrollBar nav-bar-content"> 12 <div class="hideScrollBar nav-bar-content">
13 <div v-for="(item, index) in navBarList" :key="index" :class="[isActive === index ? 'checked' : '', 'item']" 13 <div v-for="(item, index) in navBarList" :key="index" :class="[isActive === index ? 'checked' : '', 'item']"
14 @click="setNavLayer(item, index)"> 14 @click="setNavLayer(item, index)">
15 - <van-icon name="shop-o" size="1.5rem" /><br /> 15 + <van-icon :name="item.icon" size="2rem" /><br />
16 <span style="font-size: 0.85rem; margin-top: 0.5rem; display: inline-block;">{{ item.name }}</span> 16 <span style="font-size: 0.85rem; margin-top: 0.5rem; display: inline-block;">{{ item.name }}</span>
17 </div> 17 </div>
18 <div style="width: 4rem;flex-shrink: 0;"></div> 18 <div style="width: 4rem;flex-shrink: 0;"></div>
...@@ -184,6 +184,7 @@ export default { ...@@ -184,6 +184,7 @@ export default {
184 toiletInfo: [], // 厕所信息实体 184 toiletInfo: [], // 厕所信息实体
185 activityInfo: [], // 活动场所信息实体 185 activityInfo: [], // 活动场所信息实体
186 publicInfo: [], // 公共设施信息实体 186 publicInfo: [], // 公共设施信息实体
187 + warnInfo: [], // 预警信息实体
187 show_popup: false, 188 show_popup: false,
188 dialog_show: false, 189 dialog_show: false,
189 xys_lng: 120.587334, 190 xys_lng: 120.587334,
...@@ -214,16 +215,24 @@ export default { ...@@ -214,16 +215,24 @@ export default {
214 mounted() { 215 mounted() {
215 this.navBarList = [{ 216 this.navBarList = [{
216 key: 'spot', 217 key: 'spot',
217 - name: '景点' 218 + name: '景点',
219 + icon: 'https://cdn.ipadbiz.cn/xys/map/%E6%AE%BF%E5%A0%82@2x.png'
218 }, { 220 }, {
219 key: 'activity', 221 key: 'activity',
220 - name: '餐饮' 222 + name: '餐饮',
223 + icon: 'https://cdn.ipadbiz.cn/xys/map/%E8%8A%B1%E5%9B%AD@2x.png'
221 }, { 224 }, {
222 key: 'public', 225 key: 'public',
223 - name: '出入口' 226 + name: '出入口',
227 + icon: 'https://cdn.ipadbiz.cn/xys/map/%E5%87%BA%E5%85%A5%E5%8F%A3@2x.png'
224 }, { 228 }, {
225 key: 'toilet', 229 key: 'toilet',
226 - name: '卫生间' 230 + name: '卫生间',
231 + icon: 'https://cdn.ipadbiz.cn/xys/map/%E5%8E%95%E6%89%80@2x.png'
232 + }, {
233 + key: 'warn',
234 + name: '预警',
235 + icon: 'https://cdn.ipadbiz.cn/xys/map/%E5%BC%82%E5%B8%B802@2x.png'
227 }] 236 }]
228 // 初始化地图 237 // 初始化地图
229 this.initMap(); 238 this.initMap();
...@@ -363,7 +372,7 @@ export default { ...@@ -363,7 +372,7 @@ export default {
363 } 372 }
364 // 绑定景点的点击事件 - 文字出现才能触发 373 // 绑定景点的点击事件 - 文字出现才能触发
365 var clickListener = marker.on('click', (e) => { 374 var clickListener = marker.on('click', (e) => {
366 - this.positionWarnMarker(coord.toiletInfo[i]); 375 + this.positionLiteMarker(coord.toiletInfo[i]);
367 }) 376 })
368 // 377 //
369 this.toiletInfo.push(marker); 378 this.toiletInfo.push(marker);
...@@ -371,6 +380,43 @@ export default { ...@@ -371,6 +380,43 @@ export default {
371 }) 380 })
372 this.map.add(this.toiletInfo); 381 this.map.add(this.toiletInfo);
373 }, 382 },
383 + loadWarnMaker() { // 加载预警标记
384 + var zoomStyleMapping = { 14: 0, 15: 0, 16: 0, 17: 0, 18: 0, 19: 0, 20: 0 };
385 + _.each(coord.warnInfo, (x, i) => {
386 + var marker = new AMap.ElasticMarker({
387 + position: coord.warnInfo[i].position,
388 + zooms: [17, 20],
389 + styles: [{
390 + icon: {
391 + img: coord.warnInfo[i].icon,
392 + size: [28, 28], // 可见区域的大小
393 + anchor: 'bottom-center', // 锚点
394 + fitZoom: 14, // 最合适的级别
395 + scaleFactor: 2, // 地图放大一级的缩放比例系数
396 + maxScale: 1.4, // 最大放大比例
397 + minScale: 0.8 // 最小放大比例
398 + },
399 + label: {
400 + content: coord.warnInfo[i].name,
401 + position: 'TM',
402 + minZoom: 18
403 + }
404 + }],
405 + zoomStyleMapping
406 + });
407 + if (clickListener) {
408 + marker.off('click', clickListener)
409 + }
410 + // 绑定景点的点击事件 - 文字出现才能触发
411 + var clickListener = marker.on('click', (e) => {
412 + this.positionWarnMarker(coord.warnInfo[i]);
413 + })
414 + //
415 + this.warnInfo.push(marker);
416 +
417 + })
418 + this.map.add(this.warnInfo);
419 + },
374 loadActivityMaker() { // 加载活动标记 420 loadActivityMaker() { // 加载活动标记
375 var zoomStyleMapping = { 14: 0, 15: 0, 16: 0, 17: 0, 18: 0, 19: 0, 20: 0 }; 421 var zoomStyleMapping = { 14: 0, 15: 0, 16: 0, 17: 0, 18: 0, 19: 0, 20: 0 };
376 _.each(coord.activityInfo, (x, i) => { 422 _.each(coord.activityInfo, (x, i) => {
...@@ -666,33 +712,30 @@ export default { ...@@ -666,33 +712,30 @@ export default {
666 // this.lockMapBounds() 712 // this.lockMapBounds()
667 713
668 }, 714 },
669 - setSpotLayer() { // 设置景点图层 715 + handleLayer (key) { // 构建图层显示结构
670 - this.removeToiletLayer() 716 + const arr = ['Toilet', 'Activity', 'Public', 'Spot', 'Warn'];
671 - this.removeActivityLayer() 717 + const filteredArr = arr.filter(item => item !== key);
672 - this.removePublicLayer() 718 + // 删除其他图层
719 + filteredArr.forEach(element => {
720 + this[`remove${element}Layer`]()
721 + });
673 // 加载地图标记 722 // 加载地图标记
674 - this.loadSpotMaker() 723 + this[`load${key}Maker`]();
675 }, 724 },
676 - setToiletLayer() { // 设置景点图层 725 + setSpotLayer() { // 设置景点图层
677 - this.removeSpotLayer() 726 + this.handleLayer('Spot')
678 - this.removeActivityLayer() 727 + },
679 - this.removePublicLayer() 728 + setToiletLayer() { // 设置卫生间图层
680 - // 加载厕所标记 729 + this.handleLayer('Toilet')
681 - this.loadToiletMaker()
682 }, 730 },
683 setActivityLayer() { // 设置活动图层 731 setActivityLayer() { // 设置活动图层
684 - this.removeSpotLayer(); 732 + this.handleLayer('Activity')
685 - this.removeToiletLayer()
686 - this.removePublicLayer()
687 - // 加载活动标记
688 - this.loadActivityMaker()
689 }, 733 },
690 setPublicLayer() { // 设置公共图层 734 setPublicLayer() { // 设置公共图层
691 - this.removeSpotLayer(); 735 + this.handleLayer('Public')
692 - this.removeToiletLayer() 736 + },
693 - this.removeActivityLayer() 737 + setWarnLayer() { // 设置预警图层
694 - // 加载公共标记 738 + this.handleLayer('Warn')
695 - this.loadPublicMaker()
696 }, 739 },
697 removeSpotLayer() { // 删除景点标记 740 removeSpotLayer() { // 删除景点标记
698 this.map.remove(this.spotInfo); 741 this.map.remove(this.spotInfo);
...@@ -706,6 +749,9 @@ export default { ...@@ -706,6 +749,9 @@ export default {
706 removePublicLayer() { // 删除公共标记 749 removePublicLayer() { // 删除公共标记
707 this.map.remove(this.publicInfo); 750 this.map.remove(this.publicInfo);
708 }, 751 },
752 + removeWarnLayer() { // 删除预警标记
753 + this.map.remove(this.warnInfo);
754 + },
709 // 限制地图范围 755 // 限制地图范围
710 lockMapBounds() { 756 lockMapBounds() {
711 // var bounds = this.map.getBounds(); 757 // var bounds = this.map.getBounds();
...@@ -785,6 +831,10 @@ export default { ...@@ -785,6 +831,10 @@ export default {
785 this.navName = 'publicInfo' 831 this.navName = 'publicInfo'
786 this.setPublicLayer() 832 this.setPublicLayer()
787 } 833 }
834 + if (key === 'warn') {
835 + this.navName = 'warnInfo'
836 + this.setWarnLayer()
837 + }
788 this.closeInfoWindow(); 838 this.closeInfoWindow();
789 setTimeout(() => { 839 setTimeout(() => {
790 // 地图zooms调整 840 // 地图zooms调整
......