百度地图 坐标转换 顺序问题

之前在android系统上使用过百度API,感觉很好用,后来又通过VC+java集成过百度地图API,对比VC编辑google地图时的复杂度,简化了许多。

这次是由于要做智慧城市项目,需要根据GPS信息,添加覆盖物至百度地图。前面进展都很顺利,直到又GPS转成百度坐标时,出现了些问题。主要问题有三个,都是递进关系的。详细许多朋友在涉及到GPS+百度地图开发时,都会遇到。

1、GPS坐标转换为百度坐标,由于保密限制,是没有回传参数的,只有一个回掉函数,所以各种覆盖物只能在回调函数中使用。

2、百度地图的回传函数是类似于HTTP GET POST类的API,是有时间延时的,所以如果按照for循环顺序的去提交转换,其回调函数也不是顺序执行的,也就是说,你连续提交了1、2、3、4、5个GPS坐标点,其回调函数的回调顺序有可能是23145,或者其他,是无序的。

3、百度地图API接口中,标明批量坐标转换的最大值是100,但根据官网API示例实测,最大只能一次批量5个。

上述遇到的问题,解决如下。

假如有20个点需要批量转换并添加覆盖物,可先进行5个批量转换,在回调函数中,再次进行下一组5个坐标的批量转换,直至坐标全部转换完成。代码如下所示。

var convertor = new BMap.Convertor();              //定义
var m_rep=0;//回调重复次数
translateCallback = function (data){            //回调函数
   if(data.status == 0) 
     { 
for(point_length=0;point_length<5;point_length++)             //对转换后的坐标添加覆盖物
{
      var marker = new BMap.Marker(data.points[point_length],{icon:myIcon[point_length+m_rep*5]});
        map.addOverlay(marker);              // 将标注添加到地图中
addClickHandler(sContent[point_length+m_rep*5],marker); 
}
m_rep++;                                                    //回调次数记录
if((m_rep*5+5)<=length)                             //判断全部转换是否完成
{
pointArr_convert.length = 0;               //pointArr_convert数组清零 !!!很重要,translate函数只允许最大为5的数组
pointArr_convert.push(point[0+m_rep*5]);                           //将要转换的GPS数据push到pointArr_convert数组
pointArr_convert.push(point[1+m_rep*5]);
pointArr_convert.push(point[2+m_rep*5]);
pointArr_convert.push(point[3+m_rep*5]);
pointArr_convert.push(point[4+m_rep*5]);
convertor.translate(pointArr_convert,1,5,translateCallback);                  //在回调函数中进行下一组转换的提交
} 
   } 
    }
pointArr_convert.push(point[0]);                                                    //首次5个点批量转换的赋值
pointArr_convert.push(point[1]);
pointArr_convert.push(point[2]);
pointArr_convert.push(point[3]);
pointArr_convert.push(point[4]);


convertor.translate(pointArr_convert,1,5,translateCallback);              //首次5个点批量转换的提交



上述代码,一定要注意的就是pointArr_convert这个数组的个数,不能超过5个,即pointArr_convert.length一定要小于等于5,否则,data.state会一直报错。

网上查资料是,看到了好多解决异步性采用定时的方式,如果坐标点位太多,而且需要添加覆盖物的情况下,我认为这种方式不是一个好的选择。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值