• 百度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比较复杂,需要二次循环,不像上面例子这么简单,所以才使用的这种方法。

  • 相关阅读:
    后缀自动机学习笔记
    [bzoj4516][Sdoi2016]生成魔咒——后缀自动机
    [bzoj1692][Usaco2007 Dec]队列变换——贪心+后缀数组
    BZOJ4811 [Ynoi2017]由乃的OJ
    codeforces796E Exam Cheating
    BZOJ1004 [HNOI2008]Cards
    BZOJ1798 [Ahoi2009]Seq 维护序列seq
    BZOJ4785 [Zjoi2017]树状数组
    UOJ207 共价大爷游长沙
    POJ3768 Katu Puzzle
  • 原文地址:https://www.cnblogs.com/bookobe/p/8512000.html
Copyright © 2020-2023  润新知