Vue百度地图实现定位和marker拖拽监听功能

目录
  • 一、完成地图步骤
    • 1、在index.html引入百度地图
    • 2、创建地图容器,容器一定要设置宽高
    • 3、创建地图实例
  • 二、百度地图踩过的一些坑
    • 1、'BMap' is not defined报错
    • 2、标注没有出现在地图中间而是左上角
    • 3、定位不准确

效果图:拖拽前和拖拽后

一、完成地图步骤

百度地图文档地址:地图 JS API | 百度地图API SDK

1、在index.html引入百度地图

<script type="text/javascript" src="https://api.map.baidu.com/api?v=3.0&ak=你的密钥"></script>

2、创建地图容器,容器一定要设置宽高

<template>
  <div class='loction'>
    <div>位置信息:{{locationMsg}}</div>
    <!-- 地图容器 -->
    <div id="allmap"></div>
  </div>
</template>

<style>
.loction{
  width: 300px;
  height: 300px;
}
#allmap{
  width: 300px;
  height: 300px;
}
</style>

3、创建地图实例

      const map = new window.BMap.Map('allmap') // 创建Map实例

      // 开启SDK辅助定位获取当前位置信息
      const getLocation = new window.BMap.Geolocation()
      getLocation.enableSDKLocation()
      getLocation.getCurrentPosition((position) => {  // position中是获取到的定位相关数据

        // 获取城市和省
        const city = position.address.city
        const province = position.address.province
        // 获取经度和纬度
        const latitude = position.latitude
        const longitude = position.longitude
        this.locationMsg = province + city

        const point = new window.BMap.Point(position.point) // 设置中心点坐标
        map.centerAndZoom(point, 15)     // 地图初始化,同时设置地图展示级别为15
        const marker= new window.BMap.Marker(position.point) // 创建标注
        map.addOverlay(marker) // 将标注添加到地图中
        map.panTo(position.point, 15)  //让指定位置移动到地图中心

        // 开启marker拖拽并监听拖拽后的位置信息
        marker.enableDragging() // 可拖拽标注
        const _this = this
        marker.addEventListener('dragend', function (e) {
          // alert('当前位置:' + e.point.lng + ', ' + e.point.lat)
          const nowPoint = marker.getPosition() // 拖拽完成之后坐标的经纬度
          console.log(nowPoint, '拖拽后的经纬度')
          map.centerAndZoom(nowPoint, 15)

          // 用所定位的经纬度查找所在地省市街道等信息
          const gc = new window.BMap.Geocoder()
          gc.getLocation(nowPoint, function (rs) {
            console.log(rs, '拖拽后的位置')
            _this.locationMsg = rs.address
          })
        })
      }, () => {
        this.locationMsg = '定位失败!'
      }, { provider: 'baidu' })

二、百度地图踩过的一些坑

1、'BMap' is not defined报错

这个是和引入地图有关,官方文档的写法是var map = new BMapGL.Map('container')。如果是在index.html中引入的js文件,那么需要写成var map = new window.BMapGL.Map('container');

2、标注没有出现在地图中间而是左上角

是因为再次让地图显示时,地图已经显示了,但标注还没创建好,用一个setTimeout包裹一下就好了。

setTimeout(() => {

    map.panTo(this.newPosition, 16)

},200)

3、定位不准确

使用sdk辅助定位是相对来说比较准确的,开发时只能在电脑上测试,电脑没有gps定位,所以有偏差很正常,打包上线后用手机测试就会很准确了。

这是我入职前端遇到的第一个项目需求,从啥也不会到完成,经历了好几天,出现过各种bug,然后又非常害怕被老板开除。整个过程充满焦虑,紧张和不安,到完成终于可以松一口气了。所以记录一下。

到此这篇关于Vue百度地图实现定位和marker拖拽监听的文章就介绍到这了,更多相关Vue百度地图定位内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • vue百度地图 + 定位的详解

    vue 百度地图 + 定位 前提需要自己有百度的密钥,如没有可以去百度地图申请 一.在主目录下的index.html引入js,例如:   二.在webpack.base.conf.js配置文件中配置BMap,在module.exports 中与entry平级,例如: 三.在项目中引入BMap: 四.代码: <template> <div class="home"> <div id="allmap" class="allmap&

  • vue 百度地图(vue-baidu-map)绘制方向箭头折线实例代码详解

    在开发过程中发现 vue-baidu-map 封装的 BmPolyline 折线组件不能顺利绘制出带箭头的纹理. 原因是 BmPolyline 文档中虽然有 icons 属性,但是对应的源文件中并没有props接收 icons 最初的开发思路: 根据 vue-baidu-map 折线组件的官方文档,在vue中通过Prop,为 BmPolyline 组件传递一个 icons 数组,数组的元素必须为 IconSequence 类的实例对象. 而 IconSequence 类的实例对象则是在 Baid

  • vue用BMap百度地图实现即时搜索功能

    本文实例为大家分享了vue用BMap百度地图实现即时搜索功能的具体代码,供大家参考,具体内容如下 功能如下: 搜索框搜索---自动下拉---点击数据---数据显示在搜索框里---点击新增--数据显示在下方--点击删除--删除当前 代码: 首先去百度开发者申请一个key 然后将key引入到项目的 index.html: <script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak

  • vue中百度地图定位及附近搜索功能使用步骤

    目录 1.地图初始化相关 2.获取当前定位 3.根据当前定位地址附近搜索建议 1.地图初始化相关 文档:lbs.baidu.com/index.php?t… 申请账号 => 创建应用 => 生成key值 => 引入百度地图,替换key值 在出口html(public/html)文件下引入标签 <script type="text/javascript" src="https://api.map.baidu.com/api?v=1.0&&

  • Vue使用百度地图实现城市定位

    本文实例为大家分享了Vue使用百度地图实现城市定位的具体代码,供大家参考,具体内容如下 Vue项目运行环境:Vue 2.0,Vue Cli 3.0 步骤一:登录 百度地图开放平台 在 控制台---->应用管理---->我的应用 下面创建一个应用. 目的是获取 ak 步骤二:在public文件夹的index.html文件中 导入百度地图,拼上你的ak 步骤三:在项目的根目录中创建vue.config.js文件 如果有vue.config.js文件的话,直接添加以下代码即可. vue.config

  • vue全局接入百度地图的实现示例

    目录 前言 一.获取ak密钥 二.整合步骤 总结 前言 本文主要教大家如何把百度地图整合到我们的vue项目中 一.获取ak密钥 1.登录网址 https://lbsyun.baidu.com/ 注册百度地图开放平台账号,填写认证信息,并且创建应用 创建完应用后可以在类似界面获取到我们的AK密钥 注意:IP白名单要合理配置 我这里为了方便测试才设置的0.0.0.0/0 二.整合步骤 获取到ak密钥之后就可以与我们的VUE项目进行整合 1.npm下载包 代码如下(示例): npm install -

  • Vue项目引用百度地图并实现搜索定位等功能(案例分析)

    目录 一.效果图及功能点 二.前期准备 三.引入百度地图 四.功能解析 本文给大家介绍如何在vue项目中引用百度地图,并设计实现简单的地图定位.地址搜索功能. Tip:本篇文章为案例分析,技术点较多,所以篇幅较长,认真阅览的你一定会学到很多知识. 前言:百度地图开放平台 给开发者们提供了丰富的地图功能与服务,使我们的项目中可以轻松地实现地图定位.地址搜索.路线导航等功能.本文给大家介绍如何在vue项目中引用百度地图,并设计实现简单的地图定位.地址搜索功能. 一.效果图及功能点 先来看一下效果图

  • vue整合百度地图显示指定地点信息

    目录 一.安装相关依赖 二.在main.js中引用 三.创建地图工具 map.js 四.绘制地图 先看看效果图 一.安装相关依赖 npm i --save vue-baidu-map 二.在main.js中引用 import BaiduMap from "vue-baidu-map" Vue.use(BaiduMap,{   ak: '你的密钥(百度地图开放API官网可免费申请)' }) 三.创建地图工具 map.js export function MP(ak) {       re

  • Vue百度地图实现定位和marker拖拽监听功能

    目录 一.完成地图步骤 1.在index.html引入百度地图 2.创建地图容器,容器一定要设置宽高 3.创建地图实例 二.百度地图踩过的一些坑 1.'BMap' is not defined报错 2.标注没有出现在地图中间而是左上角 3.定位不准确 效果图:拖拽前和拖拽后 一.完成地图步骤 百度地图文档地址:地图 JS API | 百度地图API SDK 1.在index.html引入百度地图 <script type="text/javascript" src="h

  • 使用konva和vue-konva库实现拖拽滑块验证功能

    1. 在vue项目中安装konva和vue-konva库 npm install konva vue-konva --save-dev 2. 引入vue-konva库 import VueKonva from 'vue-konva': Vue.use(VueKonva) 3. 创建单独的滑块验证组件 Captcha.vue,在相应的页面中引入使用即可 <template> <v-stage :config="Config.stage"> <v-layer

  • Android 仿微信发动态九宫格拖拽、删除功能

    1.完美1比1 仿照微信仿微信发动态 九宫格拖拽.删除 暴力拖拽ui有点问题,不影响使用,资源文件自己找个+号 2.微信发动态拖拽bug 当选择完图片,长按图片拖拽过程中按下屏幕home键盘,再次进入这时候就不能点击输入文字,点击输入文字的时候会触发选择相册事件 3.拖拽事件用的basequickadapter implementation 'com.android.support:recyclerview-v7:28.0.0' implementation "com.github.CymCha

  • vue基于Echarts的拖拽数据可视化功能实现

    背景 我司产品提出了一个需求,做一个数据基于Echars的可拖拽缩放的数据可视化,上网百度了一番,结果出现了两种结局,一种花钱买成熟产品(公司不出钱),一种没有成熟代码,只能自己写了,故事即将开始,敬请期待.......  不,还是先上一张效果图吧,请看...... 前期知识点 1. offset(偏移量) 定义:当前元素在屏幕上占用的空间,如下图: 其中: offsetHeight: 该元素在垂直方向上的占用的空间,单位为px,不包括margin. offsetWidth:该元素在水平方向上的

  • vue实现列表拖拽排序的功能

    在日常开发中,特别是管理端,经常会遇到要实现拖拽排序的效果:这里提供一种简单的实现方案. 此例子基于vuecli3 首先,我们先了解一下js原生拖动事件: 在拖动目标上触发事件 (源元素): ondragstart - 用户开始拖动元素时触发 ondrag - 元素正在拖动时触发 ondragend - 用户完成元素拖动后触发 释放目标时触发的事件: ondragenter - 当被鼠标拖动的对象进入其容器范围内时触发此事件 ondragover - 当某被拖动的对象在另一对象容器范围内拖动时触

  • Vue Element Sortablejs实现表格列的拖拽案例详解

    1. css:    dragTable.css @charset "UTF-8"; .w-table{ height: 100%; width: 100%; float: left; } /* 拖动过程中,鼠标显示样式 */ .w-table_moving .el-table th .thead-cell{ cursor: move !important; } .w-table_moving .el-table__fixed{ cursor: not-allowed; } .w-ta

  • vue项目中实现el-dialog组件可拖拽效果

    目录 0. 首先上图,看效果 1. 实现方法 参考资料 0. 首先上图,看效果 1. 实现方法 第一步:创建 drag.js文件 实现拖拽源码 /**  * 拖拽移动  * @param  {elementObjct} bar 鼠标点击控制拖拽的元素  * @param {elementObjct}  target 移动的元素  * @param {function}  callback 移动后的回调  */ export function startDrag(bar, target, call

  • 利用vue组件实现图片的拖拽和缩放功能

    目录 前言 如图所示: 方法如下: 总结 前言 vue实现一个组件其实很简单但是要写出一个好的可复用的组件那就需要多学习和钻研一下,一个好的组件必须有其必不可少的有优点:一是能提高应用开发效率.测试性.复用性等:二是组件应该是高内聚.低耦合的:三是组件应遵循单向数据流的原则. 在实现我的图片的拖拽组件我们的搞清其原理,在这里我使用的是mousedown,mousemove和mouseup来实现拖拽. 如图所示: 方法如下: 1.新建ElementDrag.vue文件内容如下: <template

随机推荐