ID的参考标记

时间:2012-07-15 00:05:45

标签: google-maps-api-3

我的地图上有一组标记,我试图通过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);

2 个答案:

答案 0 :(得分:1)

我倾向于在创建它们时将它们存储在一个对象数组中,并将任何其他信息(例如id)存储为对象的属性。因此,在适当的范围内创建一个标记数组(可能在json回调范围之外):

var markers = [];

var json = ...

  markers.push({
    id: //.. your unique id, or index
    obj: new google.maps.Marker(...
  });

答案 1 :(得分:0)

尝试这种方法:我假设您的JSON在订购标记时是一致的。 newData假装是新的JSON数据,当点击地图(在标记之外)时,会提取“新数据”。

这是demo

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());
    });

  });
}