过滤Leaflet中的geojson图层不起作用

时间:2016-10-31 15:29:47

标签: javascript leaflet

我在传单中有一个geojson图层,我希望按年过滤。此geojson图层是使用pointToLayer从geojson文件创建的。

问题是,我不确定这个geoJsonLayer是否是一个数组?我对它的数据结构非常困惑,因此,如何过滤它。当我在console.log中时,数据嵌套如下:

Object {options:Object,_layers:Object,_leaflet_id:259,_initHooksCalled:true,_ map:Object}

点击_​​layers,我就能得到一个对象列表(这些是我目前在地图上显示的点数)。如果我点击其中一个对象,我就可以访问一个名为“Feature”的属性,该属性有一个名为“Properties”的属性,它有一个属性列表:

info_city:密尔沃基

info_count:1

info_date:2002

此属性名为“info_date”,是我想要过滤的字段。

我试图使用'geoJsonLayers.residents.features.properties

从geoJsonLayers.residents控制.log中的属性失败

我尝试过滤使用:

function filterByYear(data, year) {
  f = data.filter(function(d) { 
    return d.properties.info_date == year;
  });
  return f;
}


filterByYear(geoJsonLayers.residents, 2009);

问题在于我认为上面的方法适用于数组,但是一旦我将geojson文件转换为geoJsonLayer,我的数据似乎不再是标准数组。它也不是字符串/数字问题,因为我已经尝试了两种选择。

我也尝试了以下方面:

var points = L.geoJson(geoJsonLayers.residents, {
            filter: function(feature, layer) {
                console.log(geoJsonLayers.residents)
                console.log(points)
                return feature.properties.info_date === 2010;
            }
        });

任何帮助都会受到超级赞赏,因为我已经尝试了一切!提前谢谢。

2 个答案:

答案 0 :(得分:1)

尝试类似这样的内容

var arr = [];//this array to hold your filterred object
geoJsonLayers.eachLayer(function(layer){
if(layer.feature.properties.info_date === 2010){
arr.push(layer)
}
})

答案 1 :(得分:1)

L.geoJSON工厂构建了Leaflet Layer Group对象。绝对不是常规Array

如果您希望获得该组中子图层的数组,可以使用points.getLayers()。您也可以使用points.eachLayer(cb)直接映射它们/在每个子图层上应用回调函数,如Aksav padwal的回答所示。

正如您所注意到的,L.geoJSON工厂会自动将您的GeoJSON数据添加到每个子图层的feature成员中。

现在,如果您希望过滤子图层以便可以在地图上显示它们,则应该根据需要构建尽可能多的图层组,可能在L.geoJSON工厂正在解析您的GeoJSON数据时,这样您就可以在地图中添加/删除这些图层组。

请参阅:leaflet map, getting specific data of geojson file with button

请注意,L.geoJSON选项filter仅适用于实例化或添加数据。