2

マップ上に一連のマーカーがあり、それらの位置を ajax 呼び出しから更新しようとしています... ajax 呼び出しは正常に機能し、新しい値をループできます。ただし、マーカーを参照する方法 (ID など) が見つからないため、latLng を更新できます。

基本的に最後に私がする必要があります.. 1.) 一意の ID でマーカーへの参照を取得する 2.) すべてのマーカーをループする可能性があります

事前に感謝します-私は新しいので、始めるのに少し助けが必要です-うまくいけば、できるときに善意を伝えることができます:)

以下の ajax のコード - マーカーの位置の変更に関する部分は、方法がわからない部分です。そのため、以下のコードでは、位置を更新する必要がある場所に新しいマーカーを追加するだけです。

var json = $.getJSON("json/tracking.php",function(data){

        console.log("updated");

        $.each(data,function(key,value){
        //console.log(value.unit + " " + value.lat + " " + value.lng);

        new google.maps.Marker({
        map:map,
        position: new google.maps.LatLng(value.lat,value.lng),
        });


        });
    })
    .success(function(){
        //console.log("success");
        })
    .error(function(){
        //console.log("error");
        })
    .complete(function(){
        //console.log("complete");
    });
},2000);
4

2 に答える 2

1

私はこれらをオブジェクトの配列に格納し、他の情報 (id など) をオブジェクトのプロパティとして格納する傾向があります。したがって、適切なスコープ (おそらく json コールバックのスコープ外) にマーカー配列を作成します。

var markers = [];

var json = ...

  markers.push({
    id: //.. your unique id, or index
    obj: new google.maps.Marker(...
  });
于 2012-07-15T00:55:07.570 に答える
0

このアプローチを試してください: マーカーの順序付けにおいて JSON が一貫していると想定しています。newDataマップが(マーカーの外側で)クリックされると、「新しいデータ」が取得されます。

デモはこちら

function initialize() {
  map = new google.maps.Map(document.getElementById("map_canvas"), mapOptions);


  var data = [{unit:1, lat:0, lng:0},
              {unit:2, lat:10, lng:0},
              {unit:3, lat:20, lng:0}
             ];

  var newData = [{unit:1, lat:0, lng:10},
                 {unit:2, lat:10, lng:20},
                 {unit:3, lat:20, lng:30}
                ];


  var markers = {};

  $.each(data,function(key,value){
    //console.log(value.unit + " " + value.lat + " " + value.lng);

    markers[key] = markers[key] || new google.maps.Marker({ map: map });
    markers[key].setPosition(new google.maps.LatLng(value.lat,value.lng));
    markers[key].setTitle(value.unit.toString());
  });

  google.maps.event.addListener(map, 'click', function() {
    $.each(newData,function(key,value){
      //console.log(value.unit + " " + value.lat + " " + value.lng);

      markers[key] = markers[key] || new google.maps.Marker({ map: map });
      markers[key].setPosition(new google.maps.LatLng(value.lat,value.lng));
      markers[key].setTitle(value.unit.toString());
    });

  });
}
于 2012-07-15T01:16:10.360 に答える