百度地图坐标转换一次只能转换 10 个坐标,不知道为什么会有这么操蛋的设计,不过百度本来就是个操蛋玩意也是没办法的事,谁让这是一个逆向淘汰的社会呢。不用也得用。

添加路径

将坐标数组 lineStringArr 以 9 为单位分组,但是如果只是每组九个添加折线,组与组之间会有隔断,线是断的。所以只有第一组是9个坐标,其他组会添加上一组最后一个坐标,所以其他组是 10 个坐标

//baidu coordinate transformation
let total = 0;
let groupCount = 0; //covert 10 items each time
if (lineStringArr.length % 9 > 0) {
  groupCount = (lineStringArr.length / 9) + 1;
}
else {
  groupCount = (lineStringArr.length / 9);
}
console.log("str", lineStringArr.length);
for(let i=0;i<groupCount;i++){
  let pos = new Array();
  if(i != 0 && total < lineStringArr.length){//first group 9 items, 10items other group
    console.log("i*8", (i*8) + i - 1);
    pos.push(new BMap.Point(lineStringArr[(i*8) + i - 1].lng, lineStringArr[(i*8) + i - 1].lat));
  }
  for(let j=0;j<9;j++){
    if(total<lineStringArr.length){
      console.log("i*9+j", i*9+j);
        let point = new BMap.Point(lineStringArr[(i * 9) + j].lng,lineStringArr[(i * 9) + j].lat);
        pos.push(point);
    }
    total++;
  }

  new BMap.Convertor().translate(pos, 1, 5, function(data){
    if(data.status === 0) {
      console.log("linestr", pos);
      console.log("baidu-data", data.points);

      let polyline = new BMap.Polyline(data.points, {
        strokeColor : "#28a745",
        strokeWeight : 4,
        strokeOpacity : 1
      });
      this.baiduMap.addOverlay(polyline);

    }
  }.bind(this));

}

添加 Marker

基于上边代码,将 9 修改为 10,并且不需要添加上一组最有一个坐标即可。

//baidu coordinate transformation
let total = 0;
let groupCount = 0; //covert 10 items each time
if (lineStringArr.length % 10 > 0) {
  groupCount = (lineStringArr.length / 10) + 1;
}
else {
  groupCount = (lineStringArr.length / 10);
}
console.log("str", lineStringArr.length);
for(let i=0;i<groupCount;i++){
  let pos = new Array();
 
  for(let j=0;j<10;j++){
    if(total<lineStringArr.length){
        let point = new BMap.Point(lineStringArr[(i * 10) + j].lng,lineStringArr[(i * 10) + j].lat);
        pos.push(point);
    }
    total++;
  }

  new BMap.Convertor().translate(pos, 1, 5, function(data){
    if(data.status === 0) {
      do something......

    }
  }.bind(this));

}

Q.E.D.