【发布时间】:2019-10-08 20:33:51
【问题描述】:
我每 15 秒调用一次 API,并更新循环内的标记位置。它可以工作,只是在更新后旧标记保留并且新标记堆叠在它上面。我想不出解决这个问题的逻辑。我尝试使用布尔值,但没有用。现在我正在检查 planeIcon 是否未定义,然后初始化一个新标记,如果已定义,则只需 .setPosition()。这没有给我任何错误,但图标根本不会出现在屏幕上或开始堆叠。我做错了什么?
var map, marker1, marker2, myLatlng, icon;
var boo = true;
var planeIcon = [];
function initMap() {
var infoWindow = new google.maps.InfoWindow();
// Create a new StyledMapType object, passing it an array of styles,
// and the name to be displayed on the map type control.
setInterval(
function () {
axios.get('http://localhost:8888/lsapp/public/planes/')
.then(function (response) {
var infowindow = new google.maps.InfoWindow();
var north = new google.maps.LatLng(90.0000, 0.0000);
var northPole = new google.maps.Marker({
position: {lat: 90.0000, lng: 0.0000},
map: map
});
northPole.setIcon({
path: google.maps.SymbolPath.FORWARD_CLOSED_ARROW,
scaledSize: new google.maps.Size(10, 10),
scale: 6
});
for (var i = 0; i < 50; i++) {
//console.log(response.data["states"][i]);
console.log(response.data["states"][i]);
var direction = new google.maps.LatLng(response.data["states"][i][6], response.data["states"][i][5]);
var heading = google.maps.geometry.spherical.computeHeading(direction, north);
myLatlng = new google.maps.LatLng(response.data["states"][i][6],response.data["states"][i][5]);
icon = {
path: "M 356.26958,135.02702 L 356.26958,249.31026 L 296.72689,289.12758 C 298.37366,285.78981 297.94877,282.22185 297.97085,278.70356 L 297.7704,238.6142 L 268.80878,238.44964 L 269.05561,285.18318 C ",
fillColor: '#111111',
fillOpacity: 1,
scaledSize: new google.maps.Size(0.01, 0.01),
rotation: heading + response.data["states"][i][10],
scale: 0.02
}
if(planeIcon.length > 0) {
for (var j = 0; j < planeIcon.length; j++)
planeIcon[j].setPosition(myLatlng);
} else {
planeIcon.push(new google.maps.Marker({
position: {lat: response.data["states"][i][6], lng: response.data["states"][i][5]},
map: map,
title: response.data["states"][i][1],
icon: icon
}));
}
console.log(planeIcon);
......
工作sn-p:https://codepen.io/Limpuls/full/rgpKjy
我创建了一个数组并将所有新的标记对象推送到它。然后我检查数组长度是否大于 0,如果没有,则只需 setLocation(),然后初始化新标记。不幸的是,它只输出一个平面而不是 50 个,并且每 15 秒它更新的不是平面位置,而是放置一个全新的随机平面位置。就像以前是泰国,然后是美国。
Axios 每 15 秒获取一次,您可以看到图标堆叠。
【问题讨论】:
标签: javascript loops google-maps-api-3 setinterval google-maps-api-2