更新谷歌地图标记位置

时间:2017-09-17 17:50:56

标签: javascript php jquery google-maps timer

情景:从下拉列表中选择城市,让用户访问该城市并显示其位置。

现在,我遇到的部分是用户位置每两分钟更新一次。

如何每两分钟更新地图上的标记位置

首先我初始化了地图。

var map; 
function initialize() {
  map = new google.maps.Map(document.getElementById('map'), {
    zoom: 2,
    mapTypeId: google.maps.MapTypeId.ROADMAP
  });
}

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

选择更改ajax请求获取基于城市的位置并在地图上显示它们。成功后,我会获得位置将这些位置提供给数组,然后将数组传递给 position: new google.maps.LatLng(positions[i].lat, positions[i].lng),。哪个工作正常。

$(document).ready(function () {
  $('.selectCity').change(function () {
    var city = $(this).val();
    $.ajax({
      type: 'GET',
      url: '/riders/location/track',
      data: {
        'city': city
      },
      success: function (data) {
        var positions = [];
        $.each(data.riders, function(index, value) {
            positions.push({
                lat: value.rider_location.lat,
                lng: value.rider_location.lng,
                content: value.name
            });
        });
        map.setCenter({
          lat: parseInt(positions[0].lat),
          lng: parseInt(positions[0].lng)
        });
        var infowindow = new google.maps.InfoWindow();
        var marker,
        i;
        for (i = 0; i < positions.length; i++) {
          marker = new google.maps.Marker({
            position: new google.maps.LatLng(positions[i].lat, positions[i].lng),
            map: map,
          });
          google.maps.event.addListener(marker, 'click', (function (marker, i) {
            return function () {
              infowindow.setContent(positions[i].content);
              infowindow.open(map, marker);
            }
          }) (marker, i));
        }
      }
    });
  });
});

如何每两分钟更新一次地图上的标记位置。因为数据库中的位置每两分钟更新一次。

1 个答案:

答案 0 :(得分:1)

假设你的其余部分工作我重新调整了一点;现在,它可以随时随地调用。如果有效,请告诉我

function updateMarkers() {
    var city = $('.selectCity').val(); // we do not have 'this' available anymore
    $.ajax({
        type: 'GET',
        url: '/riders/location/track',
        data: {
            'city': city
        },
        success: function(data) {
            var positions = [];
            $.each(data.riders, function(index, value) {
                positions.push({
                    lat: value.rider_location.lat,
                    lng: value.rider_location.lng,
                    content: value.name
                });
            });
            map.setCenter({
                lat: parseInt(positions[0].lat),
                lng: parseInt(positions[0].lng)
            });
            var infowindow = new google.maps.InfoWindow();
            var marker,
                i;
            for (i = 0; i < positions.length; i++) {
                marker = new google.maps.Marker({
                    position: new google.maps.LatLng(positions[i].lat, positions[i].lng),
                    map: map,
                });
                google.maps.event.addListener(marker, 'click', (function(marker, i) {
                    return function() {
                        infowindow.setContent(positions[i].content);
                        infowindow.open(map, marker);
                    }
                })(marker, i));
            }
        }
    });

}
var my_timer = null;
$(document).ready(function() {
    $('.selectCity').change(function() {
        // var city = $(this).val();
        updateMarkers();
        clearInterval(my_timer);  // this cancels the previous interval
        my_timer = setInterval(function() { updateMarkers(); }, 120000);
    });
    my_timer = setInterval(function() { updateMarkers(); }, 120000);
});