vue 百度地图 使用 vue-baidu-map 进行当前位置定位和范围展示

news2024/11/25 3:54:08

vue 百度地图 使用 vue-baidu-map 进行当前位置定位和范围展示(考勤打卡)

  • 一、创建百度地图账号,获取秘钥
  • 二、 引入插件
    • 1、安装vue-baidu-map
    • 2、在main.js中引入
  • 三、 简单使用

最近写项目的时候,做到了考勤打卡的模块内容,需要选择考勤打卡的位置信息以及打卡的范围展,所以做出以下的记录,方便大家参考学习(如下图展示)

在这里插入图片描述

一、创建百度地图账号,获取秘钥

首先得有百度地图的账号,点此链接(百度地图)

二、 引入插件

1、安装vue-baidu-map

npm install vue-baidu-map --save

2、在main.js中引入

import Vue from 'vue'
import BaiduMap from 'vue-baidu-map'
 
Vue.use(BaiduMap, {
  ak: '此处为百度地图申请的密钥'
})

三、 简单使用

以下就不多介绍了,直接上完整代码

// 引入
npm install vue-baidu-map --save

引入map.vue页面

// point传值  gainLocation 获取点位的信息
<map :point="point"  @gainLocation="gainLocation" ></map>

data() {
    return {
      point:{
        "lng": 120.306731,  //坐标
        "lat": 31.581733, 
        value:'三阳广场',    // 位置信息
        scope:50			// 范围
      }
    }
  },
  gainLocation(row){
      console.log(row)
    }

创建map.vue页面

<template>
    <div>
        <el-button @click="open">打开地图</el-button

        <el-dialog title="地图" :visible.sync="dialogs" v-if="dialogs" >
            <div>
                <el-autocomplete style="width: 100%" :popper-append-to-body="false"
                    v-model="value" :fetch-suggestions="querySearchAsync" :trigger-on-focus="false" placeholder="输入地址查找点位信息"
                    @select="handleSelect" >
                    <i slot="prefix" class="el-input__icon el-icon-search"></i>
                    <template slot-scope="{ item }">
                        <div class="flexs">
                            <i class="el-icon-location" style="font-size:25px;color:#409eff"></i>
                            <div style="margin-left:15px" class="flcol">
                                <span style="color:#409eff;">{{ item.title }}</span>
                                <span style="color:#999">{{ item.address }}</span>
                            </div>
                        </div>
                    </template>
                </el-autocomplete>
            </div>
            <div >
                <baidu-map class="map"  :center="circleCenter" :zoom="zoom" :scroll-wheel-zoom="true" @ready="handler" />
            </div>
            <span slot="footer" class="dialog-footer">
                <el-button @click="subMit" type="primary">确 定</el-button>
                <el-button @click="dialogs = false">取消</el-button>
            </span>
        </el-dialog>
    </div>
</template>

<script>
import { BaiduMap, } from "vue-baidu-map";
export default {
    components: {
        BaiduMap,
    },
    props:['point'],
    data() {
        return {
            dialogs: false,
            value: '',
            circleCenter: { // 点位信息
                lng: 116.404,
                lat: 39.915
            },
            map: {},
            scope:50, // 范围
            zoom:20,  // 地图 视线大小
            circleStyle:{fillColor:"blue", strokeWeight: 1 ,fillOpacity: 0.3, strokeOpacity: 0.3},
        }
    },
    mounted() {
        //通过浏览器的Geolocation API获取经纬度
        if (navigator.geolocation) {
            navigator.geolocation.getCurrentPosition(this.showPosition);
        } else {
            console.log("Geolocation is not supported by this browser.");
        }
    },
    methods: {
        showPosition(position) {
            const latitude = position.coords.latitude;
            const longitude = position.coords.longitude;
            this.circleCenter = {
                lng: longitude,
                lat: latitude,
            };
        },
        handler({ BMap, map }) {
            let that = this
         	// 此处是根据组件传递展示范围和定位信息 (根据自己要求更改)
            if (that.point) {
                that.circleCenter = {
                    lng: that.point.lng,
                    lat: that.point.lat
                }
                that.value = that.point.value
                that.scope = that.point.scope
                map.centerAndZoom(new BMap.Point(that.circleCenter.lng, that.circleCenter.lat));
                var marks = new BMap.Marker(this.circleCenter); 
                map.addOverlay(marks); 
                var circle = new BMap.Circle(that.circleCenter,that.scope,that.circleStyle);
                map.addOverlay(circle);
            }
            that.map = map;
            var geocoder = new BMap.Geolocation(); //通过百度地图 创建地址解析器的实例   获取经纬度
            geocoder.getCurrentPosition(function (res) {
                var point = res.point
                const currentLocation = [res.longitude, res.latitude];
                console.log( "当前位置经纬度", currentLocation,res.address.province, res.address.city);
                if (!that.point) {
                    var gc = new BMap.Geocoder(); 
                    gc.getLocation(point,function(rs){
                        that.value = rs.address
                    })
                    that.circleCenter = {
                        lng: currentLocation[0],
                        lat: currentLocation[1],
                    };
                    map.centerAndZoom(new BMap.Point(currentLocation[0], currentLocation[1]));
                    var marks = new BMap.Marker(point); 
                    map.addOverlay(marks); 
                    var circle = new BMap.Circle(that.circleCenter,that.scope,that.circleStyle);
                    map.addOverlay(circle);
                }
            });
        },
        open() {
            this.dialogs = true
        },   
        querySearchAsync(str, cb) {
            var options = {
                onSearchComplete: function (res) {
                    console.log(res,111);
                    //检索完成后的回调函数
                    var s = [];
                    if (local.getStatus() == BMAP_STATUS_SUCCESS) {
                        for (var i = 0; i < res.getCurrentNumPois(); i++) {
                            s.push(res.getPoi(i));
                        }
                        cb(s); //获取到数据时,通过回调函数cb返回到<el-autocomplete>组件中进行显示
                    } else {
                        cb(s);
                    }
                },
            };
            var local = new BMap.LocalSearch(this.map, options); //创建LocalSearch构造函数
            local.search(str); //调用search方法,根据检索词str发起检索
            console.log(str);
        },
        handleSelect(item) {
            let that = this
            that.value = item.address +'-' +item.title; //记录详细地址,含建筑物名
            that.circleCenter = { //记录当前选中地址坐标
                lng: item.point.lng,
                lat: item.point.lat,
            };
            that.map.clearOverlays(); //清除地图上所有覆盖物
            const marks = new BMap.Marker(item.point); //根据所选坐标重新创建Marker
            that.map.addOverlay(marks); //将覆盖物重新添加到地图中
            that.map.panTo(item.point); //将地图的中心点更改为选定坐标点
            const circle = new BMap.Circle(that.circleCenter,that.scope,that.circleStyle);
            that.map.addOverlay(circle);
        },
        subMit(){
            const obj = { ...this.circleCenter,value:this.value }
            this.$alert(obj)
            this.$emit('gainLocation',obj)
        }
    }
}
</script>

<style scoped>
.map {
    margin-top: 20px;
    width: 100%;
    height: 300px;
}

.flexs {
   display: flex;
   align-items: center;
   width: 100%;
    border-bottom: 1px solid #f5f5f5;
}
.flcol{
    display: flex;
    flex-direction: column;
}
</style>

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

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

相关文章

Qt控件---容器类

文章目录 QGroupBox&#xff08;有标题的分组框&#xff09;QTabWidget&#xff08;带有标签页控件&#xff09; QGroupBox&#xff08;有标题的分组框&#xff09; 属性说明title分组框的标题alignment分组框内部内容的对齐方式flat是否为 扁平 模式checkable是否可选&#x…

僵尸进程和孤儿进程

目录 引言僵尸进程僵尸进程的状态僵尸进程周边知识 孤儿进程孤儿进程的状态 进程中的其他状态①.R---表示进程运行状态。②.S---表示进程的休眠状态。(进程什么都没做)③T 和 t 进程的运行、阻塞和挂起运行阻塞挂起状态&#xff1a; 引言 今天我们来将僵尸进程和孤儿进程以及其…

两数之和-第12届蓝桥杯选拔赛Python真题精选

[导读]&#xff1a;超平老师的Scratch蓝桥杯真题解读系列在推出之后&#xff0c;受到了广大老师和家长的好评&#xff0c;非常感谢各位的认可和厚爱。作为回馈&#xff0c;超平老师计划推出《Python蓝桥杯真题解析100讲》&#xff0c;这是解读系列的第51讲。 两数之和&#xf…

深入解析API技术:原理、实现与应用

在现代软件开发中&#xff0c;API&#xff08;应用程序接口&#xff09;扮演着至关重要的角色。API 允许不同的软件应用程序和系统之间进行通信和数据交换&#xff0c;从而构建出更加高效、灵活和可扩展的软件解决方案。本文将深入解析API技术的原理、实现方法&#xff0c;并附…

FANUC机器人通过ROBOGUIDE实现与实际的机器人进行程序导入导出的具体方法示例

FANUC机器人通过ROBOGUIDE实现与实际的机器人进行程序导入导出的具体方法示例 如下图所示,在电脑的开始菜单中找到”Robot Neiborhood”,点击进入, 如下图所示,设置要连接的机器人名称和主机IP地址(要确保自己的电脑和机器人IP地址在同一网段内),点击Add添加, 添加在线…

TCP 三次握手与四次挥手面试题(计算机网络)

TCP 基本认识 TCP 头格式有哪些&#xff1f; 序列号&#xff1a;在建立连接时由计算机生成的随机数作为其初始值&#xff0c;通过 SYN 包传给接收端主机&#xff0c;每发送一次数据&#xff0c;就「累加」一次该「数据字节数」的大小。用来解决网络包乱序问题。 确认应答号&a…

成都百洲文化传媒有限公司电商领域的新锐力量

在电商服务领域&#xff0c;成都百洲文化传媒有限公司凭借其专业的服务理念和创新的策略&#xff0c;正逐渐成为行业内的翘楚。这家公司不仅拥有资深的电商团队&#xff0c;还以其精准的市场定位和高效的服务模式&#xff0c;赢得了众多客户的信赖和好评。 一、专业团队&#…

基于 FPGA 的 DE1-SoC 功率估算器

Introduction 功耗是当今许多技术都要考虑的重要因素。例如&#xff0c;手机生产商总是谈论他们在电源管理方面的改进&#xff0c;以及如何延长电池的使用寿命。功能与功耗之间的平衡是许多人都在研究的有趣课题。然而&#xff0c;当我们做实验时&#xff0c;我们很少会考虑我…

centos7上docker搭建vulhub靶场

1 vulhub靶场概述 VulHub是一个在线靶场平台&#xff0c;提供了丰富的漏洞环境供安全爱好者学习和实践。 该平台主要面向网络安全初学者和进阶者&#xff0c;通过模拟真实的漏洞环境&#xff0c;帮助用户深入了解漏洞的成因、利用方式以及防范措施。 此外&#xff0c;VulHub还…

信号完整性的常见术语概念(面试常用)

目录 术语 概念一览 1&#xff0e;信号完整性&#xff08;Signal Integrity&#xff09; 2&#xff0e;传输线&#xff08;Transmission Line&#xff09; 3&#xff0e;特性阻抗&#xff08;Characteristic Impedance&#xff09; 4&#xff0e;反射&#xff08;Reflecti…

Stable Video Diffusion(SV3D)安装和测试(windows10)

SVD 安装教程 1.安装miniconda https://docs.anaconda.com/free/miniconda/index.html 2.创建python环境 conda create --name sv3d python3.10conda activate sv3d3.安装triton2.0.0 下载地址&#xff1a;https://huggingface.co/r4ziel/xformers_pre_built/resolve/mai…

AndroidAutomotive模块介绍(一)整体介绍

前言 Android Automotive 是一个基本 Android 平台&#xff0c;可运行 IVI 系统中预安装的 Android 应用以及可选的第二方和第三方 Android 应用。 本系列文档将会系统的介绍 Android Automotive 的功能、架构、逻辑等。模块逻辑将从 应用api接口、系统服务、底层服务&#x…

Arduino _按键点亮——led

int8_t led_pin13;int8_t led2_pin12; void setup() {// put your setup code here, to run once:pinMode(led_pin, INPUT);//输入pinMode(led2_pin, OUTPUT);//输出 }void loop() {// put your main code here, to run repeatedly:if(digitalRead(led_pin)1){//digitalRead(…

校园通用型发生网络安全事件解决方案

已知校园多教学楼、多教学机房、非标网络机房缺乏防护设备、检测设备、安全保护软件(杀软) 切断所有外网&#xff0c;断网处理!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 部署路由系统可选择爱快、routeros、openwrt。等。可将日志上传到日志分析系统。《这项非必要的》 部署开源防火…

弱口令入侵FE企业管理平台【附口令】

漏洞描述 飞企互联-FE企业运营管理平台 druid路径弱口令&#xff0c;攻击者可能通过尝试弱口令&#xff0c;非法进入系统&#xff0c;恶意操作或者收集信息进一步攻击利用。 漏洞复现 1、Fofa app"飞企互联-FE企业运营管理平台"2、零零信安 (html_banner360浏览…

使用Docker Registry-v2搭建镜像仓库详细教程

我们使用docker来部署私有化镜像仓库… 1、下载 registry:v2 镜像 docker pull registry:22、在私有仓库所在的主机目录新建一个文件夹&#xff0c;用于持久化保存仓库中的镜像 mkdir -p /opt/registry3、启动registry镜像 使用docker镜像启动私有仓库容器服务&#xff0c;…

突破编程_前端_SVG(circle 圆形)

1 circle 元素的基本属性和用法 SVG 的 <circle> 元素用于在SVG文档中绘制圆形。它具有几个基本属性&#xff0c;允许定义圆形的大小、位置、填充颜色和边框样式。以下是 <circle> 元素的基本属性及其详细解释&#xff1a; 1.1 cx 和 cy 描述&#xff1a;这两个…

嵌入式|蓝桥杯STM32G431(HAL库开发)——CT117E学习笔记13:RTC实时时钟

系列文章目录 嵌入式|蓝桥杯STM32G431&#xff08;HAL库开发&#xff09;——CT117E学习笔记01&#xff1a;赛事介绍与硬件平台 嵌入式|蓝桥杯STM32G431&#xff08;HAL库开发&#xff09;——CT117E学习笔记02&#xff1a;开发环境安装 嵌入式|蓝桥杯STM32G431&#xff08;…

用Python编写GUI程序将JPEG文件按文件名顺序插入PDF文件

在Python编程中&#xff0c;处理文件和图像是常见的任务之一。最近&#xff0c;我遇到了一个有趣的问题&#xff1a;如何通过编写一个GUI程序来将一个文件夹中的JPEG文件按文件名顺序插入到一个新的PDF文件中&#xff1f;在这篇博客中&#xff0c;我将分享我使用Python、wxPyth…