百度地图 坐标转换 顺序问题
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个坐标的批量转换,直至坐标全部转换完成。代码如下所示。
上述代码,一定要注意的就是pointArr_convert这个数组的个数,不能超过5个,即pointArr_convert.length一定要小于等于5,否则,data.state会一直报错。
网上查资料是,看到了好多解决异步性采用定时的方式,如果坐标点位太多,而且需要添加覆盖物的情况下,我认为这种方式不是一个好的选择。
这次是由于要做智慧城市项目,需要根据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会一直报错。
网上查资料是,看到了好多解决异步性采用定时的方式,如果坐标点位太多,而且需要添加覆盖物的情况下,我认为这种方式不是一个好的选择。
相关文章推荐
- 百度地图/高德地图大批量坐标转换结果返回顺序问题
- GPS经纬度及谷歌地图坐标转换为百度地图坐标,解决地图显示经纬度的偏移问题
- 客户区坐标与屏幕坐标之间的转换问题
- php 百度地图 腾讯地图 转换坐标
- 去百度API的百度地图准确叠加和坐标转换的解决方案研究
- 百度地图将地图坐标转换成页面像素
- 百度地图 gps转换百度坐标 添加自定义标签 (标记)
- 去百度API的百度地图准确叠加和坐标转换的解决方案研究
- 百度地图web开发,包括导入地图,定位,坐标转换,反地址解析
- Android 百度地图开发 坐标误差问题
- 百度地图操作 描点 画圆 矩形 线条 计算面积 距离 坐标转换 JavaScript
- iOS基于百度地图的开发(6)——google坐标转换成百度坐标
- 多Paht和Ring的Geometry的坐标转换问题
- 类转换为JSON的顺序问题
- STM32F1xx 多路ADC 使用DMA转换结果顺序错乱问题
- 数据可视化过程中遇到的json转换及js执行顺序问题
- 类似百度地图的 放大缩小功能 的 坐标重定位问题
- 新手入门百度地图开发的(0,0)坐标问题
- 高德地图百度地图导航坐标转换
- 百度地图中循环输出坐标点信息是重复的问题解决方法