0

さて、私はDBからフェッチするすべての位置に対して呼び出されるこのコードを持っています。マーカーをクリックするたびに、情報ウィンドウにそれぞれのマーカー情報が表示されますが、情報ウィンドウの位置は常に最後のものです。マーカーが追加されました。ナットシェルの情報は問題ありませんが、どこにあるべきかが示されていません。

これら2つは、マップが初期化されてグローバルになるときに宣言されます。

var infowindow = new google.maps.InfoWindow();
var geocoder=new google.maps.Geocoder

これはスクリプトです

function addRoleMarker(lat,lng,rumbo,codigo,velocidad,nE,referer,utc,fecha)
{
 var myLatLng = new google.maps.LatLng(lat, lng);
var title='No.'+nE+' '+utc;

baseMarker = new google.maps.Marker({
        position: myLatLng,
        map: map,
    title: title,
    zIndex: 1
    });

    google.maps.event.addListener(baseMarker,'click',function(){
            geocoder.geocode({'latLng': myLatLng}, function(results, status) {
            if (status == google.maps.GeocoderStatus.OK) {
                if (results[0]) {
                switch(rumbo)
                {
                case 0:
                rumbo='N';
                break;  
                case 1:
                rumbo='NE';
                break;
                case 2:
                rumbo='E';
                break;
                case 3:
                rumbo='SE';
                break;
                case 4:
                rumbo='S';
                break;
                case 5:
                rumbo='SO';
                break;
                case 6: 
                rumbo='O';
                break;
                case 7:
                rumbo='NO';
                break;
                }

            var tablaR="<table><tr><td>Fecha:</td></tr><td>"+fecha;
            tablaR+="</td><tr><td>Fecha UTC:</td></tr><td>"+utc;
            tablaR+="</td><tr><td>Velocidad:</td></tr><td>"+velocidad;
            tablaR+="</td><tr><td>Rumbo:</td></tr><td>"+rumbo;
            tablaR+="</td><tr><td>Direccion:</td></tr><td>"+results[0].formatted_address;
            infowindow.setContent(tablaR);
            infowindow.open(map,baseMarker);
                }else{
                  alert("No results found");
                }
            }else{
                alert("Geocoder failed due to: " + status);
              }});});
}

マーカーの数は、SQLクエリに従ってフェッチされたデータによって異なります。これはphpスクリプトです。

<?
$script="<script type='text/javascript'>";

    for($i=0;$i<count($losDatos);$i++)
    {
    $script.="addRoleMarker(".$losDatos[$i]['latitud'].",".$losDatos[$i]['longitud'].",".$losDatos[$i]['rumbo'].",".$losDatos[$i]['codigo'].",".$losDatos[$i]['velocidad'].",".$losDatos[$i]['numeroEconomico'].",1,'".$losDatos[$i]['utcDate']."','".$losDatos[$i]['localDate']."');";
    }

$script.='</script>';
echo $script;
?>
4

1 に答える 1

1

提案を行うにはコード全体を確認する必要がありますが、リスナーを1つの「baseMarker」に追加するだけのようです。したがって、infoWindow.open(map、baseMarker)は同じマーカーで開きます。作成するすべてのマーカーにリスナーを追加する必要があると思います。

于 2011-03-08T20:10:53.833 に答える