javascript - 百度坐标批量转换后画直线的问题
大家讲道理
大家讲道理 2017-04-11 09:45:44
[JavaScript讨论组]

百度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);
    })();
}

}

大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

全部回复(1)
PHPz

参考了这位同学的代码
http://blog.csdn.net/liusaint...
非常感谢,尽管不知道是哪位,我是做后端的,前端皮毛而已,只想着用算法技术解决,这里使用闭包的特性,巧妙地解决的问题,稍后贴出代码。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号