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 に答える