2012-01-29 178 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