Showing
3 changed files
with
83 additions
and
30 deletions
| ... | @@ -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 | }; | ... | ... |
| 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调整 | ... | ... |
-
Please register or login to post a comment