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

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>

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

c++ 中文转拼音的封装, char 类型 不支持 中文 已解决

在日常业务中&#xff0c;需要进行中文转拼音的检索。已便实现对应的 模糊搜索。 使用方法 std::string res "我是中国人";char* result new char[res.length() 1];for (int i 0; i < res.length(); i){result[i] res[i];}result[res.length()] \0;std::str…

【C++类和对象】上篇

&#x1f49e;&#x1f49e; 前言 hello hello~ &#xff0c;这里是大耳朵土土垚~&#x1f496;&#x1f496; &#xff0c;欢迎大家点赞&#x1f973;&#x1f973;关注&#x1f4a5;&#x1f4a5;收藏&#x1f339;&#x1f339;&#x1f339; &#x1f4a5;个人主页&#x…

Xilinx Zynq UltraScale+ MPSoC无人机控制器

官方术语是无人驾驶飞行器&#xff08;UAV&#xff09;&#xff0c;这显然有点拗口&#xff0c;所以我们更喜欢说无人机。在过去的几十年里&#xff0c;无人机技术有了巨大的进步。我们为一个客户开发了一个无人机的飞行和视频控制器。 客户挑战 客户需要一种混合FPGA/CPU硬件&…

idea keymap用eclipse的相关快捷键

idea快捷键用eclipse的方式 CtrlShiftR 搜索文件 shiftshift 全部文件/类搜索 CtrlH 全局搜索 CtrlO 快速打开Outline大纲视图 ctrle 查看recent窗口文件 ctrlt 快速进入接口的实现类 ctrlshiftf 格式化代码 altshiftr 变量或函数的重命名 ctrlshifto 移除无用的头文…

MySQL基础知识——MySQL日志

一条查询语句的执行过程一般是经过连接器、 分析器、 优化器、 执行器等功能模块&#xff0c; 最后到达存储引擎。 那么&#xff0c; 一条更新语句的执行流程又是怎样的呢&#xff1f; 下面我们从一个表的一条更新语句进行具体介绍&#xff1a; 假设这个表有一个主键ID和一个…

MySQL:MySQL的查询(上)

文章目录 MySQL的增加单行数据插入多行数据插入插入否则更新替换 MySQL的查询select列where语句 本篇开始总结的是MySQL当中的基本查询语句 对于数据库的查询&#xff0c;无非大致就是增删查改&#xff0c;因此对于这些内容进行一一解释&#xff1a; MySQL的增加 单行数据插…

Redis中的集群(九)

集群 消息 集群中的各个节点通过发送和接收消息(message)来进行通信&#xff0c;我们称发送消息的节点为发送者(sender),接收消息 的节点成为接收者&#xff0c;如图所示。节点发送的消息主要有以下五种: 1.MEET消息:当发送者接到客户端发送的CLUSTER MEET命令时&#xff0c…

二叉树练习day.8

235.二叉搜索树的最近公共祖先 链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 题目描述&#xff1a; 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为&#xff1a;“对于有根树 T 的两个节点 p、q&#xff0c;最近公共…

一起找bug之购物

如果不是购物车满了&#xff0c;大概都不会发现这个 bug 淘宝 APP 修复了购物车满的情况下&#xff0c;往里面添加新商品时&#xff0c;会把一个老商品移入收藏夹&#xff0c; 但是如果这个老商品是已失效状态&#xff0c;就无法自动移入收藏夹&#xff0c;而且会一直在购物车…

AI禁区徘徊监测识别摄像机

AI禁区徘徊监测识别摄像机是一种基于人工智能技术的智能监控设备&#xff0c;用于监测禁止进入或逗留的区域。这种摄像机通过高清摄像头实时捕捉场景图像&#xff0c;利用AI算法对人员徘徊行为进行识别和监测&#xff0c;有助于提高安全防范水平&#xff0c;减少潜在的安全风险…

【DL水记】循环神经网络RNN的前世今生,Transformer的崛起,Mamba模型

文章目录 RNN网络简介传统RNN网络结构RNN的分类 长-短期记忆网络 (LSTM)GRU网络横空出世的Transformer网络Self-AttentionVisionTransformer Mamba模型Reference: RNN网络简介 “当人类接触新事物时&#xff0c;他们不会从头开始思考。就像你在阅读这篇文章时&#xff0c;你会根…

基于springboot仿雀语的文档管理系统

项目介绍 本项目借鉴了雀语的一些UI设计&#xff0c;实现了文档在线管理的功能&#xff0c;知识库可以对不同分类的文档建立不同的库&#xff0c;知识库里面左边可以维护菜单菜单目录&#xff0c;右边实现在线预览。该项目可以防止用户下载和复制文档&#xff0c;只支持在线预…

Excel从零基础到高手【办公】

第1课 - 快速制作目录【上篇】第1课 - 快速制作目录【下篇】第2课 - 快速定位到工作表的天涯海角第3课 - 如何最大化显示工作表的界面第4课 - 给你的表格做个瘦身第5课 - 快速定位目标区域所在位置第6课 - 快速批量填充序号第7课 - 按自定义的序列排序第8课 - 快速删除空白行第…

接招吧! selenium环境+元素定位大法

selenium 与 webdriver Selenium 是一个用于 Web 测试的工具&#xff0c;测试运行在浏览器中&#xff0c;就像真正的用户在手工操作一样。支持所有主流浏览器 WebDriver 就是对浏览器提供的原生API进行封装&#xff0c;使其成为一套更加面向对象的Selenium WebDriver API。 …

UltraScale 架构 SelectIO 资源之IODELAY与IOSERDES仿真与使用

平台&#xff1a;vivado2018.3 具体内容见ug571-ultrascale-selectio IDELAYE3 在调试超高速信号的时候&#xff0c;需要使用iodelayiserdes来调试校准输入信号。例如外部某ADC采样率为5GHZ&#xff0c;外部ADC使用2.5GHZ的时钟去采集输入信号。为了实现采集&#xff0c;adc芯…

普乐蛙VR航天体验馆设备VR太空飞船VR元宇宙展厅

三天小长假就要来啦&#xff01;五一假期也即将到来。老板们想捉住人流量这个财富密码吗&#xff1f;那快快行动起来&#xff01;开启VR体验项目&#xff0c;假期赚翻天&#xff01;小编亲测&#xff01;&#xff01;这款设备刺激好玩&#xff0c;想必会吸引各位家长小孩、学生…

Normalization

Norm介绍 归一化层&#xff0c;目前主要有这几个方法&#xff0c;Batch Normalization&#xff08;2015年&#xff09;、Layer Normalization&#xff08;2016年&#xff09;、Instance Normalization&#xff08;2017年&#xff09;、Group Normalization&#xff08;2018年&…

【研发日记】CANoe自动化测试的配置方式(三)——SystemVariables数组方式

文章目录 前言 一、例程功能 二、仿真ECU 三、SystemVariables数组&#xff1a; 四、测试模块 五、测试运行效果 六、分析和应用 总结 前言 近期在做的一个自动化测试项目&#xff0c;尝试了一种以前没用过的测试配置方式&#xff0c;感觉效果还不错。然后又回顾了一下以…

php其他反序列化知识学习

简单总结一下最近学习的&#xff0c;php其他的一些反序列化知识 phar soap session 其他 __wakeup绕过gc绕过异常非公有属性&#xff0c;类名大小写不敏感正则匹配&#xff0c;十六进制绕过关键字检测原生类的利用 phar 基础知识 在 之前学习的反序列化利用中&#xff0…

Golang | Leetcode Golang题解之第19题删除链表的倒数第N个结点

题目&#xff1a; 题解&#xff1a; func removeNthFromEnd(head *ListNode, n int) *ListNode {dummy : &ListNode{0, head}first, second : head, dummyfor i : 0; i < n; i {first first.Next}for ; first ! nil; first first.Next {second second.Next}second.N…