Vue3+setup使用vuemap/vue-amap实现地图相关操作

news2024/9/24 5:30:41

首先要下载依赖并且引入

npm安装

// 安装核心库
npm install @vuemap/vue-amap --save

// 安装loca库
npm install @vuemap/vue-amap-loca --save

// 安装扩展库
npm install @vuemap/vue-amap-extra --save

cdn

<script src="https://cdn.jsdelivr.net/npm/@vuemap/vue-amap/dist/index.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/@vuemap/vue-amap/dist/style.css"></script>
<script src="https://cdn.jsdelivr.net/npm/@vuemap/vue-amap-loca/dist/index.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/@vuemap/vue-amap-extra/dist/index.min.js"></script>

任选其一安装后引入依赖,记得换成自己注册的高德地图安全密钥和key

 npm

import App from './App.vue'
import VueAMap, {initAMapApiLoader} from '@vuemap/vue-amap';
// import VueAMapLoca from '@vuemap/vue-amap-loca';
// import VueAMapExtra from '@vuemap/vue-amap-extra';
import '@vuemap/vue-amap/dist/style.css'
initAMapApiLoader({
  key: 'YOUR_KEY',
  securityJsCode: 'securityJsCode', // 新版key需要配合安全密钥使用
  //Loca:{
  //  version: '2.0.0'
  //} // 如果需要使用loca组件库,需要加载Loca
})

createApp(App)
    .use(VueAMap)
  //.use(VueAMapLoca)
  //.use(VueAMapExtra)
    .mount('#app')

cdn

window.VueAMap.initAMapApiLoader({
  key: 'YOUR_KEY',
});

老规矩,先上效果图

 

 

每个marker标记点对应图标和数据状态不同

代码

<el-amap
      :vid="'amap-demo'"
      :zoom="zoom"
      :center="center"
      style="width: 100%; height: 100%; position: relative"
    >
      <el-amap-marker
        v-for="(marker, index) in markers"
        :key="marker.id"
        :position="[marker.lng, marker.lat]"
        :icon="marker.icon"
        @mouseover="showInfoWindow(index)"
        @mouseout="hideInfoWindow"
      ></el-amap-marker>

      <el-amap-info-window
        v-if="currentInfoWindowIndex !== null"
        :position="[
          markers[currentInfoWindowIndex].lng,
          markers[currentInfoWindowIndex].lat,
        ]"
        :visible="infoWindowVisible"
        :offset="[0, -30]"
      >
        <template #default>
          <div>
            <strong>事故名称:</strong>
            {{ markers[currentInfoWindowIndex].accidentName }}<br />
            <strong>事故类型:</strong>
            {{
              markers[currentInfoWindowIndex].accidentType == "HSP"
                ? "热源厂"
                : markers[currentInfoWindowIndex].accidentType == "HPPL"
                ? "热电厂"
                : markers[currentInfoWindowIndex].accidentType == "IWHT"
                ? "工业余热"
                : markers[currentInfoWindowIndex].accidentType == "CE"
                ? "清洁能源"
                : markers[currentInfoWindowIndex].accidentType == "PHNW"
                ? "供热一级网"
                : markers[currentInfoWindowIndex].accidentType == "SHNW"
                ? "供热二级网"
                : markers[currentInfoWindowIndex].accidentType == "CHNW"
                ? "庭院供热官网"
                : markers[currentInfoWindowIndex].accidentType == "HES"
                ? "换热站"
                : "单元立杠及入户管"
            }}
          </div>
          <el-steps
            style="width: 200px; height: 300px"
            direction="vertical"
            :active="
              markers[currentInfoWindowIndex].accidentStatus == 'IR'
                ? 1
                : markers[currentInfoWindowIndex].accidentStatus == 'CR'
                ? 2
                : markers[currentInfoWindowIndex].accidentStatus == 'MA'
                ? 3
                : 4
            "
          >
            <el-step
              :title="'事故上报 '"
              :description="markers[currentInfoWindowIndex].accidentDesc"
            />
            <el-step
              :title="'确认原因 '"
              :description="markers[currentInfoWindowIndex].reasonDesc"
            />
            <el-step
              :title="'物资到场 '"
              :description="markers[currentInfoWindowIndex].situationDesc"
            />
            <el-step
              :title="'抢修完成 '"
              :description="
                markers[currentInfoWindowIndex].summaryReportContent
              "
            />
          </el-steps>
        </template>
      </el-amap-info-window>
      <div
        style="
          position: absolute;
          right: 0;
          bottom: 0;
          width: 120px;
          height: 130px;
          background-color: #fff;
        "
      >
        <div style="height: 30px; line-height: 30px; text-align: center">
          <img
            style="width: 20px; height: 20px; vertical-align: middle"
            src="../../../public/sgsb.png"
          />
          事故上报
        </div>
        <div style="height: 30px; line-height: 30px; text-align: center">
          <img
            style="width: 20px; height: 20px; vertical-align: middle"
            src="../../../public/qryy.png"
          />
          确认原因
        </div>
        <div style="height: 30px; line-height: 30px; text-align: center">
          <img
            style="width: 20px; height: 20px; vertical-align: middle"
            src="../../../public/wzdc.png"
          />
          物资到场
        </div>
        <div style="height: 30px; line-height: 30px; text-align: center">
          <img
            style="width: 20px; height: 20px; vertical-align: middle"
            src="../../../public/qxwc.png"
          />
          抢修完成
        </div>
      </div>
    </el-amap>

下面是接口返回的数据格式 

{
    "errorcode": 0,
    "message": "success",
    "data": [
        {
            "id": 574926636965957,
            "orgId": "35194607",
            "accidentName": "第一个事故",
            "accidentType": "CE",
            "accidentStatus": "IR",
            "address": "辽宁省抚顺市抚顺县石文镇肖庆江采摘园",
            "areaId": "210000-210400-210421",
            "areaInfo": "辽宁省-抚顺市-抚顺县",
            "cityCode": "210421",
            "lng": 123.932566,
            "lat": 41.664697,
            "findTime": 1722499341000,
            "accidentDesc": "第一个事故描述",
            "reasonDesc": null,
            "situationDesc": null,
            "summaryReportContent": null
        },
        {
            "id": 574927337517125,
            "orgId": "35194607",
            "accidentName": "2",
            "accidentType": "HPPL",
            "accidentStatus": "CR",
            "address": "黑龙江省鹤岗市向阳区南翼街道地矿街",
            "areaId": "230000-230400-230402",
            "areaInfo": "黑龙江省-鹤岗市-向阳区",
            "cityCode": "230402",
            "lng": 130.306295,
            "lat": 47.338636,
            "findTime": 1722499511000,
            "accidentDesc": "2",
            "reasonDesc": "第二个原因描述",
            "situationDesc": null,
            "summaryReportContent": null
        },
        {
            "id": 574927455924293,
            "orgId": "35194607",
            "accidentName": "3",
            "accidentType": "IWHT",
            "accidentStatus": "ERC",
            "address": "北京市东城区龙潭街道必胜客(新光明楼店)北京天坛东门站希尔顿花园酒店",
            "areaId": "110000-110100-110101",
            "areaInfo": "北京市-市辖区-东城区",
            "cityCode": "110101",
            "lng": 116.433858,
            "lat": 39.883466,
            "findTime": 1722499542000,
            "accidentDesc": "3",
            "reasonDesc": "33",
            "situationDesc": "第三个情况描述",
            "summaryReportContent": "22"
        },
        {
            "id": 575179564855365,
            "orgId": "35194607",
            "accidentName": "4",
            "accidentType": "CE",
            "accidentStatus": "ERC",
            "address": "内蒙古自治区锡林郭勒盟西乌珠穆沁旗巴彦花镇",
            "areaId": "150000-152500-152526",
            "areaInfo": "内蒙古自治区-锡林郭勒盟-西乌珠穆沁旗",
            "cityCode": "152526",
            "lng": 118.659128,
            "lat": 44.532406,
            "findTime": 1722561086000,
            "accidentDesc": "4",
            "reasonDesc": "4",
            "situationDesc": "4",
            "summaryReportContent": "第三个总结汇报"
        },
        {
            "id": 577020505301061,
            "orgId": "35194607",
            "accidentName": "测试",
            "accidentType": "HPPL",
            "accidentStatus": "IR",
            "address": "辽宁省沈阳市新民市前当堡镇码头路",
            "areaId": "210000-210100-210181",
            "areaInfo": "辽宁省-沈阳市-新民市",
            "cityCode": "210181",
            "lng": 122.907173,
            "lat": 41.756281,
            "findTime": 1723010535000,
            "accidentDesc": "测试描述",
            "reasonDesc": null,
            "situationDesc": null,
            "summaryReportContent": null
        }
    ]
}
const data: any = ref([]);
// 地图配置
const zoom = ref(5);
const center = ref([116.397428, 39.90923]); // 初始中心坐标(北京)
const infoWindowVisible = ref(false);
const currentInfoWindowIndex: any = ref(null);
const get_report_list = () => {
  appAxios
    .get(
      `/emergency-repair-report/map?orgId=${orgId}&startTime=${startTime.value}&endTime=${endTime.value}`
    )
    .then((res: any) => {
      if (res.data.errorcode == 0) {
        data.value = res.data.data;
      }
    });
};
// 显示信息窗体
function showInfoWindow(index: any) {
  currentInfoWindowIndex.value = index;
  infoWindowVisible.value = true;
}

// 隐藏信息窗体
function hideInfoWindow() {
  infoWindowVisible.value = false;
}
const markers: any = ref([]);
watch(
  data,
  (newData) => {
    markers.value = newData.map((item: any) => ({
      ...item,
      icon:
        item.accidentStatus == "IR"
          ? "../../../public/sgsb.png"
          : item.accidentStatus == "CR"
          ? "../../../public/qryy.png"
          : item.accidentStatus == "MA"
          ? "../../../public/wzdc.png"
          : "../../../public/qxwc.png",
    }));
  },
  { immediate: true }
);

数据中的lng和lat对应markers定位点的经纬度来确定位置,其他的数据可以在窗体信息组件中进行自定义设置遍历渲染,其他具体相关配置项可以自行到官网查看地址如下简介 | @vuemap/vue-amap (guyixi.cn) 

注意这里涉及到map遍历的时候接口还没返回数据的异步问题,可以用watch,settimeout及其他方法解决相关问题。第二点是markers数组中的icon配置可以换成自己本地或者是http的url图片再或者其他的图标,按照需求来设置,不设置默认是蓝色水滴样式。

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

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

相关文章

ArcGIS基础:自定义创建点线面等样式符号以方便使用

有时&#xff0c;使用ArcGIS自带的符号样式库无法满足我们使用要求&#xff0c;还需要进行调整&#xff0c;可能会浪费一些时间&#xff0c;那么自己新建一些样式符号备用&#xff0c; 需要的时候直接使用&#xff0c;会节省很多时间&#xff0c;大家学会之后&#xff0c;对学…

ctfshow-web入门-sql注入(web196-web200)堆叠注入

目录 1、web196 2、web197 3、web198 4、web199 5、web200 1、web196 对输入长度做了限制 输出 flag 的条件&#xff1a; if($row[0]$password){$ret[msg]"登陆成功 flag is $flag";} 其中 $row[0] 表示从数据库查询结果中提取的某一行的第一个字段值&#x…

Linux网络编程5

IO多路复用 1.IO模型 在unix/linu下主要有四种I/O模式&#xff1a; 阻塞I/O: 最常用 大部分程序使用的都是阻塞模式的I/O 阻塞I/O 缺省情况下&#xff0c;套接字建立后所处于的模式就是阻塞I/O模式 读操作&#xff1a;read,recv,recvfrom 写操作&#xff1a;write,send …

【最新】推荐7款智能AI写作论文生成网站工具

在当前的AI技术浪潮中&#xff0c;智能AI写作工具已经成为了学术研究和论文撰写的重要助手。本文将推荐7款高效且功能全面的智能AI写作论文生成网站工具&#xff0c;并重点介绍其中备受好评的千笔-AIPassPaPer。 1. 千笔-AIPassPaPer 千笔-AIPassPaPer是一款集多种功能于一体…

最近在写的支付模块

最近再写支付模块就到处借鉴 旨在回顾一下。 1.确认订单功能 使用场景是&#xff1a;用户在选择好购物车后&#xff0c;或者是直接选择商品后&#xff08;选择商品封装为购物车&#xff09; 这样做是根据尚硅谷来学习的 目前需要这些属性&#xff0c;原因是在确认订单页面后…

如何采集淘宝商品评论?

采集商品评论对于企业和消费者都至关重要。它不仅帮助企业了解产品优势与不足&#xff0c;指导产品改进和市场策略调整&#xff0c;还能通过积极回应顾客反馈增强品牌忠诚度。对消费者而言&#xff0c;真实客观的评价是决策的重要参考&#xff0c;有助于避开潜在问题&#xff0…

Apache Tomcat 7下载、安装、环境变量配置 详细教程

Apache Tomcat 7下载、安装、环境变量配置 详细教程 Apache Tomcat 7下载Apache Tomcat 7 安装Apache Tomcat 7 环境变量配置启动 Apache Tomcat 7测试Tomcat7是否启动成功 Apache Tomcat 7下载 1、下载地址&#xff0c;找到Archives 链接: 官网下载地址 2、找到Tomcat 7&…

Linux查看系统线程数

Linux查看系统线程数 查看线程数查看进程内的线程统计线程数 查看线程数 想要查看Linux操作系统允许的最大线程数&#xff0c;可以通过命令 ulimit -a返回配置项的详细说明&#xff1a; # core文件的最大值为100blocks core file size (blocks, -c) 0# 进程的数…

[区间概率预测]CNN-BiLSTM-Attention-ABKDE多变量时序预测 基于改进自适应核密度估计实现区间预测

[区间概率预测]CNN-BiLSTM-Attention-ABKDE多变量时序预测 基于改进自适应核密度估计实现区间预测 【原创区间概率预测】CNN-BiLSTM-Attention-ABKDE多变量时序预测 基于卷积神经网络-双向长短期记忆神经网络-注意力机制结合自适应带宽核函数密度估计的多变量时序预测【点预测…

【51单片机仿真】基于51单片机设计的温度检测与高低温报警系统仿真源码设计文档演示视频——文末资料下载

基于51单片机设计的温度检测与高低温报警系统仿真设计 演示视频 基于51单片机设计的温度检测与高低温报警系统仿真 系统功能简介 1、实时温度测量&#xff0c;可调整温度值 2、显示测量的温度值&#xff0c;按键切换可查看高温和低温报警值 3、可通过按键输入报警最高值以及最…

8/8总结

1.三分 | 函数 虽然提示很明显了&#xff0c;但是还是没掌握套路&#xff0c;看了题解才会的&#xff0c;估计也有四分&#xff0c;就是三次方的形式。 例子&#xff1a; 2 1 2 0 0 2 2 0 0 2 -4 2AC: #include<bits/stdc.h> using namespace std; const int maxn1001…

动态规划(一)

目录 &#xff08;一&#xff09;递归到动规的一般转化方法 &#xff08;二&#xff09;动规解题的一般思路 1. 将原问题分解为子问题 2. 确定状态 3. 确定一些初始状态&#xff08;边界状态&#xff09;的值 4. 确定状态转移方程 &#xff08;三&#xff09;能用动规解…

【Android Studio】Webview 内核升级得三种方法

【Android Studio】Webview 内核升级得三种方法 前言X5 腾讯组件crosswalk开源项目webview升级加载的内核&#xff08;完美解决&#xff09;总结 前言 在APP 中进行网页加载&#xff0c;一般采用原生自带的Webview 组件&#xff0c;但在需要加载高版本网页的时候&#xff0c;有…

工业三防平板助力MES系统打造工厂移动式生产管理

随着工业4.0时代的到来&#xff0c;智能制造、数字化车间等概念层出不穷&#xff0c;生产过程的可视化管理也成为了企业提升效率、优化生产的关键。而工业三防平板&#xff0c;凭借其坚固耐用、功能强大、便携易用等特性&#xff0c;成为了实现生产过程可视化管理的重要利器&am…

SQL注入实例(sqli-labs/less-21)

与第20关无异&#xff0c;只多了一步base64加密 0、初始页面 1、确定闭合字符 2、爆库名 3、爆表名 4、爆列名 5、查询最终目标

POS刷卡开发源码之语音播报-CyberWinApp-SAAS 本地化及未来之窗行业应用跨平台架构

一、终端语音提醒的好处 1. 增强信息传递的有效性&#xff1a;在人们忙碌或者注意力分散时&#xff0c;语音提醒能够直接穿透噪音和干扰&#xff0c;确保重要信息被准确接收。 2. 提高操作的便捷性&#xff1a;用户无需停下手中的工作去查看屏幕或阅读文字&#xff0c;直接通过…

算法——动态规划:0/1 背包问题

文章目录 一、问题描述二、解决方案1. DP 状态的设计2. 状态转移方程3. 算法复杂度4. 举例5. 实现6. 滚动数组6.1 两行实现6.2 单行实现6.3 优缺点 三、总结 一、问题描述 问题的抽象&#xff1a;给定 n n n 种物品和一个背包&#xff0c;第 i i i 个物品的体积为 c i c_i …

NET8中WebAPI使用JWT入门教程

目录 1、JWT2、具体实现3、代码下载 1、JWT 现在在各类API的开发中&#xff0c;token已经是必备了。例如&#xff1a;微信公众号开发中&#xff0c;第一个方法就是获取token。JWT具体的定义及组成部分大家可以到网上找找&#xff0c;这儿给一个简单的描述&#xff1a;JWT 令牌…

yaml语法+yaml配置文件

yaml语法 k:(空格)v > 表示一对键值对空格必须有 yaml拥有严格的空格缩进格式控制&#xff0c;以空格的缩进来控制层级关系&#xff1b;只要是左对齐的一列数据&#xff0c;都是同一个层级的 spring:thymeleaf:cache: true# 检查模板是否存在&#xff0c;然后再呈现check…

通义灵码-阿里云推出的AI智能编码助手

通义灵码体验地址 标题通义灵码是什么&#xff1f; 通义灵码是由阿里巴巴推出的基于通义大模型的智能编码辅助工具&#xff0c;提供行级/函数级实时续写、自然语言生成代码、单元测试生成、代码注释生成、代码解释、研发智能问答、异常报错排查等能力&#xff0c;并针对阿里云…