Google maps api 3 使用php数组中的多个标记的Google地图

Google maps api 3 使用php数组中的多个标记的Google地图,google-maps-api-3,Google Maps Api 3,Hi拥有一系列城市,希望使用JavaScriptAPI v3创建谷歌地图。 当页面加载时,地图会一直跳转到每个标记。此外,地图变得非常小,即使我已经为它设置了高度和宽度 <script> var geocoder; var map; var timeout = 600; var address_position = 0; var address = [ <?php foreach($cities_in_country as $item)

Hi拥有一系列城市,希望使用JavaScriptAPI v3创建谷歌地图。 当页面加载时,地图会一直跳转到每个标记。此外,地图变得非常小,即使我已经为它设置了高度和宽度

<script>
var geocoder;
var map;
var timeout = 600;
var address_position = 0;
var address = [
     <?php
        foreach($cities_in_country as $item)
        {
            echo '"'.$item['name'].'",';
        }       
     ?>             
     ];

    function addMarker(position)
    {
        geocoder.geocode({'address': address[position]}, function(results, status)
        {
            address_position++;
            if (address_position < address.length)
            {
                setTimeout(function() { addMarker(address_position); }, (timeout));
            }
            if (status == google.maps.GeocoderStatus.OVER_QUERY_LIMIT)
            {
                setTimeout(function() { addMarker(position); }, (timeout * 3));
            }
            else if (status == google.maps.GeocoderStatus.OK) 
            {   map.setCenter(results[0].geometry.location);                
                var marker = new google.maps.Marker({
                    position: results[0].geometry.location,
                    map: map,                   
                    icon:"<?=base_url()?>assets/goo/images/icons/marker.png",                            
                });           
            } 
        });
    }


function codeaddress() {

    geocoder = new google.maps.Geocoder();
    var latlng = new google.maps.LatLng(-34.397, 150.644);
    var myOptions = {
      zoom: 6,
      center: latlng,      
     navigationControlOptions: {style: google.maps.NavigationControlStyle.SMALL},
     mapTypeId: google.maps.MapTypeId.ROADMAP,      
    }   
    map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);

     addMarker(address_position);


}

$(document).ready(function() {      
    codeaddress();

}); 
</script>

var地理编码器;
var映射;
var超时=600;
变量地址\位置=0;
变量地址=[
];
功能添加标记(位置)
{
geocoder.geocode({'address':address[position]},函数(结果,状态)
{
地址_位置++;
if(地址位置<地址长度)
{
setTimeout(函数(){addMarker(地址位置);},(超时));
}
if(status==google.maps.GeocoderStatus.OVER\u QUERY\u LIMIT)
{
setTimeout(function(){addMarker(position);},(timeout*3));
}
else if(status==google.maps.GeocoderStatus.OK)
{map.setCenter(结果[0].geometry.location];
var marker=new google.maps.marker({
位置:结果[0]。geometry.location,
地图:地图,
图标:“assets/goo/images/icons/marker.png”,
});           
} 
});
}
函数代码地址(){
geocoder=新的google.maps.geocoder();
var latlng=新的google.maps.latlng(-34.397150.644);
变量myOptions={
缩放:6,
中心:拉特林,
navigationControlOptions:{style:google.maps.NavigationControlStyle.SMALL},
mapTypeId:google.maps.mapTypeId.ROADMAP,
}   
map=new google.maps.map(document.getElementById(“map_canvas”),myOptions);
addMarker(地址\位置);
}
$(文档).ready(函数(){
代码地址();
}); 


“地图一直跳到每个标记。”-这是因为您调用了
map.setCenter(结果[0].geometry.location)在循环的addMarker函数中。删除该行,它将停止重新居中地图

而且,你应该改变这一点;有一种危险是,如果您超过查询限制,那么您将继续调用addMarker,超时时间更长

        if (address_position < address.length)
        {
            setTimeout(function() { addMarker(address_position); }, (timeout));
        }
        if (status == google.maps.GeocoderStatus.OVER_QUERY_LIMIT)
        {
            setTimeout(function() { addMarker(position); }, (timeout * 3));
        }
if(地址位置
应该是

if (address_position < address.length)
{
    if (status == google.maps.GeocoderStatus.OVER_QUERY_LIMIT)
    {
        setTimeout(function() { addMarker(position); }, (timeout * 3));
    } else {
        setTimeout(function() { addMarker(address_position); }, (timeout));
    }
}
if(地址位置
if (address_position < address.length)
{
    if (status == google.maps.GeocoderStatus.OVER_QUERY_LIMIT)
    {
        setTimeout(function() { addMarker(position); }, (timeout * 3));
    } else {
        setTimeout(function() { addMarker(address_position); }, (timeout));
    }
}