2012-07-15 74 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()); 
    }); 

    }); 
}