如何过滤从Omnivore(csv)提供的Mapbox.js标记

时间:2016-03-13 00:35:39

标签: jquery leaflet mapbox

Hiya我试图过滤一些从omnivore.js中提取的标记。我试图遵循这个啧啧https://www.mapbox.com/mapbox.js/example/v1.0.0/markers-with-multiple-filters/

但我一直收到错误:

  

markers.setFilter不是函数

<script>
    L.mapbox.accessToken = '*******';
    var map = L.mapbox.map('map', 'mapbox.streets').setView([38, -95], 4);

    var markers = omnivore.csv('/test.csv', L.mapbox.featureLayer())
        .on('ready', function(layer) {

            this.eachLayer(function(marker) {
                if (marker.toGeoJSON().properties.AGE > '70') {
                    marker.setIcon(L.mapbox.marker.icon({
                        'marker-color': '#258369',
                        'marker-size': 'large'
                    }));
                } else {
                    marker.setIcon(L.mapbox.marker.icon({}));
                }
                marker.bindPopup(marker.toGeoJSON().properties.FN + ', ' +
                    marker.toGeoJSON().properties.LN + ', ' + marker.toGeoJSON().properties.GENDER);
            });
        }).addTo(map);
    console.log(markers);

    $('.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');
        markers.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;
    });

</script>

我的CSV包含一些属性,我希望用它来过滤此结果。当我console.log标记时,我看到它们在Layers-&gt; feature-&gt;属性中传递到数组内。

现在,教程和我的实现之间的区别在于我使用的是Omnivore而不是setGeoJson。我不知道它是否重要,但这包含在laravel 5.2的blade.php模板中 提前感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

我怀疑这是因为markers变量的结果是omnivore.csv(),这是一个普通的L.GeoJSON对象,而不是地图集要素图层。

leaflet-omnivore API说:

  

默认情况下,库将在内部构建L.geoJson()图层

这就是为什么你不能使用markers.setFilter()

您可以事先为markers变量分配一个新的L.mapbox.featureLayer(),并将其作为customLayer的第三个参数(omnivore.csv)传递。

请注意,您还缺少第二个参数parser_options(请参阅传单 - 杂食性API)。

var markers = L.mapbox.featureLayer();

omnivore.csv('/test.csv', {}, markers).on(/* etc. */);

如果这不能解决您的问题,请尝试提供一个JSFiddle或Plunker来重现您的问题和错误消息。