效果如果所示,拖动地图。中间图标不动,并且自动获取地图当前中心点的经纬度。然后就可以用经纬度做其他的操作了。。。首先查看了百度地图的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。。结束

转载于:https://www.cnblogs.com/yuweia/p/7941245.html

Logo

前往低代码交流专区

更多推荐