1

任务是:

根据现有地理数据(一组纬度/经度值)在地图上显示对象(标记)。地理数据会定期更新,就像是对地图上对象的一种交互式监控。

我正在使用传单框架来实现目标。此外,我正在使用 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 方法可以更优雅地解决问题。有人可以给我一些建议(或想法)如何更好地做到这一点甚至获得更多性能吗?我将非常感谢任何帮助!

4

1 回答 1

3

您应该只使用 L.layerGroup 并从该集合中添加和删除以进行管理。也许还可以使用数据绑定框架来缓存地图视图,以便它可以实时更改,而不必刷新。

于 2012-11-15T20:34:22.953 回答