宣传单地图:按年

时间:2016-09-22 16:49:57

标签: javascript jquery leaflet geojson

好的,我有一个doozie所以任何帮助非常感谢。我之前在这里发过这个问题,但可能省略了一些背景,所以我要再试一次!我有四个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函数中,我能够使用console.log(数据),但是(f)没有任何控制台。我在这做错了什么?并且,是否有一种更容易的方法按年过滤,因为我真正想要做的是当用户在范围滑块中移动时进行过滤,即当index = 1980时,仅显示“info_date”== 1980的数据。任何帮助在这里非常感谢!谢谢。

1 个答案:

答案 0 :(得分: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