首页 > 问一个闭包相关的问题,百度地图的转换坐标的方法

问一个闭包相关的问题,百度地图的转换坐标的方法

这是一个根据

var convertor = new BMap.Convertor();
    function getRestaurants(geohash){
      $.get("/restaurants/" + geohash + "/0/200",{},function(json){
        restaurants = JSON.parse(json);
        var len = restaurants.length;

        for(var i = 0; i < len; i++){
          restaurants[i];
          
          //获取数组中的对象的坐标,通过convertor.translate()方法转换为百度坐标,但是convertor.translate()是一个异步方法,如何坐标与数组中的对象对应起来
          var ggPoint = new BMap.Point(restaurants[i]["longitude"],restaurants[i]["latitude"]);
          var pointArr = [];
          pointArr.push(ggPoint);
          convertor.translate(pointArr, 1, 5,function(data){
            //GPS坐标转换为百度坐标
            //这里我要怎么写获取到对应的 i 呢?
            if(data.status === 0) {
              var marker = new BMap.Marker(data.points[0]);
              var title = restaurants[i]["name"];
              var content =   restaurants[i]["description"] ;
              map.addOverlay(marker);
              addClickHandler(title,content,marker);
            }
          });
        }
      },"json")
    }

(function(i) {
    convertor.translate(pointArr, 1, 5, function(data) {
        //GPS坐标转换为百度坐标
        //这里我要怎么写获取到对应的 i 呢?
        if (data.status === 0) {
            var marker = new BMap.Marker(data.points[0]);
            var title = restaurants[i]["name"];
            var content = restaurants[i]["description"];
            map.addOverlay(marker);
            addClickHandler(title, content, marker);
        }
    })
})(i);

var convertor = new BMap.Convertor();
function getRestaurants(geohash){
    $.get("/restaurants/" + geohash + "/0/200",{},function(json){
        var restaurants = JSON.parse(json);
        var len = restaurants.length,
            points = [];



        for(var i = 0; i < len; i++){
            points.push(new BMap.Point(restaurants[i]["longitude"], restaurants[i]["latitude"]));
        }

        //translate 方法一次性可以转换N个坐标, 所以不需要在for里面调用N次
        convertor.translate(pointArr, 1, 5, function(data){
            if(data.status === 0) {
                //遍历转换后的结果
                for(var i=0, j=data.points.length; i<j; i++){
                    var marker = new BMap.Marker(data.points[i]);
                    var title = restaurants[i]["name"];
                    var content = restaurants[i]["description"] ;
                    map.addOverlay(marker);
                    addClickHandler(title, content, marker);
                }
            }
        });

    },"json")
}

translate 方法一次可以转换N个坐标, 所以不需要在for循环中调用N次该方法.

参考自: http://developer.baidu.com/map/jsdemo.htm#a5_3

【热门文章】
【热门文章】