2012-08-29 10 views
1

Задачи:Мониторинга объектов с использованием листовки и GeoJSON

Показать объекты (маркеры) на карте от существующих данных гео (набор Шира/значений). Данные геоданных обновляются через регулярные промежутки времени, поэтому это похоже на некий интерактивный мониторинг объектов на карте.

Я использую рамку лифтов, чтобы достичь цели. Также я использую geoJson для вывода геоданных (объекты с координатами lat/long). Вот мой фрагмент кода:

// 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, чтобы более эффективно решить проблему. Может ли кто-нибудь дать мне совет (или идею), как сделать это лучше или даже получить больше производительности? Буду очень признателен за любую помощь!

ответ

3

Вы должны просто использовать L.layerGroup и добавлять и удалять из этой коллекции для управления. Возможно, также используйте структуру привязки данных для кэширования вида карты, чтобы она изменилась в реальном времени, а не могла обновиться.

 Смежные вопросы

  • Нет связанных вопросов^_^