打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
js调用百度API,GPS经纬度转换成百度地图经纬度,用BMap.Convertor.translate不能及时转换问题,求大神帮忙。
提问:

从数据库取GPS点,转换成百度地图经纬度,然后描点连线。
以下代码一共有两点问题:
1、数据库点的顺序是不变的,但是通过回调函数之后PointArr中的数据顺序是随机的。
2、setTimeout函数不起作用,所有的点都是一起出现,没有模拟轨迹的。
JavaScript code?

    
//调用部分 
 function makeLine() {   
 for (var i = 0; i <= Array.length - 1; i += 2) {//偶数索引存经度,奇数存维度  
            var gpsPoint=new BMap.Point(Array[i], Array[i + 1]);
            //GPS转百度
            BMap.Convertor.translate(gpsPoint,0,translateCallback);
            
}
     translateCallback = function (point){
      
           PointArr.push(point);
           setTimeout("makepoly()", 1000);
        }
       function makepoly() {
          //大于总数,返回
           if(num>=total_num){
           return;
           }
            //第一个点不画线只描点
           if(num==0){
             //alert(num);
             var markergps = new BMap.Marker(PointArr[0]);
             map.addOverlay(markergps);
             num++;
              
           }
           else{
               //alert(num);
               var polyline = new BMap.Polyline([PointArr[num - 1], PointArr[num]], { strokeColor: "blue", strokeWeight: 3, strokeOpacity: 0.5 });  //定义折线
               map.addOverlay(polyline);   //添加折线到地图上
               var markergps = new BMap.Marker(PointArr[num]);
               map.addOverlay(markergps);
               num++;
           }
       }

回答:

都是异步解码,不能直接通过for语句来实现,每个解码的返回结果循序不一定按照循序返回,要通过全局变量来控制模拟for语句

var al=Array.length - 1
var now=0
 function makeLine() {  

  var gpsPoint=new BMap.Point(Array[now], Array[now + 1]);
  BMap.Convertor.translate(gpsPoint,0,translateCallback);


now+=2;
}

     translateCallback = function (point){
      
           PointArr.push(point);
           setTimeout("makepoly()", 1000);
        }
       function makepoly() {
          //大于总数,返回
           if(num>=total_num){
           return;
           }
            //第一个点不画线只描点
           if(num==0){
             //alert(num);
             var markergps = new BMap.Marker(PointArr[0]);
             map.addOverlay(markergps);
             num++;
              
           }
           else{
               //alert(num);
               var polyline = new BMap.Polyline([PointArr[num - 1], PointArr[num]], { strokeColor: "blue", strokeWeight: 3, strokeOpacity: 0.5 });  //定义折线
               map.addOverlay(polyline);   //添加折线到地图上
               var markergps = new BMap.Marker(PointArr[num]);
               map.addOverlay(markergps);
               num++;
           }

if(now<al) makeLine()
       }
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
真实经纬度(gps)转成百度坐标的js方法
HTML5 GPS定位&百度地图API
【百度地图API】自行获取区域经纬度的工具
百度地图API简单应用——1.根据地址查询经纬度
零基础掌握百度地图兴趣点获取POI爬虫(python语言爬取)(进阶篇)
【高德地图API】如何解决坐标转换,坐标偏移?如何获取...
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服