2011-01-08 4 views
0

В настоящее время я работаю над проектом о такси. Я хочу отобразить некоторые такси в Google Map, но столкнулся с следующей проблемой. Когда программа переходит в функцию print_taxi(), все данные в taxilatlng [] исчезнут! Кажется, что все данные можно хранить только в направленияхservice.route() {}. Нужна помощь.Вопрос о Javascript и API Google Map

<html> 
<head> 
<meta name="viewport" content="initial-scale=1.0, user-scalable=no" /> 
<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script> 

<script> 
onerror=handleErr 
var txt="" 

function handleErr(msg,url,l) 
{ 
    txt="There was an error on this page.\n\n" 
    txt+="Error: " + msg + "\n" 
    txt+="URL: " + url + "\n" 
    txt+="Line: " + l + "\n\n" 
    txt+="Click OK to continue.\n\n" 
    alert(txt) 
    return true 
} 

var centerlat=22.551622; 
var centerlng=114.121178; 
var taxi_num=10; 
var taxiradius=0.005; 

var taxilatlng = new Array(); 
var taximarker = new Array(); 
var taxilat = new Array(); 
var taxilng = new Array(); 
var map; 

var RANDOM_DATA_INITIALIZED; 

function get_random(lowerbound, upperbound){ 
    return lowerbound+Math.floor((upperbound-lowerbound)*Math.random()); 
} 

function get_random_loc(now, radius){ 
    return now+radius-Math.random()*2*radius; 
} 

function get_random_latlng(taxiradius){ 
    var tmp=new google.maps.LatLng(get_random_loc(centerlat,taxiradius), get_random_loc(centerlng,taxiradius)); 
    return tmp; 
} 

function dump_obj(myObject) { 
    var s = ""; 
    for (var property in myObject) { 
    s = s + "\n "+property +": " + myObject[property] ; 
    } 
    alert(s); 
} 

function init_map() 
{ 

    var latlng=new google.maps.LatLng(centerlat, centerlng); 
    var options={ 
     zoom:16, 
     center: latlng, 
     mapTypeId: google.maps.MapTypeId.ROADMAP 
    }; 

    map=new google.maps.Map(document.getElementById("map_canvas"), options); 

} 

function print_taxi(){ 
    image="taxi.gif"; 
    for(var i=1;i<=taxi_num; ++i){ 
     taximarker[i]=new google.maps.Marker({ 
      position: taxilatlng[i], 
      icon: image, 
      map: map 
     }); 
    } 
} 

function get_taxi_pos() 
{ 
    var cnt_generatedcar=0; 

    for(var i=1;i<=taxi_num; i++) 
    { 
     var from=get_random_latlng(taxiradius); 
     var to=get_random_latlng(taxiradius); 
     var directionsservice=new google.maps.DirectionsService(); 
     var taxirenderer=new google.maps.DirectionsRenderer(); 
     var DirReq={ 
       origin: from, 
       destination: to, 
       travelMode: google.maps.DirectionsTravelMode.DRIVING 
     }; 

     directionsservice.route(DirReq, function(response, status){ 
      if(status==google.maps.DirectionsStatus.OK) 
      { 
       var all_routes = response.routes; 
       for(curroute in all_routes) 
       { 
        ++cnt_generatedcar; 
        var all_paths = all_routes[curroute].overview_path; 
        var cnt_paths = all_paths.length; 
        var id_path=get_random(0, cnt_paths-1); 
        taxilatlng[i] = all_paths[id_path]; 
        if(cnt_generatedcar==taxi_num){ 
         print_taxi(); 
        } 
       } 
      } 
     }); 
    } 
} 

function init(){ 

    init_map(); 

    get_taxi_pos(); 

} 


</script> 
</head> 

<body onload="init();"> 
<div id="map_canvas" style="float:left; width:70%; height:100%"></div> 
<div id="msg"></div> 
</body> 

</html> 

ответ

0

directionsservice.route является метод обратного вызова и вызывается только после того, как г> taxi_num. В результате значение в taxilatlng устанавливается только один раз по индексу (taxi_num + 1). Вы можете изменить код, например:

var ctr = -1; // added 
directionsservice.route(DirReq, function(response, status){if(status==google.maps.DirectionsStatus.OK) 
     { 
      var all_routes = response.routes; 
    ctr++; 
      for(curroute in all_routes) 
      { 
       ++cnt_generatedcar; 
       var all_paths = all_routes[curroute].overview_path; 
       var cnt_paths = all_paths.length; 
       var id_path=get_random(0, cnt_paths-1); 
       taxilatlng[ctr] = all_paths[id_path]; 

       if(cnt_generatedcar==taxi_num){ 
        print_taxi(); 
       } 
      } 
     } 
    }); 

Я только что использовал новую переменную как счетчик вместо i.

Смежные вопросы