您的位置:首页 > 编程语言 > Java开发

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

2017-11-20 15:58 190 查看
之前在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会一直报错。

网上查资料是,看到了好多解决异步性采用定时的方式,如果坐标点位太多,而且需要添加覆盖物的情况下,我认为这种方式不是一个好的选择。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  百度地图 java api gps