2015-09-04 2 views
2

Следовали учебному пособию googlemapsapi для отображения маркеров, и теперь вы хотите добавить их периодически. Посмотрел на Google Maps V3: Updating Markers Periodically, но я только получаю карту, и никаких маркеров не отображая .... Мой код выглядит следующим образом ...google maps - периодически обновлять маркеры

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

Во-первых, я не знаю, если это ваш код или форматирование, но скобки кажутся откусил, является закрытие {из за петли не хватает?

Как я понимаю, setTimeout находится внутри функции processXML(), поэтому его следует называть рекурсивно, правильно? Если это так, проверьте консоль на наличие ошибок и проверьте закрывающие скобки.

Если нет, измените setTimeout на setInterval, чтобы функция вызывается каждые 1 секунду.

Смежные вопросы