0

私のGoogleマップは正しく表示されており、マップのセンタリングも魅力のように機能しています。しかし、マーカーを追加したい場合 (マップ全体をリロードしたくないマーカーのみ)、何も起こりません (マップ上にマーカーが表示されません)。

私のスクリプトは次のようになります。

function g_maps(){
    var map = new google.maps.Map(document.getElementById('map'), {
      zoom: 10,
      center: new google.maps.LatLng(48.2136522, 16.386172),
      mapTypeId: google.maps.MapTypeId.ROADMAP
    });
    var infowindow = new google.maps.InfoWindow();
}

function g_maps_marker(coordinates){
        var locations = [ coordinates ];
        var marker, i;

        for (i = 0; i < locations.length; i++) {  
          marker = new google.maps.Marker({
            position: new google.maps.LatLng(locations[i][1], locations[i][2]),
            map: map,
            visible: true
          });

          google.maps.event.addListener(marker, 'click', (function(marker, i) {
            return function() {
              infowindow.setContent(locations[i][0]);
              infowindow.open(map, marker);
            }
          })(marker, i));
        }
}

私の ajax リクエストの (重要な) 部分は次のようになります。

...
      success:function(data){
        $('#pagination_content table').empty();
        data = $.parseJSON(data);

        i = 1;
        coordinates = "";
        for(var i in data.results) {
        $('#content_table').append("blablabla");
        coordinates += "['" + data.results[i].title + "', " + data.results[i].lat + ", " + data.results[i].lat + ", " + i++ + "], ";
        };

        coordinates = coordinates.slice(0, -2)
        g_maps_marker(coordinates);
      },
...

の出力coordinatesは次のとおりです。

['abc', 48.1857442, 48.1857442, 0], ['xyz', 48.2136522, 48.2136522, 1]

関数g_mapsdocument.ready()イベントで呼び出されます。

API v3 を使用しています。

4

1 に答える 1

0

スライスcoordinates = coordinates.slice(0, -2);してから、このような座標から配列を作成していvar locations = [ coordinates ];ます。

私は少し混乱しています。sliceすでに配列を提供しているのに、なぜ配列を再度作成するのですか? ループが実行されると確信していますか?

から削除var locations = [ coordinates ];してからg_maps_marker、もう一度やり直してください。うまくいくことを願っています。

** 編集 **

コードをもう少し分析した後、配列のように見える文字列を使用しようとしていて、それをループしようとしていることがわかりました。これは機能しません。

例えば

    a = "[1, 2, 3]";

    b = [a];

    b[0][0]; // => will result in [ and not in your desired element

座標の配列オブジェクトを作成するには、次のコードを順番に使用する必要があります。

    i = 1;

    coordinates = [];

    for(var i in data.results)
    {
        $('#content_table').append("blablabla");

        var coordinate = [];

        coordinate.push(data.results[i].title);

        coordinate.push(data.results[i].lat);

        coordinate.push(data.results[i].lon);

        coordinates.push(coordinate);
    };

longitudeまた、座標配列の作成中に使用するのを忘れて、latitude2回使用したようです。私は自分のコードでこれを修正しました。

于 2013-06-04T19:24:30.560 に答える