解析都是异步的,无法同步可以一个点一个点进行提交,一个点获取完后再发送下一个点进行解析一次性发送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回调,会无法继续进行解析操作
我也碰到相同的问题,求解答,我是在调用公交换乘信息,通过数组传入的起始点和终止点,输出的结果顺序一直发生改变 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} });
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();
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回调,会无法继续进行解析操作
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]);
}
}