2012-01-29 221 views
0

我試圖在Google地圖上實時更新標記。我需要一個標記作爲起始位置,然後隨着位置變化(用戶移動),將繪製一條折線,並且一個標記將顯示當前位置。所以,每個用戶都會有兩個標記;一個顯示起始位置,一個不斷更新並顯示當前位置。在Google地圖上添加標記

我可以得到繪製的線條和開始標記,但每當位置發生變化時都會使用此代碼,而不是舊的標記被更新。我試圖使用setPosition();但它似乎並不奏效。有什麼想法嗎?

function initialize() { 
    var myLatlng = new google.maps.LatLng(39, -86); 
    var myOptions = { 
     zoom: 6, 
     center: myLatlng, 
     mapTypeId: google.maps.MapTypeId.ROADMAP, 
    }  
    var map = new google.maps.Map(document.getElementById("map_canvas"), myOptions); 

    var loc = {}; 
    var mark = {}; 
    var markers = {}; 

    $(function() { 
     $(document).ready(function(){ 
      setInterval(function(){ 
       $.ajax({          
        url: 'api.php',     //the script to call to get data   
        //data: "",      
        dataType: 'json',    //data format  
        success: function(data){   //on recieve of reply       


         var user_id = data[0]; 
         var lati = data[1];    //get id 
         var longi = data[2];   //get name 

         var myLatlngt = new google.maps.LatLng(lati, longi); 

         if (typeof loc[user_id] === 'undefined') { 
          loc[user_id] = []; 
          } 

         //if (typeof markers[user_id] === 'undefined') { 
          //markers[user_id] = []; 
          //} 

         if (typeof mark[user_id] === 'undefined') { 
          mark[user_id] = myLatlngt; 
          } 

         loc[user_id].push(myLatlngt); 
         //markers[user_id].push(myLatlngt); 
         var marker1; 
         var x; 
         for (x in loc) { 
          var polyline = new google.maps.Polyline({ 
           map: map, 
           path: loc[x], 
           strokeColor: "#FF0000", 
           strokeOpacity: 1.0, 
           strokeWeight: 2 
           }); 
          polyline.setMap(map); 

          ///location variables 
          var start_loc = loc[user_id]; 
          var start_marker = start_loc[0]; //start location of given user 
          var current_loc = start_loc[start_loc.length -1]; //last known location of given user 

          //set the start marker 
          var marker = new google.maps.Marker({ 
           position: start_marker, 
           title: user_id 
          }); 
          marker.setMap(map); 

          //update the current location marker 
          if (marker1 != null) { 
           marker1.setPosition(current_loc); 
          } 
          else { 
           marker1 = new google.maps.Marker({ 
            position: current_loc, 
            map: map 
           }); 
          }     
         } 
          //console.log('location :::', x); 
          console.log('Marker: ', mark); 
        } 
       }); 
      }, 1000); 
     }); 
    }); 
} 

回答

1

嘗試宣告你的MARKER1功能外變量(var marker1;),使其全球(範圍)。 var markers = {};之後應該這樣做。讓我知道如果這不起作用,我會深入研究它。

+0

它的工作!但現在我有另一個問題。如果我跟蹤兩個用戶,當前位置標記將從用戶跳轉到用戶,而不是每個用戶都有標記。任何想法爲什麼? – mkyong 2012-01-29 05:49:17

+0

嘗試創建兩個全局標記並相應地移動它們。 – 2012-01-29 06:39:32

+0

如果我想立即創建它們,該怎麼辦?就像我可以爲多個用戶創建多段線而不是創建一堆全局變量。 – mkyong 2012-01-29 06:58:06