2012-07-15 59 views
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); 
+0

显示你的代码,将减少工作让我尽力帮助:) – 2012-07-15 00:12:37

+0

编辑我的帖子 - 也许这将解释吧:)在adavance谢谢 - – randmatt 2012-07-15 00:46:59

+0

如何是这些标志物产生的?它们是否在您发布的'getJSON'中创建? JSON是否包含每个标记的ID?是的,您需要对每个标记进行单独引用,然后调用像'markerRef.setPosition(new google.maps.LatLng(value.lat,value.lng));'。如果这没有足够的帮助,请向我展示更多代码和部分JSON。 – 2012-07-15 00:53:52

回答

1

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

var markers = []; 

var json = ... 

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

我会试试看......如果没有办法只是将地图映射到'findmarkerbyid'(或类似的东西),看起来像我必须走的路。 – randmatt 2012-07-15 01:03:40

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

    }); 
}