【问题标题】:Clear old marker(s) then update [duplicate]清除旧标记然后更新[重复]
【发布时间】:2017-11-28 19:24:33
【问题描述】:

以下是我网站的代码。它每秒刷新一次。刷新新的 lat/lng 后,它将加载新标记,但保留旧标记。我试过很多论坛等都没有运气。感谢任何帮助。

function initialize() {

var mapOptions = {
    center: new google.maps.LatLng(-36.363, 175.044),
    zoom: 5,
    mapTypeId: google.maps.MapTypeId.ROADMAP
}; 

var infoWindow = new google.maps.InfoWindow();
map = new google.maps.Map(document.getElementById("map_canvas"), mapOptions); 
window.setInterval(function() {
        readData();
    }, 1000);
}
   function readData() {

    $.getJSON('https://crossorigin.me/http://radar1.ddns.net:3080/data/aircraft.json', function (data) {
        $.each(data.aircraft, function (i, value) {



            var myLatlng = new google.maps.LatLng(value.lat, value.lon, value.flight, value.altitude);
        var marker = new google.maps.Marker({
                position: myLatlng,
                icon: 'airplane.jpg',
                map: map,
                title: "Callsign   Altitude  " + value.flight + value.altitude


            });

}

            var infowindow = new google.maps.InfoWindow({
                 content: '<b>Speed:</b> ' + value.speed+  '<b>   HEX:</b>' + value.hex+ '<b>   Altidtude:   </b>' +value.altitude + '<b>    Vertical Rate:  </b>' +value.vert_rate


});

 google.maps.event.addListener(marker, 'click', function() {
 infowindow.open(map, marker);
});






        });
    });

}

【问题讨论】:

  • 谢谢克里斯,我已经编辑了这个问题。标记正在显示,但当它们刷新时,我希望删除旧的。
  • 创建一个标记数组。在您的$.each 中,致电marker[i].setPosition(...)

标签: javascript google-maps


【解决方案1】:

以下是创建/更新标记和 infoWindows 的方法:

var infoWindows = {};
var markers = {};

function initMap() {
  var mapOptions = {
    center: new google.maps.LatLng(-36.363, 175.044),
    zoom: 5,
    mapTypeId: google.maps.MapTypeId.ROADMAP
  };
  map = new google.maps.Map(document.getElementById("map_canvas"), mapOptions);
  window.setInterval(readData, 1000);
}

function text(value) {
  return '<b>Speed: </b> ' + value.speed + '<br><b>HEX: </b>' + value.hex + '<br><b>Altitude: </b>' + value.altitude + '<br><b>Vertical Rate: </b>' + value.vert_rate;
}

function createInfoWindow(value, marker, map) {
  iw = new google.maps.InfoWindow({
    content: text(value)
  });
  google.maps.event.addListener(marker, 'click', function() {
    iw.open(map, marker);
  });
  return iw;
}

function readData() {
  $.getJSON('https://crossorigin.me/http://radar1.ddns.net:3080/data/aircraft.json', function(data) {
    $.each(data.aircraft, function(i, value) {
      var myLatlng = new google.maps.LatLng(value.lat, value.lon, value.flight, value.altitude);
      if (markers[value.squawk]) {
        markers[value.squawk].setPosition(myLatlng);
        console.log("moving marker for " + value.squawk);
        infoWindows[value.squawk].setContent(text(value));
      } else {
        // create new
        markers[value.squawk] = new google.maps.Marker({
          position: myLatlng,
          // icon: 'airplane.jpg',
          map: map,
          title: "Callsign: " + value.flight + ", Altitude: " + value.altitude
        });
        console.log("creating marker for " + value.squawk);
        infoWindows[value.squawk] = createInfoWindow(value, markers[value.squawk] ,map)
      }
    });
  });
}

【讨论】:

  • 非常感谢!我现在遇到的一个问题是 InfoWindows 没有打开。关于如何解决的任何想法?谢谢。
  • 当然,将 InfoWindows 的代码添加回我的示例代码中。
  • 嗨,克里斯,不知道我做错了什么,但我仍然无法打开它们。
  • 我把它们加回来了,试试上面更长的版本。
  • 非常感谢克里斯,非常感谢!
猜你喜欢
  • 2019-08-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-06
  • 1970-01-01
  • 2012-12-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多