javascript - 谷歌地图 - 定期更新标记

标签 javascript google-maps google-maps-api-3

已按照 googlemapsapi 教程显示标记,现在希望定期添加它们。看过Google Maps V3: Updating Markers Periodically但我只获取 map ,没有显示标记...我的代码如下...

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 = [];
}

最佳答案

步骤如下:

  • 获取 map 中没有的最新标记并将其添加:

    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);
    }
    

关于javascript - 谷歌地图 - 定期更新标记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32400679/

相关文章:

javascript - 单击标记时谷歌地图消失

javascript - 在Polygon的基础上获取 map 瓦片

javascript - 无法删除 Google Maps JS API 中的标记

javascript - 从ajax调用获取值后如何在if条件中打印成功的语句?

javascript - 使用复选框添加多个项目到数组 - redux React

javascript - AngularJS:当前指令实现直接使用变量中的模板,我有机会在这里使用 templateUrl 吗?

google-maps - 如何在静态谷歌地图上添加高分辨率自定义标记

java - Android - 如何在 Google map 上为 Google Logo 设置底部填充

google-maps - Google Maps API V3 - 通过点击事件更改圆半径

javascript - 如何绑定(bind)bind和load方法?