#leaflet #mapbox
#листовка #mapbox
Вопрос:
Я пытаюсь создать карту, на которой пользователь может фильтровать маркеры, используя некоторые свойства объекта GeoJSON. Фильтр работает нормально, проблема в том, что каждый раз, когда я применяю фильтр, маркерам присваиваются новые идентификаторы, как вы можете видеть в консоли при запуске следующего примера:
http://jsfiddle.net/lmartins/z8wBW/
Способ применения фильтра, по сути, таков, как описано в примерах Mapbox:
$('.menu-ui a').on('click', function() {
// For each filter link, get the 'data-filter' attribute value.
var filter = $(this).data('filter');
$(this).addClass('active').siblings().removeClass('active');
systemLocations.setFilter(function(f) {
// If the data-filter attribute is set to "all", return
// all (true). Otherwise, filter on markers that have
// a value set to true based on the filter name.
return (filter === 'all') ? true : f.properties[filter] === true;
});
return false;
});
Пример Mapbox можно найти здесь: https://www.mapbox.com/mapbox.js/example/v1.0.0/markers-with-multiple-filters /
Каким-либо образом я могу избежать изменения идентификаторов маркеров?
Спасибо
Комментарии:
1. Простой ответ: просто не меняйте их. Как вы генерируете идентификаторы? Могут ли они быть унаследованы от данных GeoJSON?
2. Я не меняю их, это делает библиотека. Но ваш комментарий заставил меня задуматься, есть ли способ вручную назначить идентификаторы. Возможно, в этом случае они не изменились бы. Я изучу это.
3. Вы пробовали что-то вроде
onEachFeature: function(f, l) { l._fid = f.id; }
? (Извините, что не прочитал ваш код в jsfiddle)4. @IljaZverev да, мои решения в конечном итоге повторяли эту функцию, по существу перестраивая FeatureLayer всякий раз, когда фильтры меняются
Ответ №1:
Как предполагает Илья, идентификаторы листовок являются внутренней деталью — все, что имеет префикс a _
в библиотеке листовок, означает, что оно не является частью внешнего API и не является чем-то, на стабильность чего вы можете рассчитывать. Фильтрация маркеров удаляет и воссоздает слои и, таким образом, изменяет идентификаторы. Лучшим способом было бы напрямую добавлять идентификаторы в ваши данные GeoJSON и полагаться на них.
Комментарии:
1. В итоге я сделал что-то более простое, по существу перестроив FeatureLayer при обновлении фильтров. Tks.