百度地图的一些问题以及解决方式

Posted 每一天都是最美好的一天

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了百度地图的一些问题以及解决方式相关的知识,希望对你有一定的参考价值。

1.由于版本的不同
 1》1.2之前的引用
   <script src="http://api.map.baidu.com/api?key=46ce9d0614bf7aefe0ba562f8cf87194&v=1.0&services=false"></script>
   2.0的版本引用 
   <script src="http://api.map.baidu.com/api?v=2.0&ak=zmAWIlHnn8qQ4qMKkBGtypeoZio5q86s" type="text/javascript"></script>
   关键点:一个是key---ak,services

   2》在使用自定义标注,得到bounds的最大最小的XY值,1.2--2.0

          maxX -- Ee, maxY -- De,minX -- Je,minY -- Ie

   3》 1.2版本的没有MapTypeControl()这个方法;不可以更高地图的样式

          2.0版本的可以使用这个方法。增加这个控件;

2.  使用百度地图api中的按路画线,出现每次画出的线都有绿色虚线的底线,发现原因是因为自己每次定义的walking都做了rederoption重新渲染,所以出现了底色

var walking2 = new BMap.WalkingRoute(this_.gpsMap, {
// renderOptions:{map: this_.gpsMap, autoViewport: false}, 导致出现绿色虚线和订单label消失的原因,因为这句表示重新渲染,把这句注释掉,因为蓝色部分已经定位到当前的地图实例
onSearchComplete: function(res) {
var plan = res.getPlan(0);
var arrPois =[];
for(var j=0;j<plan.getNumRoutes();j++){
var route = plan.getRoute(j);
arrPois= arrPois.concat(route.getPath());
}
var p2=new BMap.Polyline(arrPois, { strokeColor: "red", strokeWeight: 3, strokeOpacity: 1 });
p2["id"]=‘tr2‘;
this_.gpsMap.addOverlay(p2);
},
//移除起点和终点的marker
onMarkersSet:function(pois){
this_.gpsMap.removeOverlay(pois[0].marker)
this_.gpsMap.removeOverlay(pois[1].marker)
}
});

 

3.使用地图的时候,会出现BMapLib未定义?

   引入js<script type="text/javascript" src="http://api.map.baidu.com/library/CurveLine/1.5/src/CurveLine.min.js"></script>,就ok了

4. 使用vue时候,对百度地图进行一个处理,写一个Map.js,如果我们在地图中使用了BMapLib,那么还要引入bmaplib.js(例如热力图就需要这)。

  Map.js
  export function MP(ak,a) {
    return new Promise(function (resolve, reject) {
    window.init = function () {
    resolve(BMap)
    }
    var script = document.createElement("script");
    script.type = "text/javascript";
    script.src = "http://api.map.baidu.com/api?v=2.0&ak="+ak+"&callback=init";
    script.flag="true";
    script.onerror = reject;
    document.head.appendChild(script);
    })
  }
在我们需要引入的页面写入Map.js
    MP("zmAWIlHnn8qQ4qMKkBGtypeoZio5q86s").then(BMap => {
       this_.gpsMap = new BMap.Map("allMap", { enableMapClick: true });
  });
创建一个bmaplib.js
   export function HMP() {
    return new Promise(function (resolve, reject) {
    window.initheat = function () {
      resolve(BMapLib)
   }
    var script = document.createElement("script");
    script.type = "text/javascript";
    script.src = "../../static/js/Heatmap_min.js?callback=initheat";
    script.onerror = reject;
    document.head.appendChild(script);
  })
}
在需要页面引入bmaplib.js就要写
 
 MP("zmAWIlHnn8qQ4qMKkBGtypeoZio5q86s").then(BMap => {
    hat_.map = new BMap.Map("allMap", { enableMapClick: true });
    that_.map.centerAndZoom(new BMap.Point(116.404, 39.915), 11);
    HMP().then(BMapLib => { })
  })

 

5.怎么消除地图上的底图的图标的点击事件怎么关闭?

  var map = new BMap.Map("allmap", {enableMapClick:false});//构造底图时,关闭底图可点功能

6.根据后台获取的数据,画出轨迹路线,并且要按照道路走

  traceLine1:function(pointArr){ 
    pointArr是后台获取的数据,点的集合,已经经过处理,
      $.each(result, function(index, value) { result原始获取数据
        var x = value["longitude"];
        var y = value["latitude"];
        var ggPoint = new BMap.Point(x, y);
        pointArr.push(ggPoint);
       });

    var this_=this, polyline;
    var str = "";
    if(pointArr.length){
      var point1 = new BMap.Point(pointArr[0].lng, pointArr[0].lat);
      var startMarker = new BMap.Icon("../../../../static/images/since.png", new BMap.Size(22, 27), {
        offset: new BMap.Size(10, 25)
      });
    var marker = new BMap.Marker(point1, { icon: startMarker });
// 创建标注
    marker["id"]="mkstart";
    //this_.gpsMap.addOverlay(marker);
    var point2 = new BMap.Point(pointArr[pointArr.length - 1].lng, pointArr[pointArr.length - 1].lat);
    var endMarker = new BMap.Icon("../../../../static/images/TheFinal.png", new BMap.Size(22, 27), {
      offset: new BMap.Size(10, 25)
    });
    var marker2 = new BMap.Marker(point2, { icon: endMarker });
    marker2["id"]="mkend";
    //var label2 = new BMap.Label("终点 | 总路程是:" + this_.routeLine + "公里", { offset: new BMap.Size(-5, -20) });
    //this_.gpsMap.addOverlay(marker2);
  }
//步行
  if(pointArr){
    var walking = new BMap.WalkingRoute(this_.gpsMap, {
    onSearchComplete: function(res) {
      var plan = res.getPlan(0);
      var arrPois =[];
      if(plan){
        for(var j=0;j<plan.getNumRoutes();j++){
          var route = plan.getRoute(j);
          arrPois= arrPois.concat(route.getPath());
      }
    var p1=new BMap.Polyline(arrPois, { strokeColor: "black", strokeWeight: 2, strokeOpacity: 1});
    p1["id"]="tr1";
    this_.gpsMap.addOverlay(p1);
    }
  },

//移除起点和终点的marker
  onMarkersSet:function(pois){
    this_.gpsMap.removeOverlay(pois[0].marker)
    this_.gpsMap.removeOverlay(pois[1].marker)
  }});
  for(var l=0;l<pointArr.length; l+=3){
    var m=l+3;var n=l+1;
    if(m>pointArr.length-1){
      m=pointArr.length-1;
    }
    if(n>pointArr.length-1){
      n=pointArr.length-1;
    }
    str+=(this_.gpsMap.getDistance(new BMap.Point(pointArr[l].lng, pointArr[l].lat), new BMap.Point(pointArr[n].lng, pointArr[n].lat))).toFixed(2) + ","
    walking.search(new BMap.Point(pointArr[l].lng, pointArr[l].lat), new BMap.Point(pointArr[m].lng, pointArr[m].lat)); 
  } 
  if (!str) {
    this_.routeLine = 0;
  } else {
    this_.routeLine = (eval(str.split(",").join("+").substr(0, str.length - 1)) / 1000).toFixed(2);
    if (this_.orderTotal) {
      this_.arverage = (this_.routeLine / this_.orderTotal).toFixed(2);
    } else {
      this_.arverage = this_.routeLine;
    }
  } 

},

以上是关于百度地图的一些问题以及解决方式的主要内容,如果未能解决你的问题,请参考以下文章

同时集成百度地图定位以及导航遇到的一些坑

百度地图2

手把手教你内网环境搭建百度地图

Cocoapods制作pod时,依赖百度地图SDK的一些问题

Android studio 百度地图开发(10)语音播报的问题:能正常导航,但是无法语音播报

百度地图与高德地图谁的用户数比较多?有没有一些数据支持。另外谁比较好用一些呢?各位大神们~