我在宣传单中有一个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 console.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;
}
});任何帮助都会非常感谢,因为我已经尝试了所有的方法!提前谢谢。
发布于 2016-11-01 00:35:10
尝试像这样的
var arr = [];//this array to hold your filterred object
geoJsonLayers.eachLayer(function(layer){
if(layer.feature.properties.info_date === 2010){
arr.push(layer)
}
})发布于 2016-11-01 09:58:20
L.geoJSON工厂构建一个Leaflet图层组对象。它绝对不是一个普通的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仅在实例化或添加数据时有效。
https://stackoverflow.com/questions/40345351
复制相似问题