Web地图开发,在vue3中引入高德地图API

在vue3中引入高德地图API要实现的功能

  1. 设置地图的显示样式
  2. 实现点击地图添加标记、点击地图获取详细地址和经纬度
  3. 输入框搜索获取相关地区提示(下拉框,选中后进行标记,视角移动到相对位置)
  4. 输入框输入内容,回车获取详细地址和经纬度

1、准备工作

官方文档 V2.0:https://lbs.amap.com/api/jsapi-v2/guide/abc/prepare
官方参考手册:https://lbs.amap.com/api/jsapi-v2/documentation

先进入高德开放平台,跟着步骤注册账号,创建应用
创建时服务平台要选择【web端(JS API)】,如果选其他服务有些功能用不了(比如后面的地址逆解析)。
官网示例地址:地图的创建-生命周期-示例中心-JS API 示例 | 高德地图API (amap.com)

2、用npm/yarn下载包,初始化地图

在Vue 3中引入高德地图,你可以按照以下步骤进行操作:
在项目目录中使用npm或yarn安装高德地图的JavaScript API库。你可以使用以下命令之一:

npm install @amap/amap-jsapi-loader
yarn add @amap/amap-jsapi-loader

2.1、注意事项:

1、必须要有安全密钥,不然有的api调用返回为undefined

window._AMapSecurityConfig = {// 安全密钥securityJsCode: "95869xxxxxxxxxxxxxxxxx53df87dfb",
};

3、组件代码(需要替换密钥和key)


<template><div id="container"></div>
</template><script setup lang="ts">
import AMapLoader from '@amap/amap-jsapi-loader'
import { onMounted, watch, defineProps,defineEmits,onUnmounted,ref, reactive } from 'vue'
import { log } from 'console'// 使用defineEmits创建名称,接受一个数组
const emit = defineEmits(["clickChild"]);
const props = defineProps({childValue: {default:''},infos:{type:Object,default:{lng:undefined,lat:undefined}}
});
let isTrue=ref(false)
let isProduction=ref(true)
let options=ref([])
let map:any= null
//标记点
let marker=''
// 地址逆解析
let geoCoder:any=null
// 位置信息
let form= ref({lng: "",lat: "",address: "",//地区编码adcode: "",
})
let AutoComplete:any=null
window._AMapSecurityConfig = {securityJsCode: '95869xxxxxxxxxxxxxxxxx53df87dfb',
}
watch(() => props.childValue,(newValue, oldValue) => {if(isProduction.value){// 地理编码geoCode()}else{// 搜索提示remoteMethod(newValue)}}
);watch(() => isTrue.value,(newValue, oldValue) => {if(newValue&&props.infos.lng){// 获取经纬度form.value.lng = props.infos.lng;form.value.lat = props.infos.lat;// 清除点removeMarker();// 标记点setMapMarker();}}
);
watch(() => props.infos.lng,(newValue, oldValue) => {if(newValue&&isTrue.value){// 获取经纬度form.value.lng = props.infos.lng;form.value.lat = props.infos.lat;// 清除点removeMarker();// 标记点setMapMarker();}}
);
// 搜索
function remoteMethod(query:any) {if (query !== "") {AutoComplete.search(query, (status:any, result:any) => {options.value = result.tips;let obj={options:options.value}emit("clickChild", obj);} else {options.value = [];}
}// 标记点
function setMapMarker() {// 自动适应显示想显示的范围区域map.setFitView();marker = new AMap.Marker({map: map,position: [form.value.lng, form.value.lat],});map.setFitView();// // 逆解析地址// toGeoCoder();map.add(marker);
}
// 清除点
function removeMarker() {if (marker) {map.remove(marker);}
}//正解析地址
function geoCode(){let geocoder = new AMap.Geocoder({// city: "010", //城市设为北京,默认:“全国”radius: 1000 //范围,默认:500});let address = props.childValue;geocoder.getLocation(address, function(status:any, result:any) {if (status === 'complete'&&result.geocodes.length) {var e = result.geocodes[0].location// 获取经纬度form.value.lng = e.lng;form.value.lat = e.lat;// 清除点removeMarker();// 标记点setMapMarker();let obj={ParkLongitude:form.value.lng+'',ParkLatitude:form.value.lat+'',address:address}emit("clickChild", obj);}else{// log.error('根据地址查询位置失败');}});
}
// 逆解析地址
function regeoCode() {let geocoder = new AMap.Geocoder({// city: "010", //城市设为北京,默认:“全国”radius: 1000 //范围,默认:500});let lnglat = [form.value.lng,form.value.lat];geocoder.getAddress(lnglat, function(status:any, result:any) {if (status === 'complete'&&result.regeocode) {let address = result.regeocode.formattedAddress;// '解析的地址',address;let obj={ParkLongitude:form.value.lng+'',ParkLatitude:form.value.lat+'',address:address}emit("clickChild", obj);}else{// log.error('根据经纬度查询地址失败')}});
}//获取详细地址
function toGeoCoder() {AMap.plugin('AMap.Geolocation', function() {let geolocation = new AMap.Geolocation({enableHighAccuracy: true,//是否使用高精度定位,默认:truetimeout: 10000,          //超过10秒后停止定位,默认:5sposition:'RB',    //定位按钮的停靠位置offset: [form.value.lng, form.value.lat], //定位按钮与设置的停靠位置的偏移量,默认:[10, 20]zoomToAccuracy: true,   //定位成功后是否自动调整地图视野到定位点needAddress:true,});map.addControl(geolocation);geolocation.getCurrentPosition(function(status:any, result:any){if(status=='complete'){// onComplete(result)}else{// onError(result)}});});
}
onMounted(() => {AMapLoader.load({key: '95869xxxxxxxxxxxxxxxxx53df87dfb',version: '2.0',// 需要用到的插件plugins: ["AMap.Geocoder", "AMap.AutoComplete",'AMap.Geolocation'],}).then((AMap) => {map = new AMap.Map('container', {viewMode: '3D',zoom: 11,mapStyle: 'amap://styles/grey', //设置地图的显示样式// center: [116.397428, 39.90923],})// 搜索提示插件AutoComplete = new AMap.AutoComplete({ city: "全国" });//为地图注册click事件获取鼠标点击出的经纬度坐标map.on('click', function(e:any) {map.value = e.lnglat.getLng() + ',' + e.lnglat.getLat()// '点击位置:', e.lnglat;// 获取经纬度form.value.lng = e.lnglat.lng;form.value.lat = e.lnglat.lat;// 清除点removeMarker();// 标记点setMapMarker();regeoCode();});isTrue.value=true}).catch((e) => {})
})
onUnmounted(() => {map && map.destroy();
})
</script>
<script lang="ts">
// 起名字,否则每个组件在开发者工具中都为index
export default {name: "Maps",
};
</script>
<style scoped>
#container {width: 100%;height: 100%;
}
</style>

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

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

相关文章

架构设计系列之前端架构和后端架构的区别和联系

前端架构和后端架构都是软件系统中最关键的架构层&#xff0c;负责处理不同方面的任务和逻辑&#xff0c;两者之间是存在一些区别和联系的&#xff0c;我会从以下几个方面来阐述&#xff1a; 一、定位和职责 前端架构 主要关注用户界面和用户体验&#xff0c;负责处理用户与…

打造中国人自己的GPTs,百度灵境矩阵升级为智能体平台

12月18日&#xff0c;百度「灵境矩阵」平台全新升级为「文心大模型智能体平台」。灵境矩阵基于文心大模型&#xff0c;为开发者提供多样化的开发方式&#xff0c;支持广大开发者根据自身行业领域、应用场景&#xff0c;选取多样化的开发方式&#xff0c;打造大模型时代的原生应…

关于我对归纳偏置(inductive bias)的概念和应用的详细总结

归纳偏置&#xff08;inductive bias&#xff09; 1.归纳偏置&#xff08;inductive bias&#xff09;的概念2.归纳偏置&#xff08;inductive bias&#xff09;的应用 1.归纳偏置&#xff08;inductive bias&#xff09;的概念 归纳偏置&#xff08;inductive bias&#xff0…

贪吃蛇(二)绘制地图

绘制地图主要是考察基础的循环和分支控制&#xff0c;视频没看完&#xff0c;自己写了一下。 绘制一个基础地图 #include"curses.h" void cursesinit() {initscr();keypad(stdscr,1); }void mapinit() {int row;int col;for(row 0;row < 20;row){if(row 0 || …

如何在 FastAPI 中设置定时任务:完全指南

Web 应用程序开发中&#xff0c;及时高效处理常规任务至关重要&#xff0c;包括定时收集数据或管理任务计划。针对强大且性能卓越的 FastAPI 框架&#xff0c;我们可以通过几种策略来管理这些必要的定时任务。 实现 FastAPI 中的定时任务 本指南将探讨在 FastAPI 环境中管理定…

工业6轴机械臂运动学逆解(解析解)

工业6轴机械臂运动学逆解&#xff08;解析解&#xff09; 通常工业机械臂采用6旋转轴串连的形式&#xff0c;保证了灵活性&#xff0c;但为其运动学逆解&#xff08;即已知机械臂末端的位姿 P P P&#xff0c;求机械臂各个旋转轴的旋转角&#xff09;带来了较大的困难&#xff…

面试题总结(十五)【ARMstm32】【华清远见西安中心】

ARM Cortex-M,Cortex-R,Cortex-A的区别和差异是什么&#xff1f; ARM Cortex-M&#xff0c;Cortex-R和Cortex-A是ARM架构下的不同处理器系列&#xff0c;针对不同的应用领域和需求进行了优化和设计。它们之间的区别和差异主要体现在以下几个方面&#xff1a; 1. 应用领域&#…

倒计数器:CountDownLatch

CountDownLatch 是 Java 中用于多线程编程的一个同步工具。 它允许一个或多个线程等待其他线程执行完特定操作后再继续执行。 CountDownLatch 通过一个计数器来实现&#xff0c; 该计数器初始化为一个正整数&#xff0c;每当一个线程完成了指定操作&#xff0c;计数器就会减一。…

Apache CouchDB 垂直权限绕过漏洞 CVE-2017-12635 已亲自复现

Apache CouchDB 垂直权限绕过漏洞 CVE-2017-12635 已亲自复现 漏洞名称影响版本影响版本 漏洞复现环境搭建漏洞利用 总结 漏洞名称 影响版本 Apache CouchDB是一个开源的NoSQL数据库&#xff0c;专注于易用性和成为“完全拥抱web的数据库”。它是一个使用JSON作为数据存储格式…

【深度学习】序列生成模型(六):评价方法计算实例:计算ROUGE-N得分【理论到程序】

文章目录 一、BLEU-N得分&#xff08;Bilingual Evaluation Understudy&#xff09;二、ROUGE-N得分&#xff08;Recall-Oriented Understudy for Gisting Evaluation&#xff09;1. 定义2. 计算N1N2 3. 程序 给定一个生成序列“The cat sat on the mat”和两个参考序列“The c…

JavaSE 搜索树

目录 1 概念2 操作2.1 查找2.2 插入2.3 删除 3 性能分析4 和 java 类集的关系 1 概念 二叉搜索树 又称 二叉排序树&#xff0c;它是一棵空树&#xff0c;或者是具有以下性质的二叉树: 若它的左子树不为空&#xff0c;则左子树上所有节点的值都小于根节点的值&#xff1b;若它…

js使用promise对象达到promise waiting

async getInfoFormName() {return new Promise((resolve, reject) > {let infoForm: string;if (this.showBox "basic-info-box") {infoForm "basicInfoForm";} else {infoForm "extendInfoForm";}resolve(infoForm);});} 使用这个Priomi…

[Java][File]文件的创建与删除

对一个File类型的对象而言 1.创建一个新的空的文件 createNewFile 2.制作单级文件夹 mkdir 3.制作多级文件夹 mkdirs 4.删除文件、空文件夹 delete 注意&#xff1a;这个方法不会走回收站的 import java.io.File; import java.io.IOException;public class Main{public static …

Logistic Regression逻辑线性回归(基于diabetes数据集)

目录 介绍&#xff1a; 1、Confusion Matrix&#xff1a; 2、ROC&#xff08;Receiver Operating Characteristic&#xff09; 一、数据处理 二、建模 三、 confusion_matrix 四、 ROC&#xff08;Receiver Operating Characteristic&#xff09; 介绍&#xff1a; L…

class085 数位dp-下【算法】

class085 数位dp-下【算法】 code1 P2657 [SCOI2009] windy 数 // windy数 // 不含前导零且相邻两个数字之差至少为2的正整数被称为windy数 // windy想知道[a,b]范围上总共有多少个windy数 // 测试链接 : https://www.luogu.com.cn/problem/P2657 // 请同学们务必参考如下代码…

好习惯的重要性

养成习惯的五个步骤 提高认识 引导孩子对养成某个习惯产生兴趣明确规范 让孩子对养成某个好习惯的具体规范持久训练 坚持不懈的行为规范&#xff0c;让孩子由被动到主动再到自动及时评估 让孩子在成功的体验中养成良好习惯形成环境 让家庭生活和学校环境乃至社会风气成为孩子养…

7款创意性前端源码特效资源分享(附在线预览效果)

分享7款非常不错炫酷的前端特效源码 其中包含css动画特效、js原生特效、svg特效等 下面我会给出特效样式图或演示效果图 但你也可以点击在线预览查看源码的最终展示效果及下载源码资源 CSS绘制iPhone 14带动态岛 纯CSS绘制iPhone 14带动态岛模型 运行初始化时还附带出场动画 …

微信小程序动态导航栏(uniapp + vant)

本文使用到vant的van-tabbar组件来实现 一、uniapp整合vant ui vant小程序版本:https://vant-contrib.gitee.io/vant-weapp/#/home 注:vant并没有uniapp的版本,所以此处是引入小程序版本的ui 1. 下载vant编译后代码 https://github.com/youzan/vant-weapp/tree/dev/dist 2…

vue中对keep-alive的理解

vue中对keep-alive的理解 介绍使用方法参数解析使用示例 介绍 keep-alive是 Vue 内置的一个组件&#xff0c;可以使被包含的组件保留状态&#xff0c;或避免重新渲染。它有两个属性: include(包含的组件缓存) 与 exclude(排除的组件不缓存&#xff0c;优先级大于include) 。 使…

CentOs7.x安装部署SeaTunnelWeb遇到的坑

CentOs7.x安装部署SeaTunnelWeb遇到的坑 文章目录 1. 环境2. SeaTunnel安装部署2.1下载安装包2.2 设置环境变量2.3 安装连接器插件2.4 拷贝jar包到lib下2.5 启动命令2.6 执行官方client提交任务demo 3. SeaTunnel-Web安装部署3.1 下载安装包3.2 初始化数据库脚本或修改配置appl…