我在传单中有一个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;
}
});
任何帮助都会受到超级赞赏,因为我已经尝试了一切!提前谢谢。
答案 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
仅适用于实例化或添加数据。