【vue.js】使用高德地图选择省市区后,再点击确认当前选择的位置

news2025/8/9 5:36:45

成品展示

在这里插入图片描述

前期准备

先去高德开放平台申请一个web端的key。
管理平台
2022年后申请的key,必须和它生成的secret一起使用。
key和秘钥
可使用服务选择web端
使用设置

在vue项目中,可以通过直接引入js文件,也可以安装vue-amap等插件使用。


使用

  1. 安装官方的js API 插件
	npm i @amap/amap-jsapi-loader --save
  1. 在index.html文件内,把安全秘钥(点击查看官方文档)给引用进去
<script>
  window._AMapSecurityConfig = {
    // 例如 :serviceHost:'http://1.1.1.1:80/_AMapService',  //安全写法,前面是服务器地址
    // securityJsCode: "xxxkey"  //测试时候的写法
  };
</script>

配置好基础的信息后,就可以开始使用了

  1. 使用,新建map.vue,设置成组件使用
<template>
  <div id="container"></div>
</template>
<script type="text/javascript">
</script>

<script>
import AMapLoader from "@amap/amap-jsapi-loader"; //医用文件
let district;
let geoCorder;
let marker;
export default {
  props: {
    data: {
      type: Object
    }
  },
  data() {
    return {
      map: null,
      polygons: []
    };
  },
  mounted() {
    this.initMap();
  },
  methods: {
    initMap() {
      // console.log(data)
      AMapLoader.load({
        key: "xxx", // 申请好的Web端开发者Key,首次调用 load 时必填
        version: "2.0", // 指定要加载的 JSAPI 的版本,缺省时默认为 1.4.15
        plugins: ["AMap.DistrictSearch", "AMap.Geolocation", "AMap.Geocoder"] // 需要使用的的插件列表,如比例尺'AMap.Scale'等
      })
        .then(AMap => {
          this.map = new AMap.Map("container", {
            //设置地图容器id
            viewMode: "2D", //是否为3D地图模式
            zoom: 3
          });
          var opts = {
            subdistrict: 0, //返回下一级行政区
            extensions: "all", //返回行政区边界坐标组等具体信息
            level: "city" //查询行政级别为 市
          };
          district = new AMap.DistrictSearch(opts); //行政区查询插件
          geoCorder = new AMap.Geocoder();
			
			//进入就显示整个国家范围
          district.search("中国", function(status, result) {
            console.log(status, result);
          });
        })
        .catch(e => {
          console.log(e);
        });
    },

这一步效果如图

  1. 在使用页面选择省市区后,地图自动跳转到当前区域
 //父页面选择选项后,调取子页面的方法
 /**父页面  value[2]大概格式,也是高德地图的
 	{
 	text: "三水区"
 	value: "440607"
 	}
 **/
 this.$refs.maps.setDistrict(value[2]);
 ---
 //map.vue内
 
  // 设置完省市区后,地图跳转到设置好的区域来
  //polygons是绘制边界线的经纬度数组
   setDistrict(adcode) {
     for (var i = 0, l = this.polygons.length; i < l; i++) {
       this.polygons[i].setMap(null);
     }

     district.search(adcode, (status, result) => {
       if (status === "complete") {
         this.getData(result.districtList[0]);
       }
     });
   },
 	
  // 设置数据
    getData(data) {
      let _this = this;
      var bounds = data.boundaries;
      if (bounds) {
        for (var i = 0, l = bounds.length; i < l; i++) {
          var polygon = new AMap.Polygon({
            map: this.map,
            strokeWeight: 1,
            strokeColor: "#0091ea",
            fillColor: "#80d8ff",
            fillOpacity: 0.2,
            path: bounds[i]
          });
          _this.polygons.push(polygon);
        }
        this.map.setFitView(); //地图自适应
        this.map.setZoom(11);
      }
    }
 

在这里插入图片描述

  1. 添加点击事件
//边界外的点击事件
this.map.on("click", e => {
            // console.log(e, "点击事件");
   if (marker) {
     this.map.remove(marker);
   }
   marker = new AMap.Marker({
     position: new AMap.LngLat(e.lnglat.lng, e.lnglat.lat)
   });
   this.map.add(marker);
   this.regeoCoder(e);
 });

//边界内的点击事件
 polygon.on("click", function(e) {
   // console.log(e, "点击事件");
   if (marker) {
     _this.map.remove(marker);
   }
   marker = new AMap.Marker({
     position: new AMap.LngLat(e.lnglat.lng, e.lnglat.lat)
   });
   _this.map.add(marker);
   _this.regeoCoder(e);
 });

//点击获取详细地址
 regeoCoder(e) {
  let address = {
    lng: e.lnglat.lng,
    lat: e.lnglat.lat
  };
  geoCorder.getAddress(e.lnglat, (status, result) => {
    if (status === "complete") {
      // 传递数据   result.regeocode.formattedAddress就是从省级开始的详细地址
      this.$emit("getValue", address, result.regeocode.formattedAddress);
    }
  });
},

最终成果如开头动图所示

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

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

相关文章

数据治理系列:数仓建模之数仓主题与主题域

背景&#xff1a; 数据仓库之父 Bill Inmon 将数据仓库描述为一个面向主题的、集成的、稳定的、反应历史变化的数据集合&#xff0c;用于支持管理者的决策过程。 从上面的引言里面&#xff0c;我们其实可以知道主题在数仓建设里面绝对是很重要的一环&#xff0c;这的确是的。…

警惕,11月这6本期刊已被剔除SCI/SSCI

2022年11月22日晚&#xff0c;科睿唯安更新了Web of Science核心期刊目录&#xff0c;SCIE/SSCI期刊数据库剔除(Dropped)或停止检索(Ceased)了6本期刊&#xff0c;被剔除的6本期刊中&#xff0c;有4本期刊是信息更改&#xff0c;其中1本期刊更改了名称和ISSN号&#xff0c;2本期…

S4 image save:save_image_lzo函数分析

save_image_lzo函数分析 save_image_lzo在S4中运行&#xff0c;运于保存image数据&#xff0c;函数的调用逻辑如下&#xff1a; hibernate()->swsusp_write()->save_image_lzo()1. 基本流程 该函数实现了S4中内核image压缩的功能&#xff0c;大致流程如下图所示&#…

35+程序员该怎么办?有哪些破局方法?

在互联网行业一直有一种说法&#xff0c;如果35岁还没到管理岗&#xff0c;基本就是被裁的命运了。作为互联网行业的主力军&#xff0c;程序员的职业发展&#xff0c;也被人总结成&#xff0c;三年升高工、七年做架构、十年送外卖。虽然是个段子&#xff0c;也透露了大家对于年…

Python列表类型详解

今天继续给大家介绍Python相关知识&#xff0c;本文主要内容是Python列表类型 一、列表类型定义与创建 在Python中&#xff0c;列表类型是序列类型的一种&#xff0c;也是一种非常重要、非常常用的数据类型。列表使用方括号[]或list()函数创建&#xff0c;列表中的元素使用逗…

如何转变固定资产管理方式,让企业降本增效?

作为企业资产的重要组成部分&#xff0c;固定资产管理直接影响到企业的运营和核心的支出。固定资产的科学管理是企业管理者很关心问题。传统的纸质表格固定资产管理方式&#xff0c;通常是企业在成立之初采取的方式。因为成立之初企业需要节省成本&#xff0c;而且资产数量和种…

Android入门第33天-Android里的弹出式对话框

简介 Android Studio里在4.0前有一种ProgressDialog&#xff0c;这个已经淘汰了。我们完全可以使用ProgressBar来取代。但是还有一种Dialog叫PopWindow&#xff0c;它是一种“可阻塞式Dialog”。即弹出后除非你给它一个“动作”否则就一直显示在那。 今天我们就来看看这种Dia…

python面向对象(下)

python面向对象下封装封装的方法获取私有属性继承单一继承语法格式同名的情况私有属性的调用方法多重继承语法格式小例子同名的情况多态持续更新中~~~~~~~~~封装 封装是面向对象的核心思想。它是指将对象的属性和行为封装起来&#xff0c;其载体就是类&#xff0c;类通常对客户…

linux搭建git服务器,windows客户端配置git

Linux服务器配置之Git服务器搭建步骤&#xff1a; 一、配置环境 1、服务器&#xff1a;CentOS 8.2&#xff08;64位&#xff09; Git &#xff08;version 2.27.0&#xff09; 2、客户端&#xff1a;Windows 10 &#xff08;64位&#xff09; Git&#xff08;version 2.38.…

基于深度学习的AI绘画为何突然一下子火了?

CLIP &#xff5c;Midjourney | dreamstudio AIGC | Stable Diffusion | Imagen 随着Disco、Midjourney、dreamstudio 、AIGC、Stable Diffusion、Imagen、深度学习、高性能计算、数据分析、数据挖掘等技术的快速发展&#xff0c;AI绘画技术得到迅速发展。 即使今年年初的AI绘…

Redis String类型使用方法

String 类型 String 类型&#xff0c;也就是字符串类型&#xff0c;是Redis中最简单的存储类型。 其value是字符串&#xff0c;不过根据字符串的格式不同&#xff0c;又可以分为3类&#xff1a; string&#xff1a;普通字符串int&#xff1a;整数类型&#xff0c;可以做自增、…

国际站、速卖通、Lazada店铺运营技巧?如何提升销量?

现在国际站、速卖通、Lazada平台开店的卖家越来越多&#xff0c;如何让店铺稳定的使用下去&#xff0c;是每一个卖家都需要思考的问题。现在我们一起来看一看&#xff0c;有哪些运营上需要注意的事项。 1选择产品 不管什么平台都是一样&#xff0c;产品是根本&#xff0c;只有…

Handler 原理

线程的应用场景 Android是单线程模型&#xff0c;Activity、Service、Broadcast等组件的创建&#xff0c;都是在主线程完成的&#xff0c;即UI线程。但如果需要执行一些耗时的操作时&#xff0c;比如&#xff1a;I/O的读写、大文件的读写、数据库操作以及网络上传和下载等操作都…

Linux登陆配置虚拟机

启用虚拟机一、启动虚拟机1、登录虚拟机2、查看IP地址3、能否PING通外网二、配置静态IP地址1、修改网卡配置文件2、重启网络服务3、重启虚拟机4、查看修改后的IP地址5、测试虚拟机能否Ping通外网三、测试宿主机与虚拟机能否相互Ping通1、测试宿主机能否Ping通虚拟机2、测试虚拟…

信创产业多点开花,AntDB数据库积极参与行业标准研制,协同价值链伙伴共促新发展

11月&#xff0c;AntDB数据库积极参与多项数据库行业标准研讨会&#xff0c;助推行业规范建立&#xff1b;凭借领先的技术研发能力与企业创新能力&#xff0c;在今年9月入选了《2022爱分析数据智能厂商全景报告》&#xff0c;此次又凭借在信创市场的深入推广&#xff0c;入选《…

反转链表问题的递归解法

目录 一、反转整个链表 二、反转部分链表 一、反转整个链表 给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表。 首先在方法中我们需要判断递归终止的情况&#xff0c;如果headnull或者head.nextnull&#xff0c;那么我们就可以直接返回hea…

【快速上手系列】保姆级Layuimini与SSM的联合使用教程(数据表格操作)

【快速上手系列】保姆级Layuimini与SSM的联合使用教程&#xff08;数据表格操作&#xff09; 使用步骤 导入layuimini 下载layuimini文件 这个并不是直接运行的&#xff0c;需要用HBuilder导入 layuimini的项目路径 我用的是iframe版&#xff0c;个人更喜欢这种的&#x1…

Git -- submoudule子模块使用

文章目录子模块的作用添加子模块拉取带子模块的项目修改子模块代码子模块的作用 通常情况下&#xff0c;我们做项目时会有几个业务功能区分比较明确的模块&#xff0c;比如简单来说&#xff0c;一个项目我们可以分为认证授权模块、工具类模块、常规业务模块。 而像认证…

【外卖项目实战开发一】

文章目录1、软件开发整体介绍2、外卖项目介绍3、环境搭建数据库环境搭建创建数据库执行SQL脚本数据表maven项目搭建添加依赖:application.yml配置application启动类4、后台登录功能开发需求分析代码开发5、后台退出功能开发1、软件开发整体介绍 软件开发流程 角色分工 软件…

基于JAVA的企业人力人事资源管理系统OA,部门、人员、薪资、招聘功能齐全的项目【数据库设计、源码、开题报告】

数据库脚本下载地址&#xff1a; https://download.csdn.net/download/itrjxxs_com/86427647 摘要 随着知识经济的崛起&#xff0c;掌握了高新技术和具有现代管理理念的人已成为经济发展的原动力。一个企业要在市场竞争中取得优势地位&#xff0c;依靠的主要不是物质资源&…