vue 使用谷歌地图 @googlemaps/js-api-loader 进行模糊搜索

在这里插入图片描述

<template><div class="map"><div class="mapLeftStyle"><el-inputv-model="input"placeholder="请输入内容"class="controls"@input="chnageinput"><i slot="prefix" class="el-input__icon el-icon-search"></i></el-input><div class="card" v-if="list.length > 0"><!-- <i class="el-icon-location fl mgr10" style="margin-top: 10px"></i> --><div class="item" v-for="(item, index) in list" :key="index"><div @click="confirm(item)"><div class="title">{{ item.structured_formatting.main_text }}</div><div class="address">{{ item.structured_formatting.secondary_text }}</div></div></div></div></div><div class="mapStyle"><div class="mapRightStyle"><div :style="googleMapStyle" class="googleMap" :id="mapID"></div></div></div></div>
</template>
<script>
import { Loader } from "@googlemaps/js-api-loader"; //引入
// 输入框模糊查询
let searchBox = undefined;
// 搜索地点和检索地点详细信息
let service = undefined;
// 对请求进行地理编码
let geocoder = undefined;
let marker = undefined;
export default {props: {//地图idmapID: {type: String,default: () => {return "googleMap";},},//谷歌地图样式googleMapStyle: {type: Object,default: () => {return {wdith: "100%",height: "100vh",};},},//谷歌地图配置mapOptions: {type: Object,default: () => {return {//为了关闭默认控件集,设置地图的disableDefaultUI的属性为truedisableDefaultUI: false,// 启用缩放和平移gestureHandling: "greedy",panControl: true,zoomControl: true,scaleControl: true,//关闭街景streetViewControl: false,};},},//谷歌地图缩放级别zoom: {type: Number,default() {return 15;},},//谷歌地图图形pathmapPath: {type: String,default: () => {return "";},},},data() {return {map: {},BMap: {},input: "",googleMapCenter: {lng: "",lat: "",},//标记点marker: [],//图形实例graphicalExample: null,//图形路径经纬度graphicalPath: [],apiKey: "",// 模糊匹配数据list: [],};},created() {},mounted() {//通过浏览器的Geolocation API获取经纬度if (navigator.geolocation) {navigator.geolocation.getCurrentPosition(this.showPosition);} else {console.log("Geolocation is not supported by this browser.");}this.init();},methods: {showPosition(position) {const latitude = position.coords.latitude;const longitude = position.coords.longitude;console.log("Latitude: " + latitude);console.log("Longitude: " + longitude);this.googleMapCenter = {lng: longitude,lat: latitude,};this.init();},init() {this.$nextTick(() => {const loader = new Loader({apiKey: this.apiKey, //之前的keyversion: "weekly", //版本libraries: ["places", "drawing"], //插件库places为基础库 drawing为绘制工具库region: "Canada",language: "en",});const mapOptions = {center: {lat: this.googleMapCenter.lat * 1,lng: this.googleMapCenter.lng * 1,}, //中心点zoom: this.zoom, //缩放级别...this.mapOptions, //其他配置};loader.load().then((google) => {const map = new google.maps.Map(document.getElementById(this.mapID),mapOptions);this.googleMap = map;this.googleApi = google;// 自动完成请求 参考文档:https://developers.google.com/maps/documentation/javascript/reference/places-autocomplete-service?hl=ensearchBox = new google.maps.places.AutocompleteService();// 搜索地点和检索地点详细信息 参考文档:https://developers.google.com/maps/documentation/javascript/reference/places-service?hl=enservice = new google.maps.places.PlacesService(map);// 对请求进行地理编码 参考文档:https://developers.google.com/maps/documentation/javascript/reference/geocoder?hl=engeocoder = new google.maps.Geocoder();marker = new google.maps.Marker({map: map,position: {},draggable: true,});console.log(this.googleMap, "谷歌地图实例");console.log(this.googleApi, "谷歌地图api");}).catch((e) => {console.log(e);});});},GetMapLocation(results, status) {if (status === "OK") {console.log(results[0].geometry.location, results[0], results, "查验");this.googleMap.setCenter(results[0].geometry.location);marker.setPosition(results[0].geometry.location);} else {console.log("error");}},// 点击一行地址confirm(e) {// 搜索地点和检索地点详细信息service.getDetails({ placeId: e.place_id }, (event, status) => {if (status === "OK") {console.log(event.name, "===", event);this.input = event.name;// if (!event.name) return;let str = event.name;// 对请求进行地理编码geocoder.geocode({ address: str }, this.GetMapLocation);} else {}});},chnageinput(e) {console.log(e);searchBox.getPlacePredictions({ input: e }, (event, status) => {console.log(event, "===");if (status === "OK") {this.list = event || [];// place_id 后面有用,所以只保留存在place_id的数据this.list = this.list.filter((x) => x.place_id);console.log(event, "===", this.list);} else {this.list = [];}});},},
};
</script>
<style lang="scss" scoped>
::v-deep .el-input__inner::placeholder {font-size: 16px;font-family: Hei;font-weight: 400;color: #000000;line-height: 26px;
}
::v-deep .popper__arrow {top: 0px !important;
}
::v-deep .el-input__inner {border-width: 1px;margin-top: 113px;position: relative;border: none;border-radius: 0;border-bottom: 1px solid #999999;border-bottom-width: 2px;
}
::v-deep .el-input--prefix .el-input__inner {padding-left: 0px;
}
::v-deep .el-input__icon {position: absolute;top: 109px;left: 382px;font-size: 30px;color: #292929;
}
.map {display: flex;.mapLeftStyle {width: 450px;min-width: 450px;min-height: 100vh;background: #ffffff;.controls {padding: 0 30px;height: 50px;}.card {padding: 0 30px;.item {cursor: pointer;padding: 20px 0;.title {font-size: 17px;font-family: Hei;font-weight: 400;color: #000000;line-height: 26px;}.address {font-size: 15px;font-family: Hei;font-weight: 400;color: #666666;line-height: 26px;}}}.mapLeftStyle_line {height: 1px;border: 1px solid #999999;margin: 0px 21px 0px 21px;}}.mapStyle {width: 100%;.mapLeftStyle {// width: 30%;margin-right: 5px;display: inline-block;.inputDUStyle {display: inline-block;width: 47%;}.inputDUStyle:first-child {margin-right: 1rem;}.inputDUStyle {margin-bottom: 1rem;}}.mapRightStyle {width: 100%;display: inline-block;vertical-align: top;.map {width: 100%;min-height: 100vh;}}}
}
</style>

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

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

相关文章

JavaWeb-MyBatis(上)

学完项目管理工具Maven后&#xff0c;继续学习MyBatis。我们都知道&#xff0c;JDBC是一个与数据库连接相关的API&#xff0c;最开始学习数据库连接都是从JDBC开始学起&#xff0c;但是其也有缺点&#xff0c;比如硬编码和操作繁琐等等。而今天学习的MyBatis就是专门为简化JDBC…

免费SSL证书整理合集

有哪些免费的SSL证书呢&#xff1f;下面整理了一下非常有性价比的 一&#xff1a;免费单域名SSL证书&#xff1a;适用于只有一个域名的情况下使用 点击申请免费单域名SSL证书https://www.joyssl.com/certificate/select/joyssl-dv-single-free.html?nid7 二&#xff1a;通配…

基于单片机的篮球计分器设计

在当今的体育赛事中,比赛的计分系统对观众和运动员尤为重要,观众可以根据比分的实时显示为自己支持的队伍呐喊助威,运动员更是要靠着计分器来把握比赛的节奏,包括攻防转换、替补换人以及赛间休息等等。因此,为了让比赛进行得更加专业化和流畅化,我们有必要对比赛的计分系…

Linux 内存

Linux 内存 一:工具1.free2.查看内存额定值3.查看指定进程内存二:buffer/cache1.Buffer具体职责2.Cache具体职责区别三级目录一:工具 1.free -b  以Byte为单位显示内存使用情况。 -k  以KB为单位显示内存使用情况。 -m  以MB为单位显示内存使用情况。 -g 以GB为单位显…

Java Day4 API

文章目录 1、Object类1.1 Tostring1.2 equals1.3 clone 2、Objects类2.1 equals方法isNull 与nonNull 3、包装类3.1 常见操作 4、StringBuilder5、StringBuffer6、StringJoiner 1、Object类 所有类的基类。 1.1 Tostring public String toString() 返回对象的字符串表示形式…

总结Redis的原理

一、为什么要使用Redis 缓解数据库访问压力mysql读请求进行磁盘I/O速度慢&#xff0c;给数据库加Redis缓存&#xff08;参考CPU缓存&#xff09;&#xff0c;将数据缓存在内存中&#xff0c;省略了I/O操作 二、Redis数据管理 2.1 redis数据的删除 定时删除惰性删除内存淘汰…

设计定时任务实现数据同步的最佳实践

✨✨谢谢大家捧场&#xff0c;祝屏幕前的小伙伴们每天都有好运相伴左右&#xff0c;一定要天天开心哦&#xff01;✨✨ &#x1f388;&#x1f388;作者主页&#xff1a; 喔的嘛呀&#x1f388;&#x1f388; 目录 引言 一、选择合适的定时任务框架 Quartz Spring 的 Task…

【MATLAB第98期】基于MATLAB的MonteCarlo蒙特卡罗结合kriging克里金代理模型的全局敏感性分析模型【更新中】

【MATLAB第98期】基于MATLAB的Monte Carlo蒙特卡罗结合kriging克里金代理模型的全局敏感性分析模型【更新中】 PS:因内容涉及较多&#xff0c;所以一时半会更新不完 后期会将相关原理&#xff0c;以及多种功能详细介绍。 麻烦点赞收藏&#xff0c;及时获取更新消息。 引言 在…

如何判断螺栓已经拧紧?——SunTorque智能扭矩系统

智能扭矩系统-智能拧紧系统-扭矩自动控制系统-SunTorque 螺栓拧紧的标准并非仅仅依赖于螺栓的外观&#xff0c;而是依赖于几个关键因素&#xff0c;包括扭矩、预紧力和材料疲劳等。下面SunTorque智能扭矩系统和大家将详细讨论这些因素&#xff0c;并给出如何判断螺栓是否已经拧…

史上最大优惠!腾讯云服务器优惠价格表一年、1个月收费明细

腾讯云服务器多少钱一年&#xff1f;61元一年起&#xff0c;2核2G3M配置&#xff0c;腾讯云2核4G5M轻量应用服务器165元一年、756元3年&#xff0c;4核16G12M服务器32元1个月、312元一年&#xff0c;8核32G22M服务器115元1个月、345元3个月&#xff0c;腾讯云服务器网txyfwq.co…

Linux MBR扇区故障 引导修复

CSDN 成就一亿技术人&#xff01; 作者主页&#xff1a;点击&#xff01; Linux专栏&#xff1a;点击&#xff01; CSDN 成就一亿技术人 前言———— Linux MBR&#xff08;Master Boot Record&#xff0c;主引导记录&#xff09;是硬盘的第一个扇区&#xff0c;通常位于磁…

maven项目引入私有jar,并打包到java.jar中

私有jar存放位置 maven依赖 <dependency><groupId>com.hikvision.ga</groupId><artifactId>artemis-http-client</artifactId><version>1.1.10</version><scope>system</scope><systemPath>${project.basedir}/s…

Tomcat常见配置(基础功能、虚拟主机、搭建博客)

目录 一、Tomcat基础功能 1、自动解压war包 2、Tomcat工具界面 2.1 Server Status (服务器状态) 2.1.1 本地登录状态页 2.1.2 远程登录状态页 2.2 Manager App (管理应用程序) 2.3 Host Manager (主机管理器) 3、Context 配置 二、配置虚拟主机 三、搭建 JPress 博客…

支持AUTOSAR Classic以及Adaptive平台的DEXT诊断数据库

一 DEXT、DCM、DEM和FIM的概述 DEXT&#xff08;Diagnostic Extract Template&#xff09;是AUTOSAR定义的诊断提取模板&#xff0c;用于DCM&#xff08;Diagnostics Communication Manager&#xff09;、DEM&#xff08;Diagnostics Event Manager&#xff09;和FIM&#xff…

从新能源汽车行业自动驾驶技术去看AI的发展未来趋势

自动驾驶汽车关键技术主要包括环境感知、精准定位、决策与规划、控制与执行、高精地图与车联网V2X以及自动驾驶汽车测试与验证技术等。 &#x1f413; 自动驾驶技术 这是AI在汽车行业中应用最广泛的领域之一。自动驾驶技术利用AI算法和传感器来感知环境、识别障碍物&#xff0c…

各大厂商常用的弱口令集合

Oms呼叫中心 KXTsoft2010 Glodon控制台 admin TRENDnet趋势网络摄像头 admin/admin MOBOTIX-视频监控 admin/meinsm 思科Cisco 没有原始密码, 第一次登录时需要创建 DRS admin/1234 Honeywell admin/1234 安迅士Axis root/pass, 新安迅士摄像头在用户第一登录时要求创建…

【开源】JAVA+Vue.js实现农家乐订餐系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 用户2.2 管理员 三、系统展示四、核心代码4.1 查询菜品类型4.2 查询菜品4.3 加购菜品4.4 新增菜品收藏4.5 新增菜品留言 五、免责说明 一、摘要 1.1 项目介绍 基于JAVAVueSpringBootMySQL的农家乐订餐系统&#xff0c…

0基础学习VR全景平台篇第143篇:限定访问功能

大家好&#xff0c;欢迎观看蛙色VR官方——后台使用系列课程&#xff01;这期&#xff0c;我们将为大家介绍如何使用限定访问功能。 一.什么是限定访问功能&#xff1f; 限定访问&#xff0c;就是可以在编辑后台设置可以访问作品的用户的类型&#xff0c;还有可以访问作品的IP…

【leetcode热题】环形链表

难度&#xff1a; 简单通过率&#xff1a; 34.9%题目链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 题目描述 给定一个链表&#xff0c;判断链表中是否有环。 为了表示给定链表中的环&#xff0c;我们使用整数 pos 来表示链表尾连接到链表中的位置&#xff08;索…

【CSS】简单的抽屉面板展开收起自然过渡效果的css

目录 效果展示css固定梯形按钮至抽屉面板中间梯形按钮css过渡动画 效果展示 1.收起时点击蓝色梯形按钮展开 2. 展开时点击蓝色按钮收起 3.展开收起时需要过渡自然&#xff0c;有抽屉推拉效果 css 固定梯形按钮至抽屉面板中间 .toggle{ position: absolute;left:-21px;top…