【问题标题】:Leaflet map: filtering by year传单地图:按年份过滤
【发布时间】:2016-09-22 16:49:57
【问题描述】:

我以前在这里发布过这个问题,但可能遗漏了一些上下文,所以我要再试一次!我有四个 geojson 层,每个层都是数组格式。要访问这些层中的信息,它似乎是这样嵌套的:layers-object-features-properties。

这是一个数据结构示例:

{
"type": "Feature",
"properties": {
"info_city": "Wuerzburg",
"info_date": 2009,
"info_status": "fac"
},

我要过滤的属性是 date ,在我的数据中,它是字段“info_date”。我编写了以下函数,随机选择一个年份作为测试过滤。这将链接到我地图上的范围滑块栏,范围从 1971 年到 2016 年。

function filterByYear(data){
    console.log(data)
    f = data.filter(function(d){ return d.features.properties.info_date === '2016';})
    console.log(f) 
    return f;
    }

顺便说一句,我也尝试过使用 underscore.js,但无济于事:

f=_.filter(data, function(d) { return d.properties.info_date == 2016; });

所以,我在索引范围滑块的地方调用这个函数,就像这样,使用层 geoJsonLayers.fellows 作为输入。

    if (index == 2015) {
    filterByYear(geoJsonLayers.fellows)
  } 

什么都没有发生,并且在 filterByYear 函数中,我能够控制台.log(数据),但没有控制台(f)。我在这里做错了什么?而且,有没有一种更简单的按年份过滤的方法,因为我真正想做的是在用户通过范围滑块移动时进行过滤,即当 index = 1980 时,只会显示“info_date” == 1980 的数据.

【问题讨论】:

    标签: javascript jquery leaflet geojson


    【解决方案1】:

    您的问题可能是使用“严格相等”进行过滤检查。在您的数据结构中,info_date 是一个 整数,但您正在严格检查 字符串 '2016'

    尝试使用== 而不是===,看看是否能解决您的问题。您也可以尝试检查 2016 而不是 '2016'


    编辑:如果您想解决动态检查年份的问题,可以将年份作为参数传递给filterByYear

    function filterByYear(data, year) {
      f = data.filter(function(d) { 
        return d.features.properties.info_date == year;
      });
      return f;
    }
    

    编辑 2:使用(大约)您的示例数据对我有用。

    k = [{
      "type": "Feature",
      "properties": {
        "info_city": "Wuerzburg",
        "info_date": 2009,
        "info_status": "fac"
      }
    },{
      "type": "Feature",
      "properties": {
        "info_city": "Berlin",
        "info_date": 2016,
        "info_status": "fac"
      }
    }];
    
    function filterByYear(data, year) {
      f = data.filter(function(d) { 
        return d.properties.info_date == year;
      });
      return f;
    }
    
    
    filterByYear(k, 2009); // Returns array of one object
    filterByYear(k, 2016); // Returns array of one object
    filterByYear(k, 2008); // Returns empty array
    

    【讨论】:

    • 谢谢威尔!不过还是没有运气。我试过你的建议。我认为数据可能以一种奇怪的方式嵌套,它无法访问数据。不过,我不确定我会如何展示它。
    • 您在浏览器中工作吗?在filterByYear()的开头可以console.log(data)查看对象的结构并弄清楚info_date是如何嵌套的。
    • 会 - 谢谢,我已经尝试过这样做,并且我认为我对结构有更好的处理,但我似乎仍然无法在 'filterByYear()' 函数中记录任何内容(按年份过滤)。例如,当我尝试使用 console.log 'd' 或 'f' 来查看发生了什么情况时,没有任何显示。我不确定这是为什么。因此,这似乎是它可能会崩溃的地方。
    • 查看我的“编辑 2”。您应该能够直接将其复制到控制台并使其正常工作。然后,代替k,使用您的实际数据并编辑d.properties.info_date 部分以匹配您的数据结构。请记住,filterByYeardata 参数必须是一个数组。
    • 谢谢威尔!因此,在进行了更多挖掘并看到您的回复之后,看来我的数据结构可能并不像我想象的那么简单。基本上,我有一个名为“geoJsonLayers”的数组,它由 4 层组成。当我控制台“geoJsonLayers”时,我得到 4 层:对象 { 居民:对象,教师:对象,居民研究员:对象,研究员:对象 }
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-15
    • 2017-06-29
    • 2023-03-24
    • 2021-03-24
    • 1970-01-01
    • 2015-09-20
    • 1970-01-01
    相关资源
    最近更新 更多