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…

【Node.js从基础到高级运用】三、JavaScript基础

Node.js入门&#xff1a;JavaScript基础 在成功搭建了Node.js的开发环境之后&#xff0c;我们即将进入Node.js编程的核心——JavaScript语言本身。在这篇文章中&#xff0c;我们将回顾JavaScript的基础知识&#xff0c;这些是每个Node.js开发者都必须掌握的概念。我们还将探讨…

强制Unity崩溃的两个方法

在Unity中&#xff0c;这两种方法都可以用于强制使应用程序崩溃&#xff0c;但它们的作用略有不同&#xff1a; Application.ForceCrash(0); 这个方法会强制应用程序崩溃&#xff0c;并且参数传入的是一个整数值。当参数为0时&#xff0c;它会导致应用程序崩溃并显示一个“Acce…

免费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…

小程序开发随记——生命周期

生命周期 &#xff08;1&#xff09;组件的生命周期&#xff08;created、attached、ready、moved、detached&#xff09; created 触发时机&#xff1a;组件实例刚刚被创建好时&#xff0c; created 生命周期被触发。 此时&#xff0c;组件数据 this.data 就是在 Component …

react集成tinymce富文本编辑器

tinymce富文本编辑器 官方文档&#xff1a;https://www.tiny.cloud/docs/quick-start/ 中文文档&#xff1a;http://tinymce.ax-z.cn/ 支持vue、react、angular react集成 命令 yarn add tinymce/tinymce-react yarn add tinymce代码 import { useState, useEffect } from…

【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;通常位于磁…

主机字节序列和网络字节序列

目录 1.概念 2.常见的字节序 3.转换接口 1.概念 主机字节序列分为大端字节序和小端字节序&#xff0c;不同的主机采用的字节序列可能不同。大端字节序是指一个整数的高位字节存储在内存的低地址处&#xff0c;低位字节存储在内存的高地址处。小端字节序则是指整数的高位字节…

为什么内部类持有外部类可能内存泄露?

内部类持有外部类的引用可能导致内存泄漏的情况通常是因为外部类的生命周期比内部类的生命周期长。在这种情况下&#xff0c;如果内部类持有对外部类的引用&#xff0c;外部类将无法被垃圾收集器回收&#xff0c;即使外部类不再被使用。 这种情况通常发生在以下情形下&#xf…

前端架构: 脚手架通用框架封装之添加测试框架(教程六)

添加测试框架 接上文&#xff0c;仍旧在 abc-cli 项目中 参考&#xff1a;https://blog.csdn.net/Tyro_java/article/details/136438882 现在要在脚手架项目中安装测试工具&#xff0c;选择 jest 文档&#xff1a;https://www.npmjs.com/package/jest 数据&#xff1a;Week…

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 博客…