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假装是新的 JSON 数据,当点击地图(标记外)时,会获取“新数据”。

这是演示

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 回答