任务是:
根据现有地理数据(一组纬度/经度值)在地图上显示对象(标记)。地理数据会定期更新,就像是对地图上对象的一种交互式监控。
我正在使用传单框架来实现目标。此外,我正在使用 geoJson 输出 geoData(具有纬度/经度坐标的对象)。这是我的一段代码:
// for a start make it as a template
var geoData = {
"type": "FeatureCollection",
"features": []
};
// add a feature, assign an id and properties
function addFeature(id, latitude, longitude, properties) {
// first of all check if the feature have already exists
var index = IndexOfItem(id);
if (index >= 0) {
// if exists then update only coordinates and properties
geoData.features[index].geometry.coordinates = [longitude, latitude];
geoData.features[index].properties.popupContent = properties;
} else {
// add new feature
var feature = {
"type": "Feature",
"geometry": {
"type": "Point",
"coordinates": [longitude, latitude]
},
"properties": {
"popupContent": properties
},
"id": id
};
geoData.features.push(feature);
}
}
// search and return the index of feature if exists
function IndexOfItem(id) {
for (var i = 0; i < geoData.features.length; i++) {
if (id == geoData.features[i].id) {
return i;
}
};
return -1;
}
这段代码工作正常。之后,我添加了这些特征的新层,当数组更新时(一些特征改变了坐标),我必须从地图中删除层并创建一个新的 L.geoJson(geoData) 对象。该过程一遍又一遍地重复,而要素的坐标会更新。
实际上我不擅长 JavaScript,只有这样我才能解决这个任务。但在我看来,这就像一个硬编码,可能有一些 JavaScript 方法可以更优雅地解决问题。有人可以给我一些建议(或想法)如何更好地做到这一点甚至获得更多性能吗?我将非常感谢任何帮助!