js调用百度mapAPI,由于异步执行导致结果顺序不对以及数据丢失
js调用百度地图API,由于异步执行导致结果顺序不对以及数据丢失
利用百度地图API(geocoder里的getlocation函数)对一个文件里面约2W个坐标点进行解析,并将解析的结果输出到另一个文件。
现在有两个问题
第一,百度地图的这个API好像是异步执行的?导致我输出的坐标顺序和输入的顺序不一样了。。。
第二,我输入了2W个点,输出却只有大约8000个点,怎么会呢?
我现在想等getlocation这个函数在服务器解析成功了之后再继续往下执行,也就是把异步改成同步,可不可以实现呢?
求大神指导啊~
------解决方案--------------------
解析都是异步的,无法同步
可以一个点一个点进行提交,一个点获取完后再发送下一个点进行解析
一次性发送2w个点都是异步请求无法控制哪个先返回
先读到数组中,在发送
利用百度地图API(geocoder里的getlocation函数)对一个文件里面约2W个坐标点进行解析,并将解析的结果输出到另一个文件。
现在有两个问题
第一,百度地图的这个API好像是异步执行的?导致我输出的坐标顺序和输入的顺序不一样了。。。
第二,我输入了2W个点,输出却只有大约8000个点,怎么会呢?
我现在想等getlocation这个函数在服务器解析成功了之后再继续往下执行,也就是把异步改成同步,可不可以实现呢?
求大神指导啊~
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>所有POI的查询-地址解析</title>
<script type="text/javascript" src="http://api.map.baidu.com/api?v=1.4"></script>
</head>
</html>
<script type="text/javascript">
var mOption = {
poiRadius : 500,
numPois : 12
}
var oFso1,input,input2;
oFso1 = new ActiveXObject("Scripting.FileSystemObject");
input = oFso1.OpenTextFile("c:\\test2.txt",1); //数据来源
while (!input.AtEndOfStream)
{
var sContent = input.ReadLine();
var text=sContent.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();
},
option
);
})(myGeo,mPoint,mOption,sContent);
}
input.Close();
alert("done");
</script>
------解决方案--------------------
解析都是异步的,无法同步
可以一个点一个点进行提交,一个点获取完后再发送下一个点进行解析
一次性发送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;
}