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

  • 相关阅读:
    O(logn)的乘方算法
    求递归算法时间复杂度:递归树
    Xcode6 创建静态库
    Intellij IDEA使用总结
    使用Entity Framework迁移完数据库后,每次修改代码(非模型代码)后都报错。
    Entity Framework Code First数据库自动更新
    Java中 堆 栈,常量池等概念解析(转载)
    使用MyEclipse9.0开发Web Service
    (转) Java源码阅读的真实体会
    Hibernate注解版设计学生、课程、成绩的关系映射
  • 原文地址:https://www.cnblogs.com/bookobe/p/8512000.html
Copyright © 2011-2022 走看看