3

マーカーがクリックされたときにマーカーのアイコンを動的に変更しようとしています。マップ上に複数のマーカーがあり(データベースクエリを通じて収集されます)、これは現在使用しているコードです-すべてかなり標準的なものです:

function initialize() {
        var myOptions = {
          center: new google.maps.LatLng(-30,135),
          zoom: 4,
          mapTypeId: google.maps.MapTypeId.ROADMAP
        };
        var map = new google.maps.Map(document.getElementById("map"),
            myOptions);
        var bikeicon = "images/bike.png";


    <?php
    $result=mysql_query("select * from sites");
    while($row=mysql_fetch_assoc($result)){
        ?>
        marker = new google.maps.Marker({
        position: new google.maps.LatLng(<?php echo $row['Latitude']; ?>, <?php echo $row['Longitude']; ?>),
        map: map, icon: bikeicon});

        infoWindow = new google.maps.InfoWindow();

        marker.html="<?php echo stripslashes($row['ShortDesc']); ?>";

        google.maps.event.addListener(marker, 'click', function(){
            //show infowindow
            infoWindow.setContent(this.html);
            infoWindow.open(map, this);
            //change icon color
            var icon = new google.maps.MarkerImage({ url:"http://jovansfreelance.com/bikestats/images/bike_red.png"});
                this.setIcon(icon);     //why doesn't this work?

        })
        <?php
    }
    ?>

}

infoWindowコードは正常に機能しますが、seticonコードはマーカーを非表示にし、新しいマーカーアイコンを表示しません。ブラウザで開くとわかるように、新しいアイコンのURLは有効です。

では、なぜこのコードが機能しないのか誰かに教えてもらえますか?

4

1 に答える 1

5

MarkerImage は、url を含むオブジェクトではなく、url を最初のパラメータとして想定しています。

ただし、MarkerImage の使用は避ける必要があります。非推奨です。

URL を setIcon に直接渡すこともできます。

可能な方法(すべて同じ結果が得られます):

  //MarkerImage オブジェクトを使用する
 this.setIcon(アイコン);    

  //単純にURLを使用
 this.setIcon('http://jovansfreelance.com/bikestats/images/bike_red.png');  
//google.maps.Icon-object
  を使用
 this.setIcon({url:'http://jovansfreelance.com/bikestats/images/bike_red.png'});

 
于 2013-01-23T19:03:03.463 に答える