vue中实现百度地图拖拽地图定位功能

效果如果所示,拖动地图。中间图标不动,并且自动获取地图当前中心点的经纬度。然后就可以用经纬度做其他的操作了。。。首先查看了百度地图的api。能实现这个功能最贴近的就是marker。marker可以拖拽,但是地图却动不了,我还用了另外一种是自己自定义一个marker。并且让marker相对地图位置绝对定位,地图拖拽,marker不动,拖拽结束后使用marker.getposition来获取当前位置,但是有个问题。自定义的marker在地图拖动的时候就看不见了。。应该是层级问题。让地图给挡住了。。太丑了。没办法。最后我选择第三种方案:

使用一个control来模拟,我们知道control类可以固定在地图上不动。而且一直在地图最上层,这就很棒了。我的思路是用一个自定义的control来模拟中间的固定图标,然后通过地图的获取位置方法每次结束拖动后来获取位置。

自定义control代码如下:

//这部分是我提取的一个control的公用函数

function BaseControl(offset) {
/* // 设置默认停靠位置和偏移量
this.defaultAnchor = {left:pos.left,top:pos.top};*/
this.defaultAnchor = BMAP_ANCHOR_TOP_RIGHT;
this.defaultOffset = new BMap.Size(offset.left, offset.top);
}
// 通过JavaScript的prototype属性继承于BMap.Control
BaseControl.prototype = new BMap.Control();
//创建一个基础的控件样式
function baseBtnContent() {
var div = document.createElement("div");
// 添加文字说明
var size = "2.215rem";
div.style.width = size;
div.style.height = size;
div.style.background = "no-repeat center/cover";
return div;
}


//这个是中间的固定control,我让他的背景图变成第一张图片的定位图标的样子。function centerFixedControl(map,pos){
    BaseControl.call(this,pos);
    this.map=map;
  }
  centerFixedControl.prototype = new BMap.Control();

  centerFixedControl.prototype.initialize = function() {
    var div = baseBtnContent();
    div.style.width="19px";
    div.style.height="27px";
    div.style.backgroundImage = "url(../static/images/wechatgroup/dw.png)";
    var _this=this;
    // 添加DOM元素到地图中
    this.map.getContainer().appendChild(div);
    // 将DOM元素返回
    return div;
  }

function cfc(map,pos){
      var control=new centerFixedControl(map,pos);
     map.addControl(control);
     return this;
    }

  然后就是把当前的控件加载到地图中

control().cfc(map,{left:172,top:117});/control.是import导入进来的整个createMapControl方法/

  接下来就是在地图的拖拽事件里面获取当前的位置

this.map.addEventListener("dragend",(e)=>{
      var pos=this.map.getCenter();
      this.searchAround(pos);
 },false);

 使用map.getCenter可以和marker.getposition同样的效果,即得到一个经纬度,getCenter获取的是地图的中心点的经纬度,

然后就可以做很多,比如搜索附近

//搜索附近方法
   searchAround(point){
   	//搜索到附近的标志建筑之后进行排序,然后显示出来
   	 this.loadSth=true;
   	 let _this=this;
     var localSearch=new BMap.LocalSearch(point,{
     	 onSearchComplete:(r)=>{
     	 /* var f=localSearch.getStatus();*/
           var resArr=[];
           for(var i=0,len=r.length;i<len;i++){
           	 if(r[i].vr.length>0){
               resArr=resArr.concat(r[i].vr);
           	 }
           }
          _this.addressArr=resArr;
          _this.loadSth=false;
     	}
     });
     localSearch.setPageCapacity(10);
     localSearch.searchNearby(["商场","写字楼","公交站","地铁站","银行","酒店"],point,1000);
   },

  ok。。结束

时间: 2024-07-30 12:28:52

vue中实现百度地图拖拽地图定位功能的相关文章

android五子棋游戏、资讯阅读、大学课程表、地图拖拽检测、小说搜索阅读app等源码

Android精选源码 Android 自动生成添加控件 android旋转动画.圆形进度条组合效果源码 一款很强的手机五子棋app源码 android地图拖拽区域检测效果源码 实现Android大学课表效果APP源码 android完全免费的小说搜索阅读app 一个互联网资讯阅读平台和良好的阅读体验的App Android优质博客 Android中高效的显示图片Bitmap的内存模型 相对于文字来说,图片的表达更直接.更有冲击力.更容易吸引用户的眼球.设计师们也理所当然的喜欢用图片来传达信息.

C#中实现控件拖拽效果(How to DragDrop Control in C#)

当产品间需要交互实现数据传递,或产品需要从外部导入文件时,通过控件拖拽来实现是个不错的选择.在UI上支持控件拖拽,可极大提升用户体验.拖拽本身并不神秘,它的本质实际是一个数据交换的过程.控件接受从其他地方来的数据,并进行处理.数据交换有多种方法,Windows中剪贴板可能就是用的最多,但最不被注意的一种方法.下面介绍用C#实现控件拖拽,并通过剪切板交换数据. 对于拖拽的对象,需要在MouseDown或ItemDrag中调用DoDragDrop,传递要拖拽的数据对象并触发拖拽.总的来说,当用户调用

鼠标拖拽多选功能

<!DOCTYPE html><html><head> <meta charset="UTF-8"> <title>鼠标拖拽多选功能</title> <script src="https://cdn.bootcss.com/jquery/1.10.2/jquery.min.js"></script> <style type="text/css"&

js实现鼠标拖拽多选功能

最近做了一个用js实现鼠标拖拽多选的功能,于是整理了一下思路,写了一个小demo:遮罩出现:被遮罩盖住的,即为选中的块(背景色为粉色)下面是具体代码,注释已在文中,与大家交流. <!DOCTYPE html> <html> <head> <title>鼠标拖拽多选功能</title> <script src="https://cdn.bootcss.com/jquery/1.10.2/jquery.min.js">

vue中引入百度地图

xxx.vue <template> <div> <el-input v-model="inputaddr"> </el-input> <el-button @click="mapCpm">点击</el-button> <el-dialog :modal-append-to-body="false" :title="textMap[dialogStatus]&

js仿百度地图拖拽、缩放、添加图层功能(原创)

最近项目中完成的需求,仿百度地图中的功能: 要求:1.底层图可以拖拽.缩放.     2.拖拽一个图标,在底层图上对应位置添加一个标注点,该标注点位置要随底层图移动. 3.添加的标注点,可以拖动,删除. 主要知识点和难点就是各个浏览器的点击.拖拽.缩放事件兼容性,对js运动属性.运动偏移位置的了解,以及js面向对象的应用. 这里跟大家分享一下完成后的代码. html代码主要知识点就是运动元素和底层元素的相对绝对定位,css代码不再贴出: <div id="warp" style=

Vue中使用百度地图——根据输入框输入的内容,获取详细地址

知识点:在Vue.js项目中调用百度地图API,实现input框,输入地址,在百度地图上定位到准确地址,获得到经纬度 参考博客:  百度地图的引用,初步了解参考博客:http://blog.csdn.net/docallen/article/details/70877925 详细功能修改参考博客: https://www.cnblogs.com/NearTheSea/p/6808093.html 效果图:在input输入框中,输入要查询的地址,搜索出相关的名字 选中详细地址,地图定位到详细地址

vue中实现百度地图

1.项目根目录下下载百度地图插件 npm install vue-baidu-map –save 2.在首页index.html中引入百度地图: <script type="text/javascript" src="//api.map.baidu.com/api?v=2.0&ak=秘钥"></script> 我申请的密钥为  :3bVHdeo2ZZaZO4QczC63d0kMsbA55ZSD 3.在显示地图的组件中 template

vue中使用echarts来绘制中国地图,NuxtJS制作疫情地图,内有详细注释,我就懒得解释了,vue cli制作疫情地图 代码略有不同哦~~~

我的代码自我感觉----注释一向十分详细,就不用过多解释都是什么了~~ 因为最近疫情期间在家实在是没事干,想找点事,就练手了个小demo 首先上 NuxtJs版本代码,这里面 export default { mode: 'universal', /* ** Headers of the page */ head: { title: process.env.npm_package_name || '', meta: [ { charset: 'utf-8' }, { name: 'viewpor