2015-09-04 90 views
2

已遵循googlemapsapi教程顯示標記,現在正在尋找定期添加它們。已經看過Google Maps V3: Updating Markers Periodically但我只得到了地圖,並沒有標記顯示....我的代碼如下...谷歌地圖 - 定期更新標記

function load() { 
    //map object 
     var map = new google.maps.Map(document.getElementById("map"), { 
     center: {lat: 54.870902, lng: -6.300565}, 
     zoom: 14 
     }); 
     //first call to get and process initial data 
     downloadUrl("Map.php", processXML); 
    } 
    function processXML(data){ 
    //method to retrieve information via ajax 
     var xml = data.responseXML; 
     var markers = xml.documentElement.getElementsByTagName("marker"); 
     //clear markers before adding new ones 
     resetMarkers(markersArray); 

     for(var i =0; i<markers.length; i++){ 
      var point = new google.maps.LatLng(
        parseFloat(markers[i].getAttribute("lat")), 
        parseFloat(markers[i].getAttribute("lng"))); 
      var marker = new google.maps.Marker({ 
       map:map, 
       position: point 
      }); 
      //store marker object in new array 
      markersArray.push(marker); 
      marker.setMap(map); 

    } 
    //set timeout 
    setTimeout(function() { 
     downloadUrl("Map.php", processXML); 
    }, 1000); 

} 

//cleatr existing markers from map 
function resetMarkers(arr){ 
    for(var i = 0; i<arr.length; i++){ 
     arr[i].setMap(null); 
    } 
    //reset the main marker array 
    arr = []; 
} 
+0

檢查控制檯是否顯示了一些JavaScript錯誤 – scaisEdge

+0

沒有答案,但希望值得一看。 https://rawgit.com/allenhwkim/angularjs-google-maps/master/testapp/marker_dynamic_ng_repeat.html。有關完整的文檔,請http://ngmap.github.io – allenhwkim

回答

0

這是爲我工作 - 只是通過包含在數組中的標記迭代,但setTimeout的每次迭代之間暫停....

//store marker object in new array 
       markersArray.push(marker); 
     }   
       //update markers periodically 
       for (var x = 0; x < markersArray.length; x++) { 
       setTimeout(function(y) { 
        markersArray[y].setMap(MY_MAP);   
       }, x*10000, x); 
      } 
1

步驟如下:

  • 獲取最新標記,是不是在地圖上,並將其添加:

    var marker = new google.maps.Marker({ 
        position: locations[i].latlng, 
        map:map, 
        title:locations[i].hour 
    }); 
    markers.push(marker); 
    bounds.extend(locations[i].latlng); 
    google.maps.event.addListener(marker, 'click', (function(marker, i) { 
        return function() { 
         infowindow.setContent(
         '<strong>Data: ' + locations[i].Data + '<br>Hour: ' + locations[i].hour + '<br></strong>Aproximate speed: ' + locations[i].speed + ' K/H<br>Aproximate radius: ' + locations[i].radius + ' meters <br>ISP: ' + locations[i].isp+ '<br>Latitude: ' + locations[i].latlng 
        ); 
         infowindow.open(map, marker); 
        } 
    })(marker, i)); 
    
  • 通過setInterval如大家上面提到的最後更新:

    var map; 
    var markers = []; 
    
    setInterval(refreshMap, 3000); 
    
    function initialize() { 
        var mapOptions = { 
         zoom: 12, 
         center: new google.maps.LatLng(54.870902,-6.300565), 
         mapTypeId: google.maps.MapTypeId.ROADMAP 
        }; 
        map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions); 
        var locations = []; 
    
        $.get("getmarkers.php", function(response){ 
        for(var i = 0; i < response.markers.length; i++) { 
         var marker = response.markers[i]; 
         var myMarker = { 
         Data: marker.Data, 
         latlng: new google.maps.LatLng(marker.lat, marker.lon), 
         hour: marker.hour, 
         radius: marker.radius, 
         isp: marker.isp, 
         speed: marker.speed 
         }; 
    
         locations.push(myMarker); 
         addMapMarker(myMarker); 
        } 
        },'json'); 
    
        markerClusterer = new MarkerClusterer(map, markers, { 
        maxZoom: 16, 
        gridSize: 60 
        }); 
        map.fitBounds(bounds); 
    } 
    
0

首先,我不知道這是否是你的代碼或格式化,但括號似乎有點過,是關閉{for循環失蹤的?

據我所知,setTimeout在processXML()函數內部,所以它應該被遞歸地調用,對吧?如果是這樣,請檢查控制檯是否有錯誤並檢查右括號。

如果否,則將setTimeout更改爲setInterval,以便每1秒調用一次該函數。