javascript - 过滤 Leaflet 中的 geojson 层不起作用

标签 javascript leaflet

我希望按年份过滤传单中的 geojson 层。此 geojson 层是使用 pointToLayer 从 geojson 文件创建的。

问题是,我不确定这个geoJsonLayer是不是一个数组?我对它的数据结构以及如何过滤它感到非常困惑。当我 console.log它,数据是这样嵌套的:

Object { options: Object, _layers: Object, _leaflet_id: 259, _initHooksCalled: true, _map: Object }

单击 _layers,我可以获得对象列表(这些是我当前在 map 上看到的显示点)。如果我单击其中一个对象,我就可以访问一个名为“Feature”的属性,它有一个名为“Properties”的属性,其中有一个属性列表:

info_city: Milwaukee

info_count: 1

info_date: 2002

这个名为“info_date”的属性是我要过滤的字段。

我尝试失败了 console.log来自 geoJsonLayers.residents 的属性使用 geoJsonLayers.residents.features.properties .

我尝试使用以下方式进行过滤:

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)
}
})

关于javascript - 过滤 Leaflet 中的 geojson 层不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40345351/

相关文章:

javascript - 使用 Promise 更新数据源时刷新 Kendo 图表

javascript - 如何通过javascript将客户端的dropDownList的值传递给webmethod

javascript - 为什么 Atom 文档使用 CoffeeScript,却用 JavaScript 生成包?

algorithm - 我如何制作边缘系统以便我可以实现 Dijkstra 或 A* 算法?

r - Shiny 的传单添加大量分离的多段线

javascript - 使用传单js设置地址数组的 View (无坐标)

javascript - 使用 HMAC 方法和 Google Apps 脚本生成带 key 的哈希值

javascript - 获取具有特定ID的元素的孙子

javascript - 如何更改传单上缩放按钮的不透明度?

javascript - 向交互式 Leaflet choropleth 添加更多值