繁体   English   中英

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

[英]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.geoJSONL.geoJSON工厂自动将您的GeoJSON数据添加到每个子图层的feature成员中。

现在,如果您希望过滤子图层,以便可以在地图上显示或不显示子图层,则应该根据需要构建尽可能多的图层组,这可能是在L.geoJSON工厂解析GeoJSON数据时进行的,以便您可以添加从地图上删除这些图层组。

请参阅: 传单地图,通过按钮获取geojson文件的特定数据

请注意, L.geoJSON选项filter仅在实例化或添加数据时起作用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM