[英]Filtering a geojson Layer in Leaflet not working
我在传单中有一个geojson图层,希望按年份进行过滤。 这个geojson图层是使用pointToLayer从geojson文件创建的。
问题是,我不确定此geoJsonLayer是否为数组? 我对它的数据结构以及如何对其进行过滤感到非常困惑。 当我console.log它时,数据是这样嵌套的:
对象{选项:对象,_layers:对象,_leaflet_id:259,_initHooksCalled:true,_map:对象}
单击_layers,我可以获得对象列表(这些是我当前在地图上看到的点)。 如果单击对象之一,则可以访问名为“功能”的属性,该属性具有名为“属性”的属性,该属性具有属性列表:
info_city:密尔沃基
info_count:1
信息日期:2002年
此属性称为“ info_date”,是我要过滤的字段。
我尝试使用'geoJsonLayers.residents.features.properties来console.log来自geoJsonLayers.residents的属性失败
我尝试使用以下方法进行过滤:
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;
}
});
由于我已尝试了所有方法,对您的任何帮助都将非常感谢! 提前致谢。
尝试这样的事情
var arr = [];//this array to hold your filterred object
geoJsonLayers.eachLayer(function(layer){
if(layer.feature.properties.info_date === 2010){
arr.push(layer)
}
})
L.geoJSON
工厂构建一个Leaflet Layer Group对象。 绝对不是常规的Array
。
如果您希望获得该组points.getLayers()
图层的数组,则可以使用points.getLayers()
。 您也可以使用points.eachLayer(cb)
直接将它们映射/在每个子层上应用回调函数,如Aksav padwal的答案所示。
如您L.geoJSON
, L.geoJSON
工厂自动将您的GeoJSON数据添加到每个子图层的feature
成员中。
现在,如果您希望过滤子图层,以便可以在地图上显示或不显示子图层,则应该根据需要构建尽可能多的图层组,这可能是在L.geoJSON
工厂解析GeoJSON数据时进行的,以便您可以添加从地图上删除这些图层组。
请参阅: 传单地图,通过按钮获取geojson文件的特定数据
请注意, L.geoJSON
选项filter
仅在实例化或添加数据时起作用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.