JS批量根据地址查询百度地图经纬度

因为百度的JS API是异步的,批量查询的时候会乱掉,就把每次请求变成同步的,等请求返回了之后才进行下一个地址的查询。 设置一个全局flag来标识当前请求是否正常响应,并且不断的检查这个flag,如果正常响应,才进行下一次的请求,这样就不容易乱掉

引入JS

<script type="text/javascript" src="http://api.map.baidu.com/api?v=1.2&ak=你的AK"></script>

HTML

1地址:<textarea rows="10" cols="" id="address" style="width: 40%"></textarea> 2坐标结果: 3<textarea rows="10" cols="" id="resultText1" style="width: 20%"></textarea> 4<textarea rows="10" cols="" id="resultText2" style="width: 20%"></textarea><br> 5<input type="button" value="测试分批执行" onclick="batchQuery();">

JS

1var jsonResult = [];//查询结果 2var jsonIndex = 0; 3var intervalId = -1;//重复调用的ID 4var lastIndex = -1; 5 6//测试分批执行 7function batchQuery() { 8 filteAddress(); 9 var address = document.getElementById("address").value; 10 document.getElementById("resultText1").value = ""; 11 document.getElementById("resultText2").value = ""; 12 13 var addArray = address.split("\n"); 14 for (var index in addArray) {//初始化组装JSON 15 var regAndAddArray = addArray[index]; 16 var row = {add: regAndAddArray, lng: "", lat: "", responseFlag: false}; 17 jsonResult.push(row); 18 } 19 //反复查询 20 intervalId = setInterval("startSetInterval()", 10); 21} 22 23//开始计数 24function startSetInterval() { 25 console.log("定时查询了" + jsonIndex); 26 if (lastIndex != jsonIndex) { 27 console.log("查询第" + jsonIndex + "个"); 28 lastIndex = jsonIndex; 29 var regAndAddArray = jsonResult[jsonIndex].add.split(","); 30 var local = new BMap.LocalSearch(regAndAddArray[1], { 31 onSearchComplete: function (results) { 32 if (results && results._pois) { 33 if (results._pois.length > 0) { 34 var firstResult = results._pois[0];//第一个结果 35 jsonResult[jsonIndex].lng = (firstResult.point.lng); 36 jsonResult[jsonIndex].lat = (firstResult.point.lat); 37 } else { 38 39 } 40 } 41 console.log("第" + jsonIndex + "个已经响应完成,准备查询下一个"); 42 jsonResult[jsonIndex].responseFlag = true; 43 jsonIndex++;//查询下一个地址 44 45 46 if (jsonIndex == jsonResult.length) {//等到所有回调执行完之后,把结果放进去 47 console.log(jsonResult); 48 var html = ""; 49 var htmlLat = ""; 50 for (var res in jsonResult) { 51 html += (jsonResult[res].lng + "\n"); 52 htmlLat += (jsonResult[res].lat + "\n"); 53 } 54 document.getElementById("resultText1").value = html; 55 document.getElementById("resultText2").value = htmlLat; 56 clearInterval(intervalId);//停止Interval 57 console.log("查询结束"); 58 } 59 } 60 }); 61 local.search(regAndAddArray[2]); 62 console.log("第" + jsonIndex + "个已经请求已经发送,正在等待"); 63 } 64 65}
点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )