• 百度api查询多个地址的经纬度的问题


      在使用百度api查询多个地址的经纬度的时候,由于百度api提供的经纬度查询方法是回调函数,并且后续操作必须等经纬度获取完成才能进行,问题就存在于怎么判断所有地点是否都回调完成了,问了之前的一个前端大佬同事(我是一只前端弱鸡),给我提供的思路,在百度api的回调函数里面再调一次自定义的回调函数,从而在自定义的函数里面进行判断所有地点是否都回调完成了。

      下面是具体代码,  

     1 <script>
     2         //所有待查询经纬度的地点
     3         var allAddress=new Array("北京西站","成都东站","上海南站","西安北站");
     4         //回调前计数用
     5         var callbackBefore = 0;
     6         //回调后计数用
     7         var callbackAfter = 0;
     8         //存放经纬度
     9         var geoCoord={};
    10         //循环所有地址
    11         for (var i = 0; i < allAddress.length; i++) {
    12             //先判断是否已经查询了经纬度(排重)
    13             if (!(allAddress[i] in geoCoord)) {
    14                 //去调百度api,查经纬度了,先记个数
    15                 callbackBefore++;
    16                 GetPoint(allAddress[i], function (address, point) {
    17                     //回调回来了,经纬度,再记个数
    18                     callbackAfter++;
    19                     geoCoord[address] = point;
    20                     //判断回调之前的数目和回调之后的数目是否一样,一样就表示所有地址都查询完了
    21                     if (callbackBefore == callbackAfter) {
    22                         //去做你想做的操作了吧
    23                         //Travel(geoCoord);
    24                         return;
    25                     }
    26                 });
    27             }
    28             
    29         }
    30         //查询经纬度的函数
    31         function GetPoint(address, callback) {
    32             var local = new BMap.LocalSearch(address,
    33             { 
    34                 //智能搜索,这本来就是一个回调的方法
    35                 "onSearchComplete": function (obj) {
    36                     //存放经纬度
    37                     var point = [];
    38                     if (obj && obj.getPoi(0)) {
    39                         var pp = obj.getPoi(0).point;
    40                         point.push(pp.lng);
    41                         point.push(pp.lat);
    42                         //回调方法
    43                         callback(address, point);
    44                     }
    45                 }
    46             });
    47             local.search(address);
    48         }
    49 </script>

      我实际情况是那个地址allAddress比较复杂,需要二次循环,不像上面例子这么简单,所以才使用的这种方法。

  • 相关阅读:
    webpack(二)
    webpack(一)
    初探Vue SSR(1)
    Node版本管理控制器n
    Gitlab用户在组中有五种权限:Guest、Reporter、Developer、Master、Owner
    微信小程序分享参数传递
    关于vue-cli3.*搭建项目遇到问题整理
    请求头出现provisional headers are shown 和 vue-cli 3.x配置跨域代理
    HDU6409 没有兄弟的舞会
    HDU6446 Tree and Permutation
  • 原文地址:https://www.cnblogs.com/bookobe/p/8512000.html
Copyright © 2020-2023  润新知