每隔一段时间加载标记

时间:2014-02-11 12:38:11

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

在我的项目中,我有一个谷歌地图,我需要从数据库中获取地图上的标记。 我有简单的代码,例如:

var geocoder;
var map;
function initialize() {
  geocoder = new google.maps.Geocoder();
  var latlng = new google.maps.LatLng(-34.397, 150.644);
  var mapOptions = {
    zoom: 8,
    center: latlng
  }
  map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions);
}

function codeAddress() {
  var address = document.getElementById('address').value;
  geocoder.geocode( { 'address': address}, function(results, status) {
    if (status == google.maps.GeocoderStatus.OK) {
      map.setCenter(results[0].geometry.location);
      var marker = new google.maps.Marker({
          map: map,
          position: results[0].geometry.location
      });
    } else {
      alert('Geocode was not successful for the following reason: ' + status);
    }
  });
   google.maps.event.addListener(map, 'idle', function () { 
         getmarkers(map);

        }); 
}

google.maps.event.addDomListener(window, 'load', initialize);

此代码运行良好,但缺少一个 - 只有在用户移动地图时才会加载新标记。 但是如果用户只是坐在电脑前看地图而不是移动它,我也需要加载标记。

我认为最好的方法是使用setInterval(getmarkers(map), 3000),但如果我使用它,除了那个函数google.maps.event.addListener(...,它找不到地图。有什么方法可以解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

有两个问题,

  1. setInterval期望第一个参数是一个函数(但它不是,它是一个函数调用,它将立即执行)。使用匿名函数执行语句:

    setInterval(function(){getmarkers(map);}, 3000);
    
  2. setInterval - 调用放在initialize的末尾,以确保定义了地图。