Vue中使用VueAMap

news2025/1/11 22:43:25

npm 安装

npm install vue-amap --save

注册:高德地图


// 在main.js中注册:高德地图
import VueAMap from "vue-amap";
Vue.use(VueAMap);
VueAMap.initAMapApiLoader({
  key: "你的高德key",
  plugin: [
    "AMap.AutoComplete", //输入提示插件
    "AMap.PlaceSearch", //POI搜索插件
    "AMap.Scale", //右下角缩略图插件 比例尺
    "AMap.OverView", //地图鹰眼插件
    "AMap.ToolBar", //地图工具条
    "AMap.MapType", //类别切换控件,实现默认图层与卫星图、实施交通图层之间切换的控制
    "AMap.PolyEditor", //编辑 折线多,边形
    "AMap.PolygonEditor", //编辑 折线多,边形
    "AMap.CircleEditor", //圆形编辑器插件
    "AMap.Geolocation", //定位控件,用来获取和展示用户主机所在的经纬度位置
  ],
  // 默认高德 sdk 版本为 1.4.4
  v: "2.0",
});

配置安全密钥

// 在public/index.html中配置
  <script type="text/javascript">
    // 使用高德,需要配置安全密钥
    window._AMapSecurityConfig = {
      securityJsCode: "xxx",
    };
  </script>

VueAMap使用

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

// 核心代码
<template>
  <div class="app-container">
    <div class="main">
      <!-- 地图 -->
      <div id="container" style="width: 100%; height: 500px" />
      <!-- 搜索 -->
      <div class="info">
        <div class="input-item">
          <div class="input-item-prepend">
            <span class="input-item-text" style="width: 8rem"
              >请输入关键字</span
            >
          </div>
          <input id="tipinput" type="text" style="margin-right: 5px" />
          <el-button type="primary" @click="onSearch" size="mini"
            >搜索</el-button
          >
        </div>
      </div>
      <!-- 控制按钮组 -->
      <section class="section">
        <div class="ebox">
          <el-button-group>
            <el-button
              type="info"
              icon="el-icon-circle-plus-outline"
              @click="drawRectangle"
              :disabled="path.length > 0"
              >绘制围栏</el-button
            >
            <el-button type="primary" icon="el-icon-edit" @click="editRectangle"
              >编辑围栏</el-button
            >
            <el-button
              type="success"
              icon="el-icon-success"
              @click="saveRectangle"
              >保存围栏</el-button
            >
            <el-button
              type="danger"
              icon="el-icon-delete"
              @click="deleRectangle"
              >删除围栏</el-button
            >
          </el-button-group>
        </div>
      </section>
    </div>
  </div>
</template>

<script>
export default {
  name: "Society",
  data() {
    return {
      map: null, // 地图组件
      center: [114.0579, 22.5431], //地图中心位置,不能为空数组【为空数组会报错】
      path: [], //绘制的数据
      polyEditor: null, // polyEditor组件
    };
  },
  created() {},
  mounted() {
    setTimeout(() => {
      //异步加载(否则报错initMap is not defined)
      this.initMap();
    }, 1000);
  },
  methods: {
    // 地图初始化
    initMap() {
      this.map = new AMap.Map("container", {
        resizeEnable: true, // 窗口大小调整
        center: this.center, // 中心
        zoom: 15, //放大级别
        showLabel: true, // 是否显示地图文字标记
      });
      // 添加工具栏
      this.map.plugin(
        [
          "AMap.ToolBar",
          "AMap.AutoComplete",
          "AMap.PlaceSearch",
          "AMap.Geolocation",
        ],
        () => {
          const toolbar = new AMap.ToolBar(); // 工具条
          this.map.addControl(toolbar);
          // 实例化Autocomplete 搜索
          const autoOptions = {
            //city 限定城市,默认全国
            city: "全国",
            input: "tipinput",
          };
          const AutoComplete = new AMap.AutoComplete(autoOptions);
          this.AutoComplete = AutoComplete;
          // AutoComplete.search(keyword, (status, result) => {
          //   console.log(status, result);
          //   // 搜索成功时,result即是对应的匹配数据
          // });

          // 获取定位工具
          const geolocation = new AMap.Geolocation({
            enableHighAccuracy: true, //是否使用高精度定位,默认:true
            timeout: 10000, //超过10秒后停止定位,默认:无穷大
            maximumAge: 0, //定位结果缓存0毫秒,默认:0
            convert: true, //自动偏移坐标,偏移后的坐标为高德坐标,默认:true
            showButton: true, //显示定位按钮,默认:true
            position: "LB", //定位按钮停靠位置,默认:'LB',左下角
            buttonOffset: new AMap.Pixel(10, 20), //定位按钮与设置的停靠位置的偏移量,默认:Pixel(10, 20)
            showMarker: true, //定位成功后在定位到的位置显示点标记,默认:true
            showCircle: true, //定位成功后用圆圈表示定位精度范围,默认:true
            panToLocation: true, //定位成功后将定位到的位置作为地图中心点,默认:true
            zoomToAccuracy: true, //定位成功后调整地图视野范围使定位位置及精度范围视野内可见,默认:false
          });
          this.map.addControl(geolocation);
          geolocation.getCurrentPosition((status, result) => {
            if (status == "complete") {
              this.$modal.msgSuccess("获取定位成功");
              this.center = [result.position.lng, result.position.lat];
            } else {
              this.$modal.msgWarning("获取定位失败");
            }
          });
          // 获取后端返回的数据,创建围栏
          if (this.path && this.path.length > 0) {
            const polygon = new AMap.Polygon({
              path: this.path,
            });
            // 创建围栏实例
            this.polyEditor = new AMap.PolyEditor(this.map, polygon);
            // 清空地图
            this.map.clearMap();
            // 地图添加围栏
            this.map.add(polygon);
            // 聚焦当前围栏
            this.map.setFitView(this.polyEditor.getTarget());
          }
        }
      );
    },
    // 绘制多边形
    drawRectangle() {
      const This = this;
      // 创建并开启围栏编辑器
      const polyEditor = new AMap.PolygonEditor(this.map);
      this.polyEditor = polyEditor;
      polyEditor.close();
      polyEditor.setTarget();
      polyEditor.open();
      // 创建一个覆盖物之后触发该事件,target即为创建对象。
      // 当editor编辑对象为空时,调用open接口,再点击一次屏幕就会创建新的覆盖物对象
      polyEditor.on("add", (data) => {
        const polygon = data.target;
        // 添加吸附多边形围栏
        polyEditor.addAdsorbPolygons(polygon);
        This.map.setFitView([polygon]);
        // 围栏双击事件,编辑完后聚焦当前围栏
        polygon.on("dblclick", () => {
          polyEditor.setTarget(polygon);
          This.map.setFitView([polygon]);
          polyEditor.open();
        });
      });
    },
    // 编辑围栏
    editRectangle() {
      // 聚焦当前围栏,打开编辑
      this.map.setFitView(this.polyEditor.getTarget());
      this.polyEditor.open();
    },
    //保存围栏
    saveRectangle() {
      this.path = [];
      // 获取当前最新的坐标,并取消编辑状态
      this.polyEditor
        .getTarget()
        .getPath()
        .forEach((v) => {
          this.path.push([v.lng, v.lat]);
        });
      this.polyEditor.close();
    },
    // 删除围栏
    deleRectangle() {
      this.path = [];
      this.map.clearMap(); // 删除地图所有覆盖物
    },
    // 搜索
    onSearch() {
      const vm = this;
      const keyword = document.getElementById("tipinput").value;
      // 实例化PlaceSearch
      const place = {
        map: vm.map,
        extensions: "all",
        autoFitView: true, // 是否自动调整地图视野使绘制的 Marker点都处于视口的可见范围
      };
      const PlaceSearch = new AMap.PlaceSearch(place);
      PlaceSearch.search(keyword, (status, result) => {
        // 搜索成功时,result即是对应的匹配数据
      });
    },
  },
};
</script>
<style lang="scss" scoped>
@import url("https://a.amap.com/jsapi_demos/static/demo-center/css/demo-center.css");
</style>
<style lang="scss"scoped>
.amap-box {
  width: 100%;
  height: 600px;
}
.section {
  position: relative;
}

.info {
  position: absolute;
  right: 0px;
  top: 0px;
}
</style>

如果在弹窗中使用VueAMap,需要全局引用改样式

// AMap.Autocomplete会被elment ui弹窗遮挡问题
.amap-sug-result {
  z-index: 99999 !important;
}

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

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

相关文章

Android12之Codec2.0配置编解码器为H264实现(四十五)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药. 更多原创,欢迎关注:Android…

NSS [NISACTF 2022]middlerce

NSS [NISACTF 2022]middlerce 开题&#xff0c;直接给了源码。 由语句$command json_decode($txw4ever,true)[cmd];可得&#xff0c;$txw4ever一定是json格式的数据&#xff0c;但是&#xff0c;preg_match()函数却过滤了{&#xff0c;同时.*贪婪匹配后又匹配括号里的字符&am…

讯飞星火认知大模型Java后端接口

文章目录 1.免费申请星火大模型套餐2.Java后端接口说明2.1 项目地址2.2 项目说明2.3 项目结构2.4 项目代码&#x1f340; maven 依赖&#x1f340; application.yml 配置文件&#x1f340; config 包&#x1f4cc; XfXhConfig &#x1f340; dto 包&#x1f4cc; MsgDTO&#x…

【漏洞复现】五、seacms 远程命令执行(CNVD-2020-22721)

五、seacms 远程命令执行 &#xff08;CNVD-2020-22721&#xff09; 5.1、漏洞原理 在w1aqhp/admin_ip.php下第五行使用set参数&#xff0c;对用户输入没有进行任何处理&#xff0c;直接写入文件。攻击者可利用该漏洞执行恶意代码&#xff0c;获取服务器权限 5.2、影响版本 …

flink集群与资源@k8s源码分析-回顾

本章是分析系列最后一章,作为回顾,以运行架构图串联起所有分析场景 1 启动集群,部署集群(提交k8s),新建作业管理器组件 2 构建和启动flink master组件 3 提交作业,N/A

百度APP iOS端包体积50M优化实践(六)无用方法清理

一、前言 百度APP包体积经过一期优化&#xff0c;如无用资源清理&#xff0c;无用类下线&#xff0c;Xcode编译相关优化&#xff0c;体积已经有了明显的减少。但是优化后APP包体积在iPhone11上仍有350M的空间占用。与此同时百度APP作为百度的旗舰APP&#xff0c;业务迭代非常多…

PlotNeuralNet resnet34和resnet18绘图

文章目录 resnet18resnet34 PlotNeuralNet网络 可以发现&#xff0c;resnet34和resnet18只有块的数量不一样&#xff0c;经过简单的修改即可得到 resnet18 \documentclass[border12pt, multi, tikz]{standalone} \usepackage[fontsize14pt]{fontsize} \usepackage{import} \su…

Spark 【分区与并行度】

RDD 并行度和分区 SparkConf setMaster("local[*]") 我们在创建 SparkContext 对象时通常会指定 SparkConf 参数&#xff0c;它包含了我们运行时的配置信息。如果我们的 setMaster 中的参数是 "local[*]" 时&#xff0c;通常代表使用的CPU核数为当前环境…

DevOps与CI/CD常见面试问题汇总

01 您能告诉我们DevOps和Agile(敏捷)之间的根本区别吗&#xff1f; 答&#xff1a;尽管DevOps与敏捷方法&#xff08;这是最流行的SDLC[Software Development Life Cycle]方法之一&#xff09;有一些相似之处&#xff0c;但两者在软件开发方面都是根本不同的方法。以下是两者之…

mysql 在eclipse在配置

一、在Windows&#xff08;窗口&#xff09;/Preferences&#xff08;首选项&#xff09;/Java/Build path&#xff08;构建路径&#xff09;/User Library&#xff08;用户库&#xff09;里面直接把建一个Mysql&#xff0c; 二、Add External JARs… 添加mysql-connector-java…

python学习之【with语句】

前言 上一篇文章 ​ ​python学习之【文件读写】​​​ 中我们学习了python当中的文件读写&#xff0c;这篇文章接着学习python中文件读写的with语句。 了解with语句 在很多场景中&#xff0c;通过使用with语句可以让我们可以更好地来管理资源和简化代码&#xff0c;它可以看…

洛谷刷题入门篇:顺序结构

链接如下&#xff1a;https://www.luogu.com.cn/training/100#problems 一、Hello,World! 题目链接&#xff1a;https://www.luogu.com.cn/problem/B2002 题目描述 编写一个能够输出 Hello,World! 的程序。 提示&#xff1a; 使用英文标点符号&#xff1b;Hello,World! 逗…

Windows下,快速部署开发环境,第三方库管理,以及项目迁移工具介绍

对于在windows下做c开发的同学&#xff0c;你是否有以下痛点&#xff1f;&#xff1a; 1.每次构建c项目,搭配第三方库环境,都要不停的include,lib,dll等配置,如果4-5个还好,要是10几个...人都麻了... 2.一个环境也无所谓,问题x64/32位系统,Debug,Release都要配置一遍..每次配置…

【C# Programming】值类型、良构类型

值类型 1、值类型 值类型的变量直接包含值。换言之&#xff0c; 变量引用的位置就是值内存中实际存储的位置。 2、引用类型 引用类型的变量存储的是对一个对象实例的引用&#xff08;通常为内存地址)。 复制引用类型的值时&#xff0c;复制的只是引用。这个引用非常小&#xf…

CentOS安装openjdk和elasticsearch

CentOS安装openjdk 文章目录 CentOS安装openjdk一、yum1.1search1.2安装openjdk 二、elasticsearch的启动和关闭2.1启动2.2关闭2.3添加服务 一、yum 1.1search yum search java | grep jdk1.2安装openjdk [roottest ~]# yum install java-1.8.0-openjdk -y 查看openjdk版本 …

校园学习《乡村振兴战略下传统村落文化旅游设计》 许少辉瑞博士生辉少许

校园学习《乡村振兴战略下传统村落文化旅游设计》 许少辉瑞博士生辉少许

无线定位中TDOA时延估计算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 ...................................................................figure; plot(P1x,P1y…

JeecgBoot v3.5.5 版本发布,性能大升级版本—开源免费的低代码开发平台

项目介绍 JeecgBoot是一款企业级的低代码平台&#xff01;前后端分离架构 SpringBoot2.x&#xff0c;SpringCloud&#xff0c;Ant Design&Vue3&#xff0c;Mybatis-plus&#xff0c;Shiro&#xff0c;JWT 支持微服务。强大的代码生成器让前后端代码一键生成! JeecgBoot引领…

【Java毕设项目】基于SpringBoot+Vue科研管理系统的设计与实现

博主主页&#xff1a;一季春秋博主简介&#xff1a;专注Java技术领域和毕业设计项目实战、Java、微信小程序、安卓等技术开发&#xff0c;远程调试部署、代码讲解、文档指导、ppt制作等技术指导。主要内容&#xff1a;毕业设计(Java项目、小程序等)、简历模板、学习资料、面试题…

JAVAEE初阶相关内容第十二弹--多线程(进阶)

目录 一、JUC的常见类 1、Callable接口 1.1callable与runnable 1.2代码实例 &#xff08;1&#xff09;不使用Callable实现 &#xff08;2&#xff09;使用Callable实现 1.3理解Callable 1.4理解FutureTask 2、ReentrantLock 2.1ReentrantLock的用法 2.2ReentrantLoc…