百度api转换坐标是每次10个,转换时异步的,无法保证坐标的顺序,所以画直线会有BUG,
请问有没有哪位,处理过这种问题,怎么解决的呢??
已解决,代码如下:
var drawPolylineRed = function(array, id) {
var baiduPoints_two_dimensional=new Array();
var baiduPoints=new Array();
//限制数量 TODO
var points =new Array();
var maxPoints=array.length<200?array.length:200;
for (var k= 0; k <maxPoints; k++) {
points.push(array[k]);
}
var total = 0;
var groupCount = 0;
if (points.length % 10 > 0) {
groupCount = (points.length / 10) + 1;
} else {
groupCount = (points.length / 10);
}
console.log(groupCount);
for (var i = 0; i < groupCount; i++) {
baiduPoints_two_dimensional[i]=new Array();
var jj=i;
var pos = new Array();
for (var j = 0; j < 10; j++) {
if (total < points.length) {
var point = new BMap.Point(points[(i * 10) + j].lng,
points[(i * 10) + j].lat);
pos.push(point);
}
total++;
}
//回调函数
(function(){
var index=jj;
var translateCallback=function(data) {
var ajaxId=index;
//console.log(ajaxId);
if (data.status === 0) {
for (var i = 0; i < data.points.length; i++) {
var p=new BMap.Point(data.points[i].lng,data.points[i].lat);
//这里是异步的导致最后取得的节点的数据不是原有的排序
//需要重新排序
baiduPoints_two_dimensional[ajaxId][i]=p;
console.log("ajaxId:"+ajaxId);
console.log("i:"+i);
//什么时候可以画图
if(ajaxId*10+(i+1)==(points.length)){
console.log(baiduPoints_two_dimensional.length);
for (var kk = 0; kk < baiduPoints_two_dimensional.length; kk++) {
var baiduPoints_one=baiduPoints_two_dimensional[kk];
for (var ll = 0; ll < baiduPoints_one.length; ll++) {
baiduPoints.push(baiduPoints_two_dimensional[kk][ll]);
}
}
var polyline = new BMap.Polyline(baiduPoints, {
strokeColor : "Red",
strokeWeight : 2,
strokeOpacity : 1
});
var polyliness = polylines[id];
if (polyliness == undefined) {
polyliness = new Array();
}
polyliness.push(polyline);
polylines[id] = polyliness;
map.addOverlay(polyline);
}
}
}
translateCallback = null;//清理内存。
};
var convertor = new BMap.Convertor();
convertor.translate(pos, 1, 5,translateCallback);
})();
}
}
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
参考了这位同学的代码
http://blog.csdn.net/liusaint...
非常感谢,尽管不知道是哪位,我是做后端的,前端皮毛而已,只想着用算法技术解决,这里使用闭包的特性,巧妙地解决的问题,稍后贴出代码。