Leaflet 筛选标记为其指定新ID

Leaflet 筛选标记为其指定新ID,leaflet,mapbox,Leaflet,Mapbox,我正在尝试构建一个映射,用户可以使用GeoJSON对象的一些属性过滤标记。过滤器工作正常,问题是每次我应用过滤器时,都会为标记分配新ID,正如运行以下示例时在控制台中看到的: im应用过滤器的方式基本上如Mapbox示例中所述: $('.menu-ui a').on('click', function() { // For each filter link, get the 'data-filter' attribute value. var filter = $(this).

我正在尝试构建一个映射,用户可以使用GeoJSON对象的一些属性过滤标记。过滤器工作正常,问题是每次我应用过滤器时,都会为标记分配新ID,正如运行以下示例时在控制台中看到的:

im应用过滤器的方式基本上如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示例:

有没有办法避免标记ID被更改


谢谢

正如Ilja所建议的,传单ID是一个内部细节-传单库中任何以
\uu
为前缀的东西都意味着它不是外部API的一部分,也不是您可以指望保持稳定的东西。过滤标记将删除并重新创建图层,从而更改ID。最好的办法是直接在GeoJSON数据中添加ID,并依赖它们。

简单的答案是:不要更改它们。如何生成标识符?它们可以从GeoJSON数据中继承吗?我不会改变它们,是库在做这件事。但是你的评论让我想知道是否有办法手动分配ID。也许那样的话,他们不会改变。我会调查一下的。你有没有尝试过类似于onEachFeature:function(f,l){l._fid=f.id;}?(很抱歉没有阅读您在JSFIDLE上的代码)@IljaZverev是的,我的解决方案最终是重复该功能,在过滤器发生更改时基本上重建featureLayer。最后我做了一些更简单的事情,在过滤器更新时基本上重建featureLayer。Tks。