vue接入高德地图获取经纬度

🤍step1:高德地图开放平台,根据指引注册成为高德开放平台开发者,并申请 web 平台(JS API)的 key 和安全密钥;

🤍step2:在html引入安全密钥(获取经纬度用,不然会报错)

 <script type="text/javascript">window._AMapSecurityConfig = {securityJsCode: 'xxx', //所申请的安全密钥 注意这是安全密钥而不是key}</script>

按 NPM 方式安装使用 Loader  

npm i @amap/amap-jsapi-loader --save

新建地图组件 MapContainer.vue 并引入 amap-jsapi-loader 

import AMapLoader from '@amap/amap-jsapi-loader';

🤍效果图:MapContainer组件只将经纬度和地址传到父组件

默认位置和经纬度:

点击地图上某个位置时:

地图组件代码:(只将经纬度传给父组件,因为form表单还有与地图无关的数据,所以没放到组件中)

<template><div><div id="container"></div></div>
</template><script>
/**JS API  Loader* 创建者:XRr* 创建时间:2023-10-10* 组件功能:获取地图上某个地点的经纬度* */
import AMapLoader from "@amap/amap-jsapi-loader";
export default {name: "MapDialog",props: ["defaultPoint", "defaultAddress"],data() {return {visible: false, //弹窗显隐center: [115.97539, 28.715532], //地图中心点point: [], //经纬度-lng latmap: null, //地图实例marker: null, //地图icongeocoder: null, //逆解析实例address: null, //地址};},mounted() {this.initMap();},methods: {//DOM初始化完成进行地图初始化initMap() {// 默认的经纬度和地址if (this.defaultPoint && this.defaultAddress) {this.address = this.defaultAddress;this.point = this.defaultPoint;this.center = this.point;}AMapLoader.load({key: "xxx", // 申请好的Web端开发者Key,首次调用 load 时必填version: "2.0", // 指定要加载的 JSAPI 的版本,缺省时默认为 1.4.15plugins: ["AMap.Geocoder", // 逆向地理解码插件"AMap.Marker", // 点标记插件"AMap.ToolBar",//比例尺,显示当前地图中心的比例尺"AMap.Scale",//比例尺,显示当前地图中心的比例尺"AMap.ElasticMarker",//灵活点标记,可以随着地图级别改变样式和大小的 Marker"AMap.Geolocation",//定位,提供了获取用户当前准确位置、所在城市的方法], // 需要使用的的插件列表}).then((AMap) => {this.map = new AMap.Map("container", {//设置地图容器idzoom: 12, //初始化地图级别center: this.center, //初始化地图中心点位置});// 如果父组件传入了有效值 回显一个iconif (this.point.length > 0) {this.addMarker();}//监听用户的点击事件this.map.on("click", (e) => {let lng = e.lnglat.lng;let lat = e.lnglat.lat;this.point = [lng, lat];// 增加点标记this.addMarker();// 获取地址this.getAddress();});}).catch((e) => {console.log(e);});},// 增加点标记addMarker() {// 清除其他iconif (this.marker) {this.marker.setMap(null);this.marker = null;}// 重新渲染iconthis.marker = new AMap.Marker({icon: "//a.amap.com/jsapi_demos/static/demo-center/icons/poi-marker-default.png",position: this.point, //icon经纬度offset: new AMap.Pixel(-13, -30), //icon中心点的偏移量});this.marker.setMap(this.map); //设置icon},// 将经纬度转换为地址getAddress() {const self = this;// 这里通过高德 SDK 完成。this.geocoder = new AMap.Geocoder({city: "全国", //地理编码时,设置地址描述所在城市; 默认全国; 可选值:城市名(中文或中文全拼)、citycode、adcoderadius: 100, //逆地理编码时,以给定坐标为中心点; 默认1000; 取值范围(0-3000)extensions: "all", //逆地理编码时,返回信息的详略; 默认值:base,返回基本地址信息; 默认值:base,返回基本地址信息});//调用逆解析方法 个人开发者调用量上限5000(次/日)this.geocoder.getAddress(this.point, function (status, result) {if (status === "complete" && result.info === "OK") {if (result && result.regeocode) {// this指向改变self.address = result.regeocode.formattedAddress;self.$emit('sendLoction',self.point,self.address)}}});}},
};
</script><style scoped>
#container {padding: 0px;margin: 0px;width: 100%;height: 400px;
}
</style>

 父组件:弹出框代码

<template><el-dialog:title="id ? '新建' : '编辑'":close-on-click-modal="false"append-to-body:visible.sync="visible"lock-scrollwidth="65%"><el-form :model="formData" size="small" label-width="100px"><el-row :gutter="0"><el-col :span="8"><el-form-item label="经度:"><el-input :disabled="true" v-model="formData.lng" placeholder="请选择"></el-input></el-form-item></el-col><el-col :span="8"><el-form-item label="经度:"><el-input :disabled="true" v-model="formData.lat" placeholder="请选择"></el-input></el-form-item></el-col><el-col :span="8"><el-form-item label="有效范围(米):"><el-input v-model="formData.range" placeholder="请选择"></el-input></el-form-item></el-col></el-row><el-row :gutter="0"><el-col :span="12"><el-form-item label="地址:"><el-input:disabled="true"v-model="formData.address"placeholder="请输入"></el-input></el-form-item></el-col><el-col :span="12"><el-form-item label="地址简称:"><el-inputv-model="formData.abbreviation"placeholder="请输入内容"></el-input></el-form-item></el-col></el-row></el-form><map-container:defaultPoint="point":defaultAddress="address"@sendLoction="getLoction"></map-container><span slot="footer" class="dialog-footer"><el-button @click="visible = false"> 取 消</el-button><el-button type="primary" @click="dataFormSubmit">确 定</el-button></span></el-dialog>
</template>
<script>
import MapContainer from "@/components/MapContainer/MapContainer.vue";
export default {components: {MapContainer },data() {return {visible: false,loading: false,formData: {lng: "",lat: "",range: null,address: null,//地址简称abbreviation: "",},//默认的地址和经纬度point:['106.26667','38.46667'],address: "银川",};},methods: {//初始化数据init() {this.defaultLngAndLat()this.visible = true;},//获取经纬度-子组件给父组件传的值getLoction(point, address) {this.formData.lng = point[0];this.formData.lat = point[1];this.formData.address = address;},//默认地址和经纬度defaultLngAndLat(){this.formData.lng = this.point[0];this.formData.lat = this.point[1];this.formData.address = this.address;},// 表单提交dataFormSubmit() {this.$refs["elForm"].validate((valid) => {if (valid) {this.submit();}});},submit() {}},
};
</script>

记录一下,虽然简单,但是每次用到都要重新梳理流程,过程很烦躁。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

FFmpeg 基础模块:容器相关的 API 操作

目录 AVFormat 模块 AVFormat 前处理部分 AVFormat 读写处理部分 小结 思考 FFmpeg 目录中包含了 FFmpeg 库代码目录、构建工程目录、自测子系统目录等&#xff0c;具体内容如下&#xff1a; 现在你知道 FFmpeg 的源代码目录中都包含了哪些内容&#xff0c;在之后使用 FFm…

手撕各种排序

> 作者简介&#xff1a;დ旧言~&#xff0c;目前大一&#xff0c;现在学习Java&#xff0c;c&#xff0c;c&#xff0c;Python等 > 座右铭&#xff1a;松树千年终是朽&#xff0c;槿花一日自为荣。 > 目标&#xff1a;掌握每种排序的方法&#xff0c;理解每种排序利弊…

SMT求解器Q3B——在WSL上的Docker配置

SMT求解器Q3B——在WSL上的Docker配置 1、配置wsl下的Docker2、在github上下载Q3B3、更换配置文件4、安装docker镜像5、运行Docker容器6、编译Q3B7、使用Q3B 1、配置wsl下的Docker WSL 2 上的 Docker 远程容器入门 2、在github上下载Q3B Q3B下载地址 3、更换配置文件 下载…

【SpringMVC篇】详解SpringMVC入门案例

&#x1f38a;专栏【SpringMVC】 &#x1f354;喜欢的诗句&#xff1a;天行健&#xff0c;君子以自强不息。 &#x1f386;音乐分享【如愿】 &#x1f384;欢迎并且感谢大家指出小吉的问题&#x1f970; 文章目录 &#x1f38d;SpringMVC简介⭐优点 &#x1f33a;SpringMVC入门…

详解TCP三次握手(建立连接)和四次握手(释放连接)

VC常用功能开发汇总&#xff08;专栏文章列表&#xff0c;欢迎订阅&#xff0c;持续更新...&#xff09;https://blog.csdn.net/chenlycly/article/details/124272585C软件异常排查从入门到精通系列教程&#xff08;专栏文章列表&#xff0c;欢迎订阅&#xff0c;持续更新...&a…

Typora-Drake主题

关于Typora-Drake主题的小调整 下载安装 下载地址&#xff1a;Drake (typora.io) 点击下载跳转GitHub,下载该主题 下载完成安装主题 打开主题文件夹&#xff0c;把下载的zip全部加压丢进去重启Typora Drake主题样式小调整 打开主题文件夹&#xff0c;找到Drake.css文件&am…

多线程 - 线程池

线程池 相关的背景知识 线程池存在的意义: 使用进程来实现并发编程,效率太低了,任务太重了,为了提高效率,此时就引入了线程,线程也叫做“轻量级进程”,创建线程比创建进程更高效;销毁线程比销毁进程更高效;调度线程比调度进程更高效…此时,使用多线程就可以在很多时候代替进程…

HomeView/主页 的实现

1. 创建数据模型 1.1 创建货币模型 CoinModel.swift import Foundation// GoinGecko API info /*URL:https://api.coingecko.com/api/v3/coins/markets?vs_currencyusd&ordermarket_cap_desc&per_page250&page1&sparklinetrue&price_change_percentage24…

2023中考满分多少 中考总分数展示

中考总分根据地区而不同&#xff0c;以下是各地区总分数展示&#xff1a; 大部分地区的中考总分为750分&#xff0c;包括语文150分、数学150分、英语150分&#xff08;其中听力测试30分&#xff09;、思想品德与历史合卷共150分&#xff0c;物理与化学合卷共150分。 安徽中考…

Qt打开ui文件经常报错

报错如下&#xff1a; 解决方法&#xff1a; 最后设置成默认值 即可

强化学习------Qlearning算法

简介 Q learning 算法是一种value-based的强化学习算法&#xff0c;Q是quality的缩写&#xff0c;Q函数 Q(state&#xff0c;action)表示在状态state下执行动作action的quality&#xff0c; 也就是能获得的Q value是多少。算法的目标是最大化Q值&#xff0c;通过在状态state下…

基于三平面映射的地形纹理化【Triplanar Mapping】

你可能遇到过这样的地形&#xff1a;悬崖陡峭的一侧的纹理拉伸得如此之大&#xff0c;以至于看起来不切实际。 也许你有一个程序化生成的世界&#xff0c;你无法对其进行 UV 展开和纹理处理。 推荐&#xff1a;用 NSDT编辑器 快速搭建可编程3D场景 三平面映射&#xff08;Trip…