本帖最后由 download0322 于 2014-07-09 20:31:51 编辑

解决方案 »

  1.   

    解析都是异步的,无法同步可以一个点一个点进行提交,一个点获取完后再发送下一个点进行解析一次性发送2w个点都是异步请求无法控制哪个先返回先读到数组中,在发送   var mOption = {
            poiRadius: 500,
            numPois: 12
        }
        var oFso1, input, input2;
        oFso1 = new ActiveXObject("Scripting.FileSystemObject");
        input = oFso1.OpenTextFile("c:\\test2.txt", 1);  //数据来源
        var arr = [];
        while (!input.AtEndOfStream) {
            var sContent = input.ReadLine();
            arr[arr.length] = sContent;////////存数组中
           
        }
        input.Close();
        var l = arr.length, now = 0;
        function ParseAddr() {
            var text = arr[now].split(" ");
            var mPoint = new BMap.Point(parseFloat(text[2]), parseFloat(text[1]));
            var myGeo = new BMap.Geocoder();        //创建地址解析实例        (function (geo, point, option, s) {
                geo.getLocation
            (
                point,
                function mCallback(rs) {
                    var oFso, output;
                    oFso = new ActiveXObject("Scripting.FileSystemObject");
                    output = oFso.OpenTextFile("c:\\out.txt", 8, true); //写方式打开         
                    var allPois = rs.surroundingPois;       //获取全部POI(该点半径为100米内有6个POI点)
                    var str = "";
                    for (i = 0; i < allPois.length; ++i) {
                        str += " " + allPois[i].tags;
                    }
                    output.Writeline(s + str);
                    output.Writeline(s);
                    output.Close();
                    now++;
                    if (now < l) ParseAddr();///没有解析完继续解析
                },
                option
            );
            })(myGeo, mPoint, mOption, sContent);
        }    ParseAddr();不过有个问题。。要是百度出问题或者网络又问题导致不执行mCallback回调,会无法继续进行解析操作
      

  2.   

    我也碰到相同的问题,求解答,我是在调用公交换乘信息,通过数组传入的起始点和终止点,输出的结果顺序一直发生改变
       var  startArray=new Array();
    var  endArray=new Array();
    //写入文档
    var oFso,oFile,sFile,sContent;
        sFile = "C:\\Users\\studentdsx\\Desktop\\百度API\\strategy.txt";
         oFso = new ActiveXObject("Scripting.FileSystemObject");  
    //最短时间花费
        function calculate1()
    {        
           var num=0;   
       var transit1= new BMap.TransitRoute(map, {
    renderOptions: {map: map}
    });

        transit1.setPolicy( BMAP_TRANSIT_POLICY_LEAST_TIME);
           
       
        var sumtime1;
    var walkDistance1=0;
    var lineDistance1=0;
    var changetime1=0;

    transit1.setSearchCompleteCallback(function(results){

    var m=0;
        var firstPlan = results.getPlan(0);
    var mintime=firstPlan.getDuration(false);
        //找到行程时间最短的方案
    for (var i = 0; i < results.getNumPlans(); i++)
    {
         if(results.getPlan(i).getDuration(false)<mintime)
       {
       mintime=results.getPlan(i).getDuration(false);
       m=i;
       }
    }
    sumtime1=mintime;
    var bestPlan=results.getPlan(m);
        for (var i = 0; i < bestPlan.getNumLines(); i++)
    {
       var line = bestPlan.getLine(i);
       lineDistance1+=line.getDistance(false);
        }
        for (var i = 0; i < bestPlan.getNumRoutes(); i++)
    {
       var walk = bestPlan.getRoute(i);
       walkDistance1+=walk.getDistance(false);
    }
    changetime1=bestPlan.getNumLines()-1;
    var s = [];
        s.push(num.toString()+" "+sumtime1+" "+walkDistance1+" "+lineDistance1+" "+changetime1);
         oFile = oFso.OpenTextFile(sFile,8,true); //写方式打开 
    oFile.WriteLine(s);
    oFile.close();    

       });  

         for(var num=0;num<startArray.length;num++)
       {
          transit1.search(startArray[num], endArray[num]);    
       }

    }