0

私はGoogleMapsAPI V2を使用しています(私は知っていますが、現在のコードを編集しているので、V2で作業する必要があります)。私のマーカーはすべて正しい場所を指していますが、髪を引っ張るのに近づいた問題は1つだけです。

問題は、すべてのマーカーが1つだけ正しく表示されているのに、情報ウィンドウには1つのコンテンツしかないことです。つまり、情報ウィンドウは更新されていません。それらは正しくポップアップしますが、それらすべてに同じ情報があります。

私は他のいくつかのフォーラムでこの問題を見て、解決策も試しましたが、役に立ちませんでした。

以下は、私のphpスクリプトからjsonでエンコードされたPHP文字列をフェッチし、それをループしてGoogleマップにマーカーを表示するためのコードです。

function showAddress(address) {

var response=$.ajax({
      type: "POST",
      url: "<?php echo WEBROOT; ?>/index/ajaxMaps",
      data: {address : escape(address)},
      cache: false,
      async:false,
      dataType: "json",
      success: function (html) {           

          for(i in html){

              if (geocoder) {
                  geocoder.getLatLng(
                    unescape(html[i].businessAddress),
                    function(point) {
                      if(!point) {

                        //alert(address + " not found");

                      } else {

                        map.setCenter(point, 11);

                          string='<div style="height:100px; background:green; color:white; padding:5px; border-radius:0.5em; width:auto"><strong>Company name : </strong>'+ html[i].businessName;
                          string+='<br/><strong>Adress : </strong>'+ html[i].businessAddress;
                          string+='<br/><strong>Website : </strong>'+'<a style="color:white !important" href="'+html[i].businessWebsite+'" >'+'Visit our website'+'</a></div>';

                        var marker = createMarker(point, string);

                        map.addOverlay(marker);

                        //map.addMapType(G_PHYSICAL_MAP);

                        map.addControl(new GLargeMapControl());

                        // As this is user-generated content, we display it as
                        // text rather than HTML to reduce XSS vulnerabilities.

                        marker.openInfoWindowHtml(string);

                        //$('.map_enlarged').trigger('click');
                      }
                    }
                  );
                }

            }           

      }

    });


 $('.map_enlarged').trigger('click');

}

マーカーを追加するための関数:

function createMarker(point,html) {

    // Create our "tiny" marker icon
   var blueIcon = new GIcon(G_DEFAULT_ICON);
   blueIcon.image = "<?php echo WEBROOT; ?>images/marker.png";

    // Set up our GMarkerOptions object
    markerOptions = { icon:blueIcon };

    var marker = new GMarker(point,markerOptions);

    GEvent.addListener(marker, "click", function() {
    marker.openInfoWindowHtml(html);

  });

  return marker;
}

変数名' string 'が更新されていないことを知っています。しかし、その理由はわかりません。私はそれをループまでさかのぼりましたが、更新されるべきではない理由はわかりません。

上記のコードのほとんどが大丈夫になるように十分に掘り下げたことを覚えておいてください。可能であれば、私のコードの間違いを指摘してください。他のリンクを提供することは、私がすでにそれらを見たかもしれないので、役に立たないかもしれません。

私はその解決策に感謝します。

4

1 に答える 1

1

「i」(ジオコーダーへの入力パラメーターを閉じる)で別の関数クロージャーが必要です。

このでは、その問題を解決しますが、クエリ制限の問題は解決しません(実際には、多数の住所をその場でジオコーディングし、オフラインでジオコーディングして、結果の座標を保存するべきではありません)。

于 2012-06-29T12:51:38.933 に答える