2015-09-04 94 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秒调用一次该函数。