vue中使用高德地图,根据类型显示不同点,点击出现弹框居中显示,并在可视化区域显示所有点

news2024/11/28 23:18:47

效果图
在这里插入图片描述

一、安装 vue-amap 插件

npm install vue-amap --save

二、vue页面

<template>
<div>
      <ul style='display:flex;'>
        <li
          v-for="(item, index) in checkList"
          :key="index"
          @click="onClick(item)"
          :class="item.checked ? 'active' : ''"
        >
          <span class="name">{{ item.label }}</span>
        </li>
      </ul>
<div ref='map' id='map' style='width:500px;height:500px'></div>
     </div>
</template>
<script>
import AMapLoader from '@amap/amap-jsapi-loader';//引入
import point1 from '@/assets/images/point1.png'
import point2 from '@/assets/images/point2.png'
import point3 from '@/assets/images/point3.png'
export default {
  data() {
    return {
      checkList: [
        { label: '类型1', checked: false, value: 1 },
        { label: '类型2', checked: false, value: 2 },
        { label: '类型3', checked: false, value: 3 },
      ],
      _map:null
    }
  },
  mounted(){
  
	this.initMap()
},
  methods: {
  initMap(){
    AMapLoader.load({
            key: "你的key", // 申请好的Web端开发者Key,首次调用 load 时必填
            version: "1.4.15", // 指定要加载的 JSAPI 的版本,缺省时默认为 1.4.15
            plugins: ["AMap.Scale", "AMap.ToolBar", "AMap.ControlBar", 'AMap.Geocoder', 'AMap.Marker',  'Map3D',
              'AMap.Geolocation', 'AMap.InfoWindow'
            ], // 需要使用的的插件列表,如比例尺'AMap.Scale'等
        }).then((AMap) => {
            // 获取到作为地图容器的DOM元素,创建地图实例
            this._map = new AMap.Map(this.$refs['map'], { //设置地图容器id
                resizeEnable: true,
                viewMode: "3D", // 使用3D视图
                zoomEnable: true, // 地图是否可缩放,默认值为true
                dragEnable: true, // 地图是否可通过鼠标拖拽平移,默认为true
                doubleClickZoom: true, // 地图是否可通过双击鼠标放大地图,默认为true
                zoom: 12, //初始化地图级别
                center: [118.77,32.03], // 初始化中心点坐标
                pitch: 50, //倾斜视角
            })

            this._map.setMapStyle("amap://styles/darkblue");
        }).catch(e => {
            console.log(e)
        })
        },
    // 关闭弹框
    closeDialog() {
      if (this._infoWindow) {
        this._infoWindow.close(this._map)
      }
      
    },
  
    onClick(item) {
      item.checked = !item.checked
      if (this._infoWindow) {
        this._infoWindow.close(this._map)
      }
     
      if (item.value ==1) {
        if (item.checked) {
          const data = [
          {
              icon: point1,
              position: [118.79,32.00],
              content: ` <div class="map-info-dlg">
                        <div class="map-info-head">
                        <div class="tit">
                            <span>自定义标题</span>
                        </div>
                        </div>
                        <div class="map-info-content">
                        <div class="content-wxy">
                            <div class='row'>
                               自定义内容:<span class='row-value'>123</span>
                            </div>
                          
                        </div>
                        </div>
                    </div>`,
            },
          
        
          ]
           this.setMarkers(data,1)
        } else {
          this.removeMarkers(1)
        }
       
      }

      if (item.value == 2) {
        if (item.checked) {
          const data = [
            {
              icon: point2,
              position: [118.77,32.00],
              content: ` <div class="map-info-dlg">
                        <div class="map-info-head">
                        <div class="tit">
                            <span>自定义标题</span>
                        </div>
                        </div>
                        <div class="map-info-content">
                        <div class="content-wxy">
                            <div class='row'>
                               自定义内容:<span class='row-value'>123</span>
                            </div>
                          
                        </div>
                        </div>
                    </div>`,
            },
          ]
         this.setMarkers(data,2)
        } else {
          this.removeMarkers(2)
        }
      }
    },
   setMarkers(data,type){
        for (let i = 0; i < data.length; i++) {
            const img = new AMap.Icon({
              size: new AMap.Size(60, 80),
              image: data[i].icon,
              imageSize: new AMap.Size(60, 80),
            })
            const icon = { ...data[i], icon: img }
            this._marker = new AMap.Marker({
              position: icon.position,
              icon: icon.icon,
              //   offset: new AMap.Pixel(-12, -36),
              extData: { content: icon.content,type },
            })
            this._markers.setMap( this._map)
            if (this._markers) {
              this._markers.push(this._marker)
            } else {
              this._markers = []
              this._markers.push(this._marker)
            }
            this._marker.on('click', (e) => {
              this.closeDialog()
              const marker = e.target
              const content = marker.getExtData().content
              this._map.panTo(marker.getPosition())
              this.showInfoWindow(content, marker.getPosition())
            })
          }

          this._map.setFitView(this._markers, true)//可视化区域显示所有点
      },

      removeMarkers(type){
        if (this._markers) {
            for (let i = 0; i < this._markers.length; i++) {
              const content = this._markers[i].getExtData().content
              if(content.type == type){

                this._map.remove(this._markers[i])
              }
            }
            if (this._infoWindow) {
              this._infoWindow.close( this._map)
            }
          }
      },
    showInfoWindow(content, position) {
        console.log('position: ', position);
      this._infoWindow = new AMap.InfoWindow({
        content: content,
        position: position,
        offset: new AMap.Pixel(10, -30),
        autoMove: true,
        zIndex:400
      })
      this._infoWindow.open(this._map)
    },
   // toggleMarkers(type, visible) {
   //   if (this._markers) {
      //    for (let i = 0; i < this._markers.length; i++) {
      //      const marker = this._markers[i]
      //      const icon = marker.getIcon()
     //       if (icon.indexOf(type) !== -1) {
       //       marker.setVisible(visible)
       //     }
     //     }
     //   }
    //  },
   
  },
}
</script>
<style scoped lang="scss">
 li {
      width: 177px;
      height: 40px;
      cursor: pointer;
      .name {
         color:#000;
      }
    }
    .active {
       .name {
         color:red !important;
      }
    }
</style>
<style lang="scss">
.amap-info-contentContainer,
.amap-info-content {
  overflow: hidden;
  padding: 0;
  margin: 0;
  background: transparent;
}
.amap-info-sharp {
  border-top: 8px solid #2c4e79 !important;
  display: none;
}
.map-info-dlg {
  background: url('../../../assets/images/yjzh/common/tc-bg.png') no-repeat;
  background-size: 100% 100%;
  .map-info-head {
    width: 300px;
    display: flex;
    align-items: center;
    justify-content: space-between;
    height: 32px;
    background: url('../../../assets/images/yjzh/common/tc-title.png') no-repeat;
    background-size: 100% 100%;
    margin: 6px 0 0 0px;
    .tit {
      font-size: 16px;
      width: 100%;
      margin-left: 12px;
      background-image: -webkit-linear-gradient(bottom, #fff, #98deff);
      -webkit-background-clip: text;
      -webkit-text-fill-color: transparent;
      font-family: Alimama;
    }

    .c-img {
      width: 20px;
      height: 20px;
      margin: 0 12px 4px 0;
      cursor: pointer;
    }
  }
  .map-info-content {
    width: 300px;
    padding-left:  16px;

    .content-wxy,
    .content-bns {
      color: #fff;
      font-size: 12px;
      word-break: break-all;
      line-height: 26px;
      height: 100px;
      overflow-y: auto;
      padding:8px 12px 10px 0;
      .row {
        font-size: 12px;
        .row-value {
          color: #1fe2f3;
          word-break: break-all;
        }
      }
      &::-webkit-scrollbar {
        width: 8px;
        border-radius: 10px;
        background: #1fe2f3;
      }
      &::-webkit-scrollbar-track {
        border-radius: 10px;
        background-color: #091b32;
        border: 1px solid #091b32;
      }
      &::-webkit-scrollbar-thumb {
        border-radius: 10px;
        background-color: #1fe2f3;
      }
    }
    .content-bns {
      height: 160px;
    }
  }
}
.amap-info-close {
  top: 14px;
  right: 10px !important;
  font-size: 18px;
  color: #4ba9ef;
}
.amap-layers,.amap-overlays{
    z-index: 5;
}
</style>



本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1392484.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

直观全面的数据库管理 RazorSQL

RazorSQL是一款功能强大的数据库管理工具&#xff0c;适用于各种数据库系统&#xff0c;如MySQL、Oracle、SQL Server、SQLite等。它提供了一个直观的界面&#xff0c;让用户能够轻松地管理数据库&#xff0c;包括查询、编辑、创建和管理数据库对象等操作。RazorSQL还支持多种S…

使用composer生成的DMG和PKG格式软件包有何区别

在使用Composer从包源构建软件包时候&#xff0c;有两种不同类型的包&#xff1a;PKG和DMG。你知道两者之间的区别吗? 以及如何选取吗&#xff1f; 每种格式都有各自的优势具体取决于软件包的预期用途以及用于部署软件包的工具。下面我们来了解一下PKG和DMG格式的区别和用途。…

论文笔记:信息融合的门控多模态单元(GMU)

整理了GMU&#xff08;ICLR2017 GATED MULTIMODAL UNITS FOR INFORMATION FUSION&#xff09;论文的阅读笔记 背景模型实验 论文地址&#xff1a; GMU 背景 多模态指的是同一个现实世界的概念可以用不同的视图或数据类型来描述。比如维基百科有时会用音频的混合来描述一个名人…

详解Vite创建Vue3项目+vue-router+ts+vite+element-plus

前言 在之前的文章中写过“Vue3TSElementPlus的安装和使用教程【详细讲解】”&#xff0c;但那篇文章写的是创建vue3的项目没有使用到Vite构建工具进行创建还是使用的常规webpacket构建工具进行创建的。提到Vite和webpacket的时候我们可以简单说一下。Vite 和 Webpack 都是现代…

SpringBoot框架自定义解析配置项占位符(${})获取配置

一、前言 在最近项目开发中&#xff0c;有一个需求&#xff0c;针对自定义注解中字符串属性值的设置需要支持使用”${xx}“占位符获取在SpringBoot框架配置文件中配置项对应的属性值&#xff0c;而且支持多个”${xx}“标识的配置任意拼接。 二、功能实现 从实现思路上说还是…

nas-群晖docker查询注册表失败解决办法(平替:使用SSH命令拉取ddns-go)

一、遇到问题 群晖里面的docker图形化界面现在不能直接查询需要下载的东西&#xff0c;原因可能就是被墙了&#xff0c;那么换一种方式使用SSH命令下载也是可以的&#xff0c;文章这里以在docker里面下载ddns-go为例子。 二、操作步骤 &#xff08;一&#xff09;打开群晖系统…

STM32 TIM输出比较、PWM波形

单片机学习&#xff01; 目录 一、输出比较简介 二、PWM简介 三、输出比较通道 3.1通用定时器的输出比较部分电路 3.2高级定时器的输出比较部分电路 四、输出模式控制器 五、PWM基本结构 六、PWM参数计算 总结 前言 文章讲述STM32定时器的输出比较功能&#xff0c;它主…

【C++】explicit的作用 --- 2024.1.17

目录 explicit的作用结束语 explicit的作用 先看示例代码&#xff1a; class Maker { public:Maker(int n){} }; int main() {Maker m 10; }在上述代码中&#xff0c;main函数里我们实例化对象名称为m&#xff0c;并且赋值为10&#xff0c;作为有参构造函数的参数。但是实际…

libzmq XPUB/XSUB模型

libzmq XPUB/XSUB模型 与PUB/SUB功能类似,但是使用场景不一样.普通用法我就不说了,XPUB/XSUB典型的应用是作代理.PUB/SUB的问题 如图:最下面每个长方形框框是一个进程,他们都或多或少的需要关注PUB1-3的消息,所以最终的连接是全链接,很复杂,如果再多几个进程,连线就密密麻麻了…

SpringBoot整合MyBatis项目进行CRUD操作项目示例

文章目录 SpringBoot整合MyBatis项目进行CRUD操作项目示例1.1.需求分析1.2.创建工程1.3.pom.xml1.4.application.properties1.5.启动类 2.添加用户2.1.数据表设计2.2.pojo2.3.mapper2.4.service2.5.junit2.6.controller2.7.thymeleaf2.8.测试 3.查询用户3.1.mapper3.2.service3…

Microsoft Word 设置底纹

Microsoft Word 设置底纹 References 打开文档页面&#xff0c;选中特定段落或全部文档 在“段落”中单击“边框”下三角按钮 在列表中选择“边框和底纹”选项 在“边框和底纹”对话框中单击“底纹”选项卡 在图案样式和图案颜色列表中设置合适颜色的底纹&#xff0c;单击“确…

软件测试中的白盒测试,这些技巧你知道吗?

对于很多刚开始学习软件测试的小伙伴来说&#xff0c;如果能尽早将黑盒、白盒测试弄明白&#xff0c;掌握两种测试的结论和基本原理&#xff0c;将对自己后期的学习有较好的帮助。今天&#xff0c;我们就来聊聊黑盒、白盒测试的相关话题。 1、黑盒测试的方法和小结 最常见黑盒…

10 微信小程序开发

知识点回顾 1.项目回顾1.2 小程序1.3 API1.4 后台管理 2.后台管理celery2.1 基本后台管理2.1.1 专场2.1.2 拍品列表 3.逻辑开发4.部署 各位小伙伴想要博客相关资料的话关注公众号&#xff1a;chuanyeTry即可领取相关资料&#xff01; 1.项目回顾 此项目是由【小程序】【API】【…

Java21 + SpringBoot3集成Spring Data JPA

Java21 SpringBoot3集成Spring Data JPA 文章目录 Java21 SpringBoot3集成Spring Data JPA前言相关技术简介ORM&#xff08;Object-Relational Mapping&#xff0c;对象-关系映射&#xff09;JPA&#xff08;Java Persistence API&#xff0c;Java持久层API&#xff09;Hiber…

HFSS笔记/信号完整性分析(一)——常用快捷键+建模技巧

文章目录 1、常用快捷键2、常用建模技巧2.1 如何由一个无厚度的sheet生成一个有厚度的2.2 如何绘制T形截面的传输线&#xff1f;2.3 自动建立辐射边界法一、法二、 仅做笔记整理与分享。 1、常用快捷键 快捷键功能CtrlDfit it all 以合适的尺寸至于窗口中间CtrlH隐藏object或者…

Docker网络配置网络模式

前言 Docker 的网络模式是一种定义容器如何在网络中通信的方式。Docker 提供了多种网络模式&#xff0c;每种模式都适用于不同的使用场景 一.网络相关概念 1.子网掩码 互联网是由许多小型网络构成的&#xff0c;每个网络上都有许多主机&#xff0c;这样便构成了一个有层次的结…

【昕宝爸爸小模块】图文源码详解什么是线程池、线程池的底层到底是如何实现的

➡️博客首页 https://blog.csdn.net/Java_Yangxiaoyuan 欢迎优秀的你&#x1f44d;点赞、&#x1f5c2;️收藏、加❤️关注哦。 本文章CSDN首发&#xff0c;欢迎转载&#xff0c;要注明出处哦&#xff01; 先感谢优秀的你能认真的看完本文&…

【送书活动七期】CMeet系列 技术生态沙龙:技术人职业交流会·杭州场-转鸿蒙 对应用开发来说是否是职业发展新机会

CSDN致力于促进城市区域内尖端新兴技术开发者交流,提供开放自由的切磋平台。在近期热议的话题中,“华为鸿蒙系统不再兼容安卓应用”的消息成了程序员们广泛关注并引发思考的问题。 因此便有了我们此次的活动探讨议题! 目录 题外话开场简单介绍活动主办方介绍活动话题讨论升职加…

Intewell-Win_V2.0.1_release版本正式发布

Intewell-Win_V2.0.1_release版本 版本号&#xff1a;V2.0.1 版本发布类型&#xff1a;release正式版本 版本特点 1.优化虚拟网卡使用 2.实时性优化 运行环境推荐 Intewell developer可以运行在windows7及windows10 64位 支持硬件列表

小程序系列--7.页面配置以及网络数据请求

一. 页面配置 1.页面配置文件的作用 小程序中&#xff0c;每个页面都有自己的 .json 配置文件&#xff0c;用来对当前页面的窗口外观、页面效果等进行配置。 2. 页面配置和全局配置的关系 3. 页面配置中常用的配置项 二、网络数据请求 1. 小程序中网络数据请求的限制 2. 配…