【发布时间】:2015-12-20 07:39:39
【问题描述】:
我正在使用Leaflet JS 构建一个交互式地图查看器,可以跟踪多个设备的移动。我正在使用 JSON 数据为每个标记设置纬度和经度。
JSON 数据如下所示:
{"BMS":[{"id":"PR01","type":"prajurit","lat":"-6.248008","long":"107.004158"},{"id":"PR02","type":"prajurit","lat":"-6.224084","long":"106.653069"},{"id":"PR03","type":"kendaraan","lat":"-6.244316","long":"106.649734"}]}
数据包含来自 3 个设备的位置信息。
我已经使用for 循环成功地根据设备的纬度和经度设置了标记。但我无法用setLatLng 和for 循环更新标记的移动。我不想每次获得位置更新时都使用清除图层功能添加新标记,因为我需要保存每个设备的移动历史以供以后使用。我应该怎么做才能让它工作?任何建议将不胜感激。
这是我的代码。 setInterval 旨在连续运行代码。我尝试使用数组变量作为标记变量,并标记每个标记(因为使用 windows[variable_name] 是不好的做法)。
window.setInterval(function(){
++z;
//alert(z);
function doSomething(data){
jsonBmsData = JSON.parse(data);
}
$.get('get_jsondata.php', doSomething);
if(z == 1){
for(var i=0; i<jsonBmsData.BMS.length; ++i){
marker[i][0] = jsonBmsData.BMS[i].id;
marker[i][1] = jsonBmsData.BMS[i].type;
marker[i][2] = jsonBmsData.BMS[i].lat;
marker[i][3] = jsonBmsData.BMS[i].long;
markerMove[i] = L.marker([marker[i][2],marker[i][3]])
.bindPopup('ID Prajurit = ' + marker[i][0] + '<br>Tipe = ' + marker[i][1]
+ '<br>Lat = ' + [marker[i][2] + '<br>Long = ' + marker[i][3])
.addTo(map);
}
} else if(z > 1){
for(var j=0; j<jsonBmsData.BMS.length; ++j){
marker[j][0] = jsonBmsData.BMS[j].id;
marker[j][1] = jsonBmsData.BMS[j].type;
marker[j][2] = jsonBmsData.BMS[j].lat;
marker[j][3] = jsonBmsData.BMS[j].long;
var newLatLng = new L.latLng(marker[j][2],marker[j][3]);
markerMove[j].setLatLng(newLatLng).update();
markerMove[j]._popup.setContent('ID Prajurit = ' + marker[j][0] + '<br>Tipe = ' + marker[j][1]
+ '<br>Lat = ' + [marker[j][2] + '<br>Long = ' + marker[j][3]);
}
}
},50);
【问题讨论】:
-
嗯,有什么问题吗?您的第二个循环不起作用?拨打
markerMove[j].setLatLng(newLatLng).update();不起作用?我看到在您的第二个循环中,您初始化了j=0,条件是您使用i,但j变量永远不会更新。 -
@xxxmatko,感谢您的指正。我编辑了代码。是的,
markerMove[j].setLatLng(newLatLng).update();没有给我任何结果。我做错了吗?需要你的帮助。
标签: javascript json dictionary leaflet