pc端vue封装高德地图实现定位 PlaceSearch搜索

首先安装 @amap/amap-jsapi-loader
官网教程
mapContainer.vue


<template><div class="container-map" :style="styleObj"><!--  @change="changeInput" type="text" --><a-input id='tipinput' v-model:value="inputValue" @change="changeInput"></a-input><div id="container" ref="container" tabindex="0"></div><div id="panel"></div></div>
</template>
<script setup>
import { onMounted, onUnmounted, getCurrentInstance, ref, inject, watch, toRefs, reactive } from 'vue'
import { useRouter } from 'vue-router'
import AMapLoader from '@amap/amap-jsapi-loader';
import { keyGD, passwordGD } from "@/core/gaodekey.js";
import { message } from "ant-design-vue";
import utils from "@/core/utils.js";const router = useRouter()
const container = ref(null)
let mapObj = null
let placeSearch = {}
let mapModule = null
let autoComplete = null
const inputValue = ref('')
// 当前位置
const currentPosition = ref({})watch(() => props.value,(n) => {if (!n) {inputValue.value = undefined;} else {inputValue.value = n;}},{ immediate: true }
);
const emits = defineEmits(["getPosition", 'addMarker']);
const props = defineProps({replenishmentMapList: {type: Array,default: () => [],},styleObj: {type: Object,default: () => { }},value: {},
})const changeInput = (target) => {setTimeout(() => {emits("update:value", target.target._value);}, 500)
}
// 添加点位
const addMarker = (pointArray) => {// console.log(pointArray, "pointArray")clearMap()// 创建不同显示的iconpointArray.forEach((marker) => {new AMap.Marker({map: mapObj,position: [marker.lng, marker.lat],icon: new mapModule.Icon({ image: marker.icon || '', size: [25, 34], imageSize: [25, 34] }),offset: new AMap.Pixel(-13, -30)});})// 移动点位中心点mapObj.setFitView();
}
// 清除地图所有覆盖物
const clearMap = () => {mapObj.clearMap();
}
// 初始化地图
const initMap = () => {AMapLoader.load({key: keyGD, // 申请好的Web端开发者Key,首次调用 load 时必填version: '2.0',// 指定要加载的 JSAPI 的版本,缺省时默认为 1.4.15plugins: ["AMap.AutoComplete", "AMap.PlaceSearch", "AMap.Geolocation"],}).then((AMap) => {console.log(AMap, 'AMap')// 保存AMap实例mapModule = AMapconst map = new AMap.Map('container', {// 设置地图容器id// viewMode: '3D', // 默认2d地图模式zoom: 12, // 初始化地图级别zooms: [5, 30],// 可以设置初始化当前位置// center: [116.397428, 39.90923],resizeEnable: true})mapObj = maplet geolocation = new AMap.Geolocation({enableHighAccuracy: true,//是否使用高精度定位,默认:truetimeout: 10000,          //超过10秒后停止定位,默认:5sposition: 'RB',    //定位按钮的停靠位置offset: [10, 20], //定位按钮与设置的停靠位置的偏移量,默认:[10, 20]zoomToAccuracy: true,   //定位成功后是否自动调整地图视野到定位点});mapObj.addControl(geolocation)geolocation.getCurrentPosition((status, result) => {if (status == 'complete') {console.log(result, 'result你好')const { lng, lat } = result.positioncurrentPosition.value = { lng, lat }emits('getPosition', [lng, lat])addMarker([{ lng, lat }])} else {message.error('定位失败')}})// 搜索功能toSearch()}).catch((e) => {console.log(e)})
}
const select = (e) => {const { poi } = edebuggerconst poiName = e.poi.nameplaceSearch.setCity(e.poi.adcode)// 获取当前的坐标 115.644865,40.223472// lng lat const { lng, lat } = e.poi.locationautoComplete.search(poiName, function (status, result) {if (status === 'complete' && result.info === 'OK') {console.log(result, 'result')addMarker([{ lng, lat }])// 获取搜索到的点位emits('getPosition', [lng, lat])emits('getPositionInfo', poi)}}) // 关键字查询查询
}
const toSearch = () => {const autoOptions = {// input 为绑定输入提示功能的input的DOM ID,注意这个id要个搜索输入框的id一致input: 'tipinput'}autoComplete = new AMap.AutoComplete(autoOptions)placeSearch = new AMap.PlaceSearch({map: mapObj, //展现结果的地图实例})// console.log(placeSearch, 'placeSearch')autoComplete.on('select', select)// 注册监听,当选中某条记录时会触发
}onMounted(() => {window._AMapSecurityConfig = {securityJsCode: passwordGD // 申请key对应的秘钥 -> 注意了,如果不搭配密钥使用,搜索将没有结果}initMap() // 初始化地图
})
onUnmounted(() => {map?.destroy();
})
// watch(propData,(newVal,oldVal)=>{})
defineExpose({addMarker,
})
</script><style scoped>
.container-map {padding: 0px;margin: 0px;width: 50%;height: 500px;#container {width: 100%;height: 100%;}
}
</style>

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

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

相关文章

C++从零开始的打怪升级之路(day20)

这是关于一个普通双非本科大一学生的C的学习记录贴 在此前&#xff0c;我学了一点点C语言还有简单的数据结构&#xff0c;如果有小伙伴想和我一起学习的&#xff0c;可以私信我交流分享学习资料 那么开启正题 今天分享的是关于vector的题目 1.只出现一次的数字3 260. 只出…

基于springboot家政服务管理平台源码和论文

随着家政服务行业的不断发展&#xff0c;家政服务在现实生活中的使用和普及&#xff0c;家政服务行业成为近年内出现的一个新行业&#xff0c;并且能够成为大众广为认可和接受的行为和选择。设计家政服务管理平台的目的就是借助计算机让复杂的销售操作变简单&#xff0c;变高效…

深圳 福田区 建筑模型 su rhino

深圳 福田区 建筑模型 su rhino 只有福田区的&#xff0c;其他区的没有&#xff0c;其他市的没有 模型有skp&#xff0c;obj格式 模型如图 部分数据&#xff1a;

部署网站时遇到请求出现状态码206,可能是nginx配置问题

在部署网站系统的时候&#xff0c;部分接口出现状态码206&#xff0c;导致功能不能正常使用&#xff0c;经过排查&#xff0c;猜测可能是nginx配置中出现的问题。 目录 一、问题原因 二、解决办法 一、问题原因 当使用Nginx作为代理服务器时&#xff0c;确实存在一个代理缓存…

常用电子器件学习——三极管

三极管介绍 三极管&#xff0c;全称应为半导体三极管&#xff0c;也称双极型晶体管、晶体三极管&#xff0c;是一种电流控制电流的半导体器件其作用是把微弱信号放大成幅度值较大的电信号&#xff0c; 也用作无触点开关。晶体三极管&#xff0c;是半导体基本元器件之一&#xf…

浅学JAVAFX布局

JAVAFX FlowPane布局 Flowpane是一个容器。它在一行上排列连续的子组件&#xff0c;并且如果当前行填充满了以后&#xff0c;则自动将子组件向下推到一行 public class FlowPanedemo extends Application {Overridepublic void start(Stage stage) throws Exception {stage.s…

肺癌相关文献6

第十四篇 Classification of lung adenocarcinoma based on stemness scores in bulk and single cell transcriptomes IF&#xff1a;6.0 中科院分区:2区 生物学WOS分区&#xff1a;Q1被引次数&#xff1a; 4 背景&#xff1a;癌细胞具有无限期自我更新和增殖的能力[2]。在一…

Spring Security 6.x 系列【72】授权篇之角色分层

有道无术,术尚可求,有术无道,止于术。 本系列Spring Boot 版本 3.1.0 本系列Spring Security 版本 6.1.0 源码地址:https://gitee.com/pearl-organization/study-spring-security-demo 文章目录 1. 前言2. RoleHierarchy3. 案例演示3.1 期望3.2 集成3.2 测试4. 源码分析4…

python基础学习-03 安装

python3 可应用于多平台包括 Windows、Linux 和 Mac OS X。 Unix (Solaris, Linux, FreeBSD, AIX, HP/UX, SunOS, IRIX, 等等。)Win 9x/NT/2000Macintosh (Intel, PPC, 68K)OS/2DOS (多个DOS版本)PalmOSNokia 移动手机Windows CEAcorn/RISC OSBeOSAmigaVMS/OpenVMSQNXVxWorksP…

高校寝室卫生检查系统UML建模——活动图

学生查看历史的通知公告学生投诉寝室卫生检查 学生查看其他寝室的卫生情况 发起报修请求

取消默认进入conda的base环境

文章目录 输入命令&#xff1a; conda config --set auto_activate_base false即可

【强化学习】QAC、A2C、A3C学习笔记

强化学习算法&#xff1a;QAC vs A2C vs A3C 引言 经典的REINFORCE算法为我们提供了一种直接优化策略的方式&#xff0c;它通过梯度上升方法来寻找最优策略。然而&#xff0c;REINFORCE算法也有其局限性&#xff0c;采样效率低、高方差、收敛性差、难以处理高维离散空间。 为…

Vue3全局组件和自定义指令

目录 全局组件 全局指令 局部指令 全局组件 全局组件是在main.js中注册的&#xff0c;通过app实例.component创建 main.js import { createApp } from vue import App from ./App.vue //导入组件 import CustormComp from ./components/CustormComp.vue // 创建App实例挂载…

【centos7安装docker】

背景&#xff1a; 学习docker&#xff0c;我是想做一个隔离环境&#xff0c;并且部署的话&#xff0c;希望实现自动化&#xff0c;不为安装软件而烦恼&#xff0c;保证每个人的环境一致。 2C4G内存 50G磁盘的虚拟机事先已经准备完毕。 1.查看下centos版本&#xff0c;docker要…

CorLoc(Correct Localization)是什么?

“Correct Localization”&#xff08;CorLoc&#xff09;是一种用于评估目标检测模型性能的指标&#xff0c;强调模型是否能够准确地定位目标对象。该指标通常在训练数据上使用&#xff0c;用于检测模型对目标位置的精确性。 以下是对CorLoc的详细说明&#xff1a; 1.目标检测…

【大数据】Flink 系统架构

Flink 系统架构 1.Flink 组件1.1 JobManager1.2 ResourceManager1.3 TaskManager1.4 Dispatcher 2.应用部署2.1 框架模式2.2 库模式 3.任务执行4.高可用设置4.1 TaskManager 故障4.2 JobManager 故障 Flink 是一个用于状态化并行流处理的分布式系统。它的搭建涉及多个进程&…

aop介绍

AOP&#xff08;Aspect-Oriented Programming&#xff0c;面向方面编程&#xff09;&#xff0c;可以说是OOP&#xff08;Object-Oriented Programing&#xff0c;面向对象编程&#xff09;的补充和完善。OOP引入封装、继承和多态性等概念来建立一种对象层次结构&#xff0c;用…

Linux 快速上手

Liunx 不同的操作系统 Linux、Unix、Windows…Linux的不同的发行版本&#xff1a; debian、ubuntu、deepin、rethat、centos、fedora等等 Linux系统安装 可以参考我的安装Linux系统的文章&#xff0c;或者看网上找下安装步骤 Linux命令 命令行基础操作: 1. 命令行 [rootl…

代码随想录算法训练营第14天 | 二叉树的前序、中序、后序遍历(递归+迭代法)

二叉树的理论基础&#xff1a;&#xff08;二叉树的种类&#xff0c;存储方式&#xff0c;遍历方式 以及二叉树的定义&#xff09; https://programmercarl.com/%E4%BA%8C%E5%8F%89%E6%A0%91%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%80.html 二叉树的递归遍历 Leetcode对应的三道习…

我们应该解决哪些计算机网络中的问题,才能实现进程之间基于网络的通信呢?

ps&#xff1a;本文章的图片内容来源都是来自于湖科大教书匠的视频&#xff0c;声明&#xff1a;仅供自己复习&#xff0c;里面加上了自己的理解 这里附上视频链接地址&#xff1a;1.6 计算机网络体系结构&#xff08;1&#xff09;—常见的计算机网络体系结构_哔哩哔哩_bilibi…