结合地图覆盖物展示和打点展示百度地图的使用

使用前的基础步骤

流程示意图:

百度基础流程图.png

(1)获取Ak

获取ak示意图.png

一个百度账号可以创建多个ak,创建ak时得在应用类型中进行设置,此处我们已PC端进行展示选择了浏览器端。
(2)引入百度地图API
如同示意图,以标签形式引入,路径ak设置为申请的AK
(3)创建一个百度地图及初始化

  var map = new BMap.Map("container");|
  // 创建地图实例, ‘container’为承载地图的dom的ID
  var point = new BMap.Point(116.404, 39.915);
  // 创建点坐标 (当前是北京的坐标)
  map.centerAndZoom(point, 15);
  // 初始化地图,设置中心点坐标和地图级别 

当创建map实例后获取的是一个百度地图核心对像,该对象定义了百度地图的基本属性(如层级,拖拽,缩放,以及地图样式等)以及可以监听百度地图的一系列事件。
以上完成后将得到一下页面


maptest.png

百度地图的Dom展示和打点

设置Dom的展示

通过打印百度地图的大对象我们可以获取里面的众多类


baidumapclass.png

在参与的项目中我们需要完成以下效果


展示效果.png

所以我们使用了百度地图的Overlay(覆盖物类)中的Label(文本标注类),该类可以识别输入的dom元素,方便我们自定义地图展示的覆盖物的样式。
var map = new BMapGL.Map('allmap');
    var point = new BMapGL.Point(116.404, 39.915);
    map.centerAndZoom(point, 15);
    var label = new BMapGL.Label();  // 使用label
    label.setPosition(point)    //设置label展示的经纬度区域
    label.setContent(            //设置label的展示内容
      '

自定义label

' ); label.setStyle({ //设置label的展示样式 color:'red' }); map.addOverlay(label);

得到效果


展示效果2.png

使用方法与上述的核心对象一样都是获取一个实例,覆盖物类中的文本标注类的其他方法在使用文档中的描述为:


Label的其他方法.png

以上我们只是简单的展示了Label中的两种方法的使用,其他方法的使用应也和这个两种方法类似。

监听地图的打点事件

上述叙述到在百度地图的核心对象上可以监听一系列地图的事件,开发文档上我们可以监听到的地图事件有这些:


地图核心对象可监听事件.png

使用方式和给Dom对象添加事件监听一致,下列我们使用百度地图监听点击事件来获取点击区域的的经纬度

var map = new BMapGL.Map('container');
map.centerAndZoom(new BMapGL.Point(116.404, 39.928), 15);
map.addEventListener('click', function (e) {
    console.log(e);
});

得到以下信息


点击地图后回调所获取的信息.png

通过获取的经纬度,我们可以通过该经纬度添加一个覆盖物,达到地图打点的效果。
通过以上两个案例,我们熟悉了怎么对照百度地图开发文档来开发我们需求的效果。

结合项目实现封装和复用

我们获取百度的众多对象是以获取构造函数实例的形式展示出来,以此为思路,在项目中使用百度地图时,我们考虑到需要便捷的使用和修改地图的状态且各项功能不耦合,以构造函数的方式来封装是一个不错的选择。

const CreateMap = function (initStr: any) {
  this.isDot = false; //是否已经打点
  this.map = {};//定义全局的map对象
  this.initMap(); //初始化创建地图
}
//初始化地图
CreateMap.prototype.initMap = function () {
  let that = this;
  // 百度地图API功能
  this.map = new BMapGL.Map('allmap', {
    minZoom: 11,
    maxZoom: 20,
  }); // 创建Map实例
  this.map.centerAndZoom(new BMapGL.Point(116.404, 39.915), 11); // 初始化地图,设置中心点坐标和地图级别
 //绑定打点事件
CreateMap.prototype.bindEvent = function () {
   let that = this;
  that.map.addEventListener('click', function (event) {
      //点击后操作
})
}

之后我们可以在其他页面来创建一个地图

let map = new CreateMap();

并且在页面数据请求回来后,给地图绑定事件监听

map.bindEvent()

遭遇的地图坑及解决方法

(1)需求情景:当鼠标移入移出label时,展示出当前label代表的区域的范围。


效果1.gif

复现情景:在鼠标移出移入label时,此时同时缩放地图层级,会导致监听鼠标移入移出事件发生错误,页面长期处于移出或者事件.
解决方法及思路:监听地图的层级变化,当地图层级发生改变时,禁用鼠标的移入移出事件回调。
(2)需求情景:删除地图上的指定覆盖物。
遇到坑之前的实现思路:每添加一个覆盖物会生成一个对象,获取所有的覆盖物通过该覆盖物的对象名称,进行过滤。
结果:百度地图的覆盖物对象名称经常会改变(官方改变),导致清除失败。
解决方法及思路:将该对添加到一个数组存储,统一清除。

是的是的,我们的初期分享到这就结束了。后期将长期更新百度地图的使用及遭遇的坑。

你可能感兴趣的:(结合地图覆盖物展示和打点展示百度地图的使用)