2012-08-29 45 views
1

的對象的任務是:從現有地理位置數據映射(一組緯度/經度值)監測使用小葉和GeoJSON的

顯示對象(標記)。地理數據定期更新,所以它就像是地圖上對象的一種交互式監視。

我使用單張框架達成的目標。另外我使用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(地理數據)對象。該過程一遍又一遍地重複,而要素的座標更新。

其實我不擅長JavaScript和只有這樣我可以解決的任務。但在我看來,它就像一個硬編碼,有可能是一些JavaScript方法更優雅解決問題。有人能給我一些建議(或想法)如何更好地做到這一點,甚至獲得更多的性能? 我將非常感謝任何幫助!

回答

3

你應該只使用L.layerGroup以及添加和從集合中刪除管理。或許還使用數據綁定框架緩存地圖視圖,這樣它會現場,而不是改變不必可能刷新。