vue 使用高德地图给海量点标记,并点击标记弹出信息窗口,信息窗口绑定点击事件

uniapp h5 高德地图基本的使用(给点标记绑定事件,信息窗体的使用 uniapp h5 高德地图基本的使用(给点标记绑定事件,信息窗体的使用) 阅读详情
AI摘要

本文详细介绍了如何在Vue项目中引入并使用高德地图,展示如何处理海量点标注,根据在线状态显示不同颜色的点,并实现点击标注点弹出信息窗口,窗口内绑定点击事件进行详情跳转。主要步骤包括地图引入、API熟悉、信息窗口和标记的创建以及事件处理。

目录

一、需求 

二、引入高德地图

2.1、将高德地图引入到项目中

2.2、查看官网快速上手,熟悉高德地图的主要API 

2.3、海量点标注要用到的API文档

2.4、全部代码

 其他:


一、需求 

        因为不知道具体会有多少个点,那就直接以海量点安排,海量点也是有限制的,建议在 30000 点内。

文档:标注和标注图层-海量点-海量点标记-示例中心-JS API 2.0 示例 | 高德地图API

         需求:后台给多个经纬度,都要在地图上显示成标注点,且根据 online 的值,online=0 时标注点为灰色点,online=1为红色点。点击标注点有内容弹框,弹框中绑定点击事件,点击 “查看详情” 可以进行跳转。实现如下图:

二、引入高德地图

2.1、将高德地图引入到项目中

vue中引入并使用高德地图_会隐身的小圆子的博客-优快云博客_vue 高德地图一、使用npm引入高德地图1.进入高德开放平台2.点击: 开发支持---------地图JS AP---------JSAPI的加载3.选择 按NPM方式使用loader4.定义一个有宽高的div二、小试牛刀----修改鼠标样式1.点击示例中心---------地图的创建---------地图属性-------设置鼠标样式右侧有示例代码下图是自己写的代码,需要注意几点(1)官方代码绑定的click事件传递的this 指当前点击元素,但是vue是没有的,在这里可以不传参,也https://blog.youkuaiyun.com/weixin_61032994/article/details/123984929https://blog.youkuaiyun.com/weixin_61032994/article/details/123984929

        先参者上面这篇博客,注册应用的过程就不在这里重复了,第一步是把自己的地图在页面上显示出来,其他的慢慢来。

<template>
  <div id="container"></div>
</template>
<script>
import AMapLoader from "@amap/amap-jsapi-loader";
export default {
  data() {
    return {
        map:null
    };
  },
  mounted() {
    AMapLoader.load({
      key: "", // 申请好的Web端开发者Key,首次调用 load 时必填
      version: "2.0", // 指定要加载的 JSAPI 的版本,缺省时默认为 1.4.15
      plugins: [], // 需要使用的的插件列表,如比例尺'AMap.Scale'等
    }).then((AMap) => {
      map = new AMap.Map("container");
    }).catch((e) => {
      console.log(e);
    });
  },
};
</script>
<style>
#container { width: 800px; height: 400px; }
</style>

2.2、查看官网快速上手,熟悉高德地图的主要API 

快速上手-入门-教程-地图 JS API v2.0 | 高德地图API高德开放平台官网https://lbs.amap.com/api/jsapi-v2/guide/abc/quickstart

2.3、海量点标注要用到的API文档

1. 在 2.1 中写出地图的基础上,设置一些假数据模拟海量点,参考以下文档,实现海量点标记。

标注和标注图层-海量点-海量点标记-示例中心-JS API 2.0 示例 | 高德地图API高德开放平台官网https://lbs.amap.com/demo/jsapi-v2/example/mass-markers/labelmarker-mass 2. 在海量点标记上给点添加信息窗口给多个点添加信息窗体-信息窗体-示例中心-JS API 2.0 示例 | 高德地图API高德开放平台官网https://lbs.amap.com/demo/jsapi-v2/example/infowindow/add-infowindows-to-multiple-markers


Vue高德地图自定义信息窗内绑定点击事件_鱼趴的博客-优快云博客_高德地图的信息窗加点击事件因为信息窗肯定是在生成标记后点击触发的事件,所以在 methods 中直接定义点击生成标记事件,不过多赘述,本文主要解决点击标记弹出的信息窗内的点击事件绑定问题这是高德官方文档中 自定义窗口数据的添加方式,看起来太麻烦且不好对代码进行操作content = [];content.push("<img src='http://tpc.googlesyndication.com/simgad/5843493769827749134'>地址:北京市朝阳区阜通东大街6号院3号楼东北8.3公._1671465600https://blog.youkuaiyun.com/tr1098891979/article/details/122066021

 3. 查看 API 手册,细化自己要使用到的功能覆盖物-参考手册-地图 JS API | 高德地图API高德开放平台官网https://lbs.amap.com/api/javascript-api/reference/overlay

2.4、全部代码

<template>
  <div id="container" v-loading="loading" element-loading-text="数据量较大,正在为您加载......" 
    element-loading-spinner="el-icon-loading"
    element-loading-background="rgba(0, 0, 0, 0.8)"></div>
</template>

<script>
import AMapLoader from '@amap/amap-jsapi-loader';
export default {
  data(){
    return{
      loading: true,
      map:null,
      infoWindow: null, //信息窗口
      positionData: []
    } 
  },
  methods:{
    initMap(){
      var _this = this;
      // https://webapi.amap.com/theme/v1.3/markers/n/mark_b.png
        AMapLoader.load({
            key: "您的Key值",             // 申请好的Web端开发者Key,首次调用 load 时必填
            version:"2.0",      // 指定要加载的 JSAPI 的版本,缺省时默认为 1.4.15
            plugins:['AMap.LineSearch'],       // 需要使用的的插件列表,如比例尺'AMap.Scale'等
        }).then((AMap)=>{
            _this.map = new AMap.Map("container",{  //设置地图容器id
                viewMode:"3D",    //是否为3D地图模式
                zoom:5.8,           //初始化地图级别
                expandZoomRange: true, //支持可以扩展最大缩放级别
                center:['116.441504', '40.031386'], //初始化地图中心点位置
                // pitch: 30, //俯仰角度 2D地图下无效,自V1.4.0开始支持
                mapStyle: 'amap://styles/normal' //地图样式,彩色
            });
            _this.map.on('complete',()=>{  
              _this.$axios.post("接口获取经纬度,处理数据",{}).then(res=>{
                if(res.state == 200 && res.data.length){
                  //处理后台返回要用到的数据
                    _this.positionData = res.data.map(item=>({
                      "deviceMarkId": item.deviceMarkId, "sn": item.sn, "address": item.address,
                      "onlineImg": item.online? "online.png":"offline.png",
                      "positionArr": [item.longitude,item.latitude]
                    }));
                    _this.mapPoint();
                    
                } else {
                  _this.loading = false;
                }
              });
            })
            //放大/缩小的工具条----地图右下角的 + 和 - 按钮
            _this.map.plugin(["AMap.ToolBar"], function() {
              _this.map.addControl(new AMap.ToolBar());
            });
            if(location.href.indexOf('&guide=1')!==-1){
              _this.map.setStatus({scrollWheel:false})
            }
        }).catch(e=>{
            console.log(e);
        })
    },
    mapPoint(){
      var _this = this;
      /* 1.创建 LabelMarker,
      2.创建 LabelsLayer,将已创建的 LabelMarker 添加到 LabelsLayer 上
      3. 将 LabelsLayer 添加到地图实例 */
      var labelsLayer = new AMap.LabelsLayer({
          zooms: [3, 20],
          zIndex: 1000,
          // 该层内标注是否避让
          collision: true,
          // 设置 allowCollision:true,可以让标注避让用户的标注
          allowCollision: true,
      });
      //将 LabelsLayer 添加到地图实例
      _this.map.add(labelsLayer);
      

      _this.infoWindow = new AMap.InfoWindow({offset: new AMap.Pixel(0, -4)});//信息窗口
      var position = JSON.parse(JSON.stringify(_this.positionData));
      for(var i = 0; i < position.length; i++){
        var labelMarker = new AMap.LabelMarker({
            position: position[i].positionArr
        });
        
        //标注信息
        var normalMarker = new AMap.Marker({ 
          position: position[i].positionArr, 
          map: _this.map,
          icon: require("@/assets/imgs/icons/"+ position[i].onlineImg)
        });
        normalMarker.content = '<p><b>序号1:</b>'+position[i].deviceMarkId+'</p>'+
                              '<p><b>序号2:</b>'+position[i].sn+'</p>'+
                              '<p><b>地址:</b>'+position[i].address+'</p>'+
                              '<strong style="color:#090;cursor:pointer;" onclick="handleDetail(\''+position[i].deviceMarkId+'\')">查看详情</strong>'
        normalMarker.on('click', _this.markerClick);
        normalMarker.setExtData({deviceMarkId: position[i].deviceMarkId}); //给标注添加信息,点击时可以获取
      }
      // 一次性将海量点添加到图层
      labelsLayer.add(labelMarker);
      this.loading = false; //地图加载完成
    },
    markerClick(e) {
      //这个只是标注的点击事件
        // this.map.setZoomAndCenter(8,e.target.getPosition()); //点击标点放大地图-缺点,不管放大/缩小多少倍,点击标点都会被缩放到8倍
        this.infoWindow.setContent(e.target.content);
        this.infoWindow.open(this.map, e.target.getPosition());
    }
  },
  created(){
    //标注文字上的点击事件
    window.handleDetail = (deviceMarkId)=>{
        this.$router.push({path:"/device/nowMonitor", query:{deviceMarkId}})
      }
  },
  mounted(){
    //DOM初始化完成进行地图初始化
    this.initMap();
  },
  destroyed(){
    // 销毁地图,并清空地图容器.该方法执行后,地图对象被注销,内存释放,地图容器被清空。
    this.map.destroy( );
  }
}
</script>

<style lang="scss" scoped>
#container{ padding:0px; margin: 0px; width: 100%; height: calc(100vh - 180px); }
</style>

 其他:

高德地图点击标记并获取标记点坐标和地址信息_木子李0531的博客-优快云博客

高德地图api2.0点聚合及点标记事件 高德地图API2.0 MarkerClusterer插件的使用 点聚合 点标记鼠标移入放大效果 点聚合及点标记的点击事件 阅读详情

相关推荐

高德地图-----国家和省级地图切换

高德地图---国家和省级地图切换

qq_40881695的博客 3366

高德地图的自定义标记点击事件

vue使用高德地图自定义标记时候的点击问题解决方案

简单Cere 2484

Vue2项目实战:高德地图自定义标记点与海量点性能优化全解析

本文详细解析了在Vue2项目中集成高德地图并实现自定义标记点与海量点性能优化的全流程。从基础集成、标记点样式定制到MassMarks海量点渲染,提供了完整的代码方案和性能优化技巧,帮助开发者解决地图应用中的常见性能瓶颈问题。

weixin_30522183的博客 717

高德离线地图OpenLayers实现添加标记点及标记点事件

要在使用高德离线地图数据的OpenLayers应用中添加标记点(通常称为"特征"或"要素")以及为这些标记点添加事件,你需要首先确保你的离线地图数据是以OpenLayers能够理解的格式提供的(如PNG瓦片用于底图,GeoJSON或其他矢量格式用于叠加层)。然而,由于高德地图主要提供的是在线服务,直接使用其离线数据格式(如.dat或.db文件)与OpenLayers集成可能比较复杂。

chenchuang0128的博客 1560

保姆级教程:用高德地图API在Vue2中打造可交互的标记点地图(附完整事件处理代码)

本文提供了一份详细的Vue2集成高德地图API的保姆级教程,重点讲解如何实现可交互的标记点地图。从基础配置到高级交互开发,涵盖Marker和MassMarks的使用、事件处理、性能优化等核心内容,并附完整代码示例,帮助开发者快速构建功能丰富的地图应用。

weixin_30448603的博客 173

Vue PC端高德地图实战:从搜索定位到智能标记的完整解决方案

本文详细介绍了在Vue PC端项目中集成高德地图的完整解决方案,涵盖从搜索定位到智能标记的全流程开发。通过实战案例展示了地图初始化、定位优化、智能搜索、标记管理等核心功能实现,并提供了性能优化技巧和常见问题解决方案,帮助开发者高效构建基于高德地图的Web应用。

weixin_26945061的博客 389

vue 点标记 高德地图_vue高德地图多点标记,点击出现弹窗

占坑预警先展示效果:image.pngimage.png代码:import AMap from "AMap";export default {props:["allCopmpony"],data() {return {map: null,mapStyle: [],marker: {},markerList: []};},watch: {},created() {console.log(this.a...

weixin_39693950的博客 1609

5G核心网Framed Routing功能解析:基于PFCP的帧路由机制与多终端互联实践

5G核心网Framed Routing功能解析:基于PFCP的帧路由机制与多终端互联实践

大家好,我是码农老gou,一名专注于编程技术的程序员。在这个博客中,我将与大家分享我在工作和学习中的经验、见解以及一些实用的技术干货。 1463

高德地图JS API 海量点标记LabelMarker

LabelMarker 是高德地图提供的用于在地图上高效展示大量标记点的类。与普通的Marker不同,LabelMarker适用于需要在同一地图上显示数千甚至数万个标记点的场景,具有更高的性能和更好的用户体验。

weixin_45511682的博客 2788

VGG16

VGG16学习笔记

一去不复返的通信er 1177

C2000 CLA协处理器:嵌入式实时控制性能优化与实战指南

在嵌入式实时控制系统中,主CPU常因高频率、低延迟的控制算法而面临性能瓶颈。为解决此问题,协处理器技术应运而生,它通过硬件并行架构分担计算密集型任务,从而提升系统整体性能。其核心原理在于独立的计算单元与总线设计,能够实现近乎零延迟的响应,这对于电机驱动、数字电源等闭环控制场景具有极高的技术价值。本文聚焦于德州仪器C2000系列微控制器中的控制律加速器(CLA),深入解析其作为独立浮点协处理器如何通过任务调度与消息RAM通信机制,有效实现性能倍增,并提供了从内存配置到代码调试的完整工程实践方案。

weixin_29192211的博客 302

【高德地图】点击除标点以外的地方,就去掉信息窗口

背景介绍: 需要实现的功能是,点击除标点以外的地方,信息窗口去掉。 信息窗口就是点击地图的标点后,出现在地图旁边的信息框。 具体实现: 是基于海量点实现的,首先用两个全局变量用来记录点击地图的次数和点击标点的次数。 只要点击地图的次数大于点击标点的次数,就说明鼠标左键没有点击标点,就去掉信息窗口就可以了。 重点是:map.on绑定点击地图事件,mass.on绑定点击标点事件 代码 var map = new AMap.Map('container', { //地图 zoom: 4,//级别

牛哞哞杂记 3033

国产大模型编程能力深度分析报告(2026年5月更新版)

2026年5月国产大模型编程能力报告显示,主流模型迎来重大升级。DeepSeek V4以1.6T参数创性能新高,Qwen3.6-Plus支持原生多模态编程,MiniMax M2.7转向闭源并优化Agent编码,Kimi K2.6成为商业化成熟的主力模型,GLM-5开源并涨价30%。阿里云百炼推出双轨订阅体系,区分团队和个人开发者需求。各模型在参数规模、上下文长度、性能表现和适用场景上各具优势,国产AI编程服务正加速向订阅制转型,成本效益显著提升。

Willin Wang 的全栈升级指南 1640

【前端实习】高德地图海量点渲染性能优化

记录了一下实习中实现30,000+设备的全国布局图的过程,并探讨了如何在高德地图上渲染海量点的性能优化方案。使用基于Zoom层级的懒加载策略,并通过sessionStorage减少重复请求,同时尝试分批请求和WebWorker优化。欢迎大家讨论并指出改进点。

Hugh的博客 2666

网工最容易搞混的三个概念:防火墙、网闸、堡垒机,一文让你轻松搞明白。

网闸的作用可以简单概括为:在两个或多个不同安全级别的网络(如内网和外网、普通网与高安全网、受限网与互联网)之间建立一个严格隔离、信息流转的安全桥梁。它的核心任务是实现数据安全传输与隔离,避免网络之间的直接连接带来的安全隐患。数据传输安全:网闸保证数据从一个网络到另一个网络时,能够进行审查、过滤和转换,防止恶意数据或非法信息被传入内部网络或外部泄露。高安全性隔离:网闸常常用于企业的内外网隔离、军事网络、政府机关等对数据隔离要求极高的环境。

HWP18612324139的博客 3635

使用 Java + PaddleOCR 实现表格识别,支持导出 HTML 和 Excel(附源码)

使用Java+PaddleOCR快速搭建表格识别系统,无需处理底层模型细节。系统支持表格结构识别和内容识别,可将图片转换为可编辑表格格式。文章提供了完整的实现流程,包括Maven依赖引入、模型下载(包含检测、识别、分类和表格结构模型)及参数配置说明。SmartJavaAI支持多种高性能模型选择,适用于不同应用场景,帮助开发者快速实现表格识别功能。

deng775747758的博客 1473

Vue2项目中使用高德地图自定义(Marker)标记点和创建(MassMarks)海量标记点

Vue2项目中使用高德地图自定义(Marker)标记点和创建(MassMarks)海量标记点

Beconcentrated的博客 1万+

YOLOv8改进策略【Conv和Transformer】| CVPR-2023 BiFormer 稀疏自注意力,减少内存占用

本文记录的是利用双级路由注意力机制优化的目标检测网络模型。传统的复杂度高,随着输入空间分辨率增加,计算量呈平方增长,导致严重的可扩展性问题。而本文所使用的在获取全局信息的同时,通过区域到区域路由和令牌到令牌注意力的合理设计,减少了不必要的计算量。BiFormer: Vision Transformer with Bi-Level Routing Attention采用四阶段金字塔结构,与一些先进的视觉Transformer类似。在每个阶段,首先使用重叠的补丁嵌入(在第一阶段)或补丁合并模块(在第二到第四阶段

Limiiiing的博客 613

Vue2项目使用高德地图

在vue2中使用高德地图的一些简单功能

GP2719434241的博客 5376

基于OpenClaw的自动化文件管理与文档分类系统设计与实现

本文介绍了一种基于OpenClaw的自动化文件管理与文档分类系统。系统采用三层架构设计,包含数据层、逻辑层和应用层,核心组件涵盖文件扫描、处理、分类、移动等功能。技术选型上使用Python/FastAPI作为后端,结合PostgreSQL/Elasticsearch/MinIO存储方案,并整合scikit-learn/PyTorch等AI技术实现智能分类。系统实现了文件递归扫描、增量扫描、元数据提取等功能,通过文件哈希和修改时间检测变化。该方案能有效提升文件管理效率,实现文档的自动化分类与智能管理。

一键难忘的博客 753

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

RuoYi vue-element-admin 增加原生高德地图并显示海量点

1、在public/index.html中增加js引用 记得放到head中 <!-- 引入高德地图API --> <script type="text/javascript" src="http://webapi.amap.com/maps?v=1.4.15&key=1edb3d323fb05a961b3321000ddff145"></script> 2、vue.config.js 增加配置内容 externals: {

haiyaoyouyou的博客 5777

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

高德地图性能优化,轻松10000+标记点,解决标记点marker过多,导致地图几乎卡死

性能优化思路: 1:将放弃使用Marker Marker标记点拆分出来; 2:重复样式或相似样式合并;3:将多张图片合并成为一张;4:减少图片请求体量 !!!切记一切高德地图实例不要使用框架响应式数据

bes9849的博客 987

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

vue3使用高德地图api,海量点,多边形围栏,热力图,轨迹线(一)

vue3使用高德地图api,实现海量点、圆形围栏、多边形围栏、热力图、信息窗体、轨迹线等功能

晚风的博客 4763

【vue3 + element-plus + 高德webApi】地图选址、海量标点、标点信息弹窗自定义数据信息、选中数据处理替换标点icon

个人项目笔记记录基于高德官方开放api进行修改 : https://lbs.amap.com/demo/list/js-api-v2。

amsxtyf的博客 1147

Vue中高德地图海量点渲染优化实战 - 从卡顿到流畅的全面解决方案

本文分享了在Vue项目中优化高德地图海量点渲染的实战经验。针对Marker过多导致的页面卡顿问题,深入分析了DOM节点爆炸、事件监听泛滥及Vue响应式系统带来的性能损耗。文章提出了从使用官方海量点方案、避免Vue响应式劫持地图实例,到数据分离与按需渲染的全面优化策略,最终实现上万点位流畅渲染。

butter的博客 469
上一篇: vue+elementui 日期时间控件 结束日期不能小于开始日期
下一篇: vue 在当前页面跳转,修改url地址参数并强制刷新页面 reload
Start2019
博客等级 码龄7年 2345粉丝 55原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值