我有以下程序从txt文件中读取飞机坐标,并在Google地图上放置一些标记。它每2秒再次读取txt文件并将标记推送到新的飞机位置。这适用于原始标记"移动"到新职位。我想做的是在标记上添加一个标签,以显示每架飞机的高度。要做到这一点,我需要在读取txt文件后生成标签,但是当我这样做时,不会删除旧标记,但会添加新标记。
下面的代码部分工作正常,但没有变量标签。相关代码是创建var eplanezero的地方。如果我在setInterval(function()中的任何地方移动这行代码{eplanezero.setPosition将无法正常运行。我已经尝试了几十种不同但似乎没有任何工作。任何想法都很感激。请注意,这只是一部分代码。
moveMarker(map, playerIcon, enemyIcon);
}
function moveMarker(map, playerIcon, enemyIcon)
{
var eplanezero = new google.maps.Marker({map: map, icon: enemyIcon, label: "1"});
setInterval(function ()
{
$.post("MISSION_ADMIN_radar.txt", function(dataenemy, status)
{
var latlnge = JSON.stringify(dataenemy);
latlnge = latlnge.replace(/"/g,"");
latlnge = latlnge.replace(/[\\r\\n]/g,"");
CoordsEnemy = latlnge.split(";");
var army = parseFloat(CoordsEnemy[0].substring(0));
if (army == 2)//Own army = 1, Enemy = 2
{
var commaPos = CoordsEnemy[0].indexOf(',');
var hyphenPos = CoordsEnemy[0].indexOf('+');
var lat0 = parseFloat(CoordsEnemy[0].substring(4, commaPos));
var long0 = parseFloat(CoordsEnemy[0].substring(commaPos + 1, CoordsEnemy[0].length));
}
eplanezero.setPosition(new google.maps.LatLng(lat0, long0));
});
}, 2000);
高度是从保持lat和long的相同数组中获得的。但是,要将变量Alt放入标记中,我必须在setInterval函数中创建变量eplanezero,以便每2秒更新一次。当我执行此操作时,它不会移动标记,但添加一个新标记,将原始标记保留在旧位置。
修订后的代码如下:
function moveMarker(map, playerIcon, enemyIcon)
{
//var eplanezero = new google.maps.Marker({map: map, icon: enemyIcon, label: "1"});
var eplanezero = new google.maps.Marker({map: map, icon: enemyIcon, label: Alt});
setInterval(function ()
{
$.post("MISSION_ADMIN_radar.txt", function(dataenemy, status)
{
var latlnge = JSON.stringify(dataenemy);
latlnge = latlnge.replace(/"/g,"");
latlnge = latlnge.replace(/[\\r\\n]/g,"");
CoordsEnemy = latlnge.split(";");
var army = parseFloat(CoordsEnemy[0].substring(0));
if (army == 2)//Own army = 1, Enemy = 2
{
var commaPos = CoordsEnemy[0].indexOf(',');
var hyphenPos = CoordsEnemy[0].indexOf('+');
var Alt0 = parseFloat(CoordsEnemy[0].substring(hyphenPos + 1 , CoordsEnemy[0].length));
var lat0 = parseFloat(CoordsEnemy[0].substring(4, commaPos));
var long0 = parseFloat(CoordsEnemy[0].substring(commaPos + 1, CoordsEnemy[0].length));
var eplanezero = new google.maps.Marker({map: map, icon: enemyIcon, label: Alt});
}
eplanezero.setPosition(new google.maps.LatLng(lat0, long0));
});
}, 2000);
答案 0 :(得分:0)
.setPosition必须是一个查看数组并检查以前坐标的方法。如果数组不包含任何坐标,则会在新坐标处放置新标记。如果数组确实包含坐标,则会将标记“移动”到新位置。在循环内建立数组会删除任何先前的数组和坐标,因此Google Map会正确放置新标记。只有通过在循环外创建数组才能使方法正常工作。不幸的是,这意味着一旦创建了数组,就无法更改标签或图标。