关于Javascript&;谷歌地图

关于Javascript&;谷歌地图,javascript,api,google-maps,Javascript,Api,Google Maps,我目前正在做一个关于出租车的项目。我想在谷歌地图上显示一些出租车,但遇到了以下问题。当程序变成函数print_taxi()时,taxilatlng[]中的所有数据将消失!似乎所有数据都只能保存在DirectionService.route(){}内。我需要帮助 <html> <head> <meta name="viewport" content="initial-scale=1.0, user-scalable=no" /> <script type=

我目前正在做一个关于出租车的项目。我想在谷歌地图上显示一些出租车,但遇到了以下问题。当程序变成函数print_taxi()时,taxilatlng[]中的所有数据将消失!似乎所有数据都只能保存在DirectionService.route(){}内。我需要帮助

<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>

onerror=handleErr
var txt=“”
函数handleErr(消息、url、l)
{
txt=“此页面上有错误。\n\n”
txt+=“错误:”+msg+“\n”
txt+=“URL:+URL+”\n
txt+=“行:”+l+“\n\n”
txt+=“单击“确定”继续。\n\n”
警报(txt)
返回真值
}
var centerat=22.551622;
var centerlng=114.121178;
var-taxi_num=10;
var-taxiradius=0.005;
var taxilatlng=新数组();
var taximarker=新数组();
var taxilat=新数组();
var taxilng=新数组();
var映射;
var随机数据初始化;
函数get_random(下限,上限){
返回lowerbound+Math.floor((上限lowerbound)*Math.random());
}
函数get_random_loc(现在,半径){
立即返回+radius Math.random()*2*radius;
}
函数get_random_latlng(滑行半径){
var tmp=new google.maps.LatLng(get_random_loc(centerlat,taxiradius),get_random_loc(centerlng,taxiradius));
返回tmp;
}
函数dump_obj(myObject){
var s=“”;
对于(myObject中的var属性){
s=s+“\n”+属性+”:“+myObject[属性];
}
警报;
}  
函数init_map()
{
var latlng=新的google.maps.latlng(centerlat,centerlng);
var期权={
缩放:16,
中心:拉特林,
mapTypeId:google.maps.mapTypeId.ROADMAP
};
map=new google.maps.map(document.getElementById(“map_canvas”),选项);
}
函数打印_taxi(){
image=“taxi.gif”;

for(var i=1;i
directionsservice.route
是一种回调方法,仅在i>taxi\u num之后调用。因此,taxilatlng中的值仅在索引(taxi\u 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