GPS转百度,百度API一次最多只支持10个点的坐标转换,只能动态把数据拆分:
//按批进行坐标转换 限定不大于10个每次
var mapData;
var changeCount = 0;
if (mapData.length % 10 > 0) {
changeCount = (mapData.length / 10) + 1;
}
else {
changeCount = (mapData.length / 10);
}
for (var i = 0; i < changeCount; i++) {
var points = [];
for (var j = 0; j < 10; j++) {
points.push(new BMap.Point(mapData[(i * 10) + j].Latitude, mapData[(i * 10) + j].Longitude));
}
var convertor = new BMap.Convertor();
convertor.translate(points, 1, 5, translateCallback);
}
针对单个点转换和批量转换两种接口,有两种方法,但是思想都是一样的,顺序发送,顺序接收,,关键在于控制发送顺序,因此只需要在第一启动转化后,以后的转换都在回调方法中写入即可。
法一 使用BMap.Convertor.translate()方法
var TransPos = 0;
function TransGPS()
{
//封装GPS点
//.......相关操作在这
...........
BMap.Convertor.translate(gpsPoints[TransPos], 0, TranlateCallBack );//首次启动转化
}
TranlateCallBack = function (point) {
drawpoints.push(point);
PolyLine.setPath(drawpoints);
TransPos++;//记录当前发送位置变量
if(TransPos<gpsPoints.length)//gpsPoints是GPS坐标点
{
BMap.Convertor.translate(gpsPoints[TransPos], 0, TranlateCallBack );
}
}
法二 使用BMap.Convertor.transMore()方法
var TransPos = 0;
function TransGPS()
{
//封装GPS点
//.......相关操作在这
...........
//GPS点分组,每20个为一组,存放pointsArrray中
BMap.Convertor.transMore(pointsArrray[TransPos], 0, callback);//首次启动转化
}
function callback(points)
{
var TransResult = null;
for(var index in points)
{
TransResult = points[index];
if(TransResult.error != 0){continue;}//出错就直接返回;
var point = new BMap.Point(TransResult.x, TransResult.y);
drawpoints.push(point);
}
PolyLine.setPath(drawpoints);
TransPos++;//当前发送位置,初始为0
if(TransPos<pointsArrray.length)//pointsArrray是一个二维数组,每个元素都是最多为20个GPS点的一维数组,pointsArrray需要事先封装
{
BMap.Convertor.transMore(pointsArrray[TransPos], 0, callback);
}
}