OpenLayers создают слои из GeoJSON по свойству - PullRequest
0 голосов
/ 11 ноября 2018

Я хочу использовать OpenLayers v5.3.0 для создания веб-приложения.

Я могу показать все объекты из внешнего файла GeoJSON в виде векторного слоя над слоем OSM, но мой файл GeoJSON содержит тысячи объектов, каждая из которых обогащена множеством свойств.

То, на что я обращаю внимание, - это способ проанализировать файл GeoJSON, отфильтровать его по свойствам (например, все объекты со свойством "gender": "f", или "ethnic_gro": "Latvian",) и отобразить только те из них, которые указаны в качестве дополнительного векторного слоя выше. мой OSM Base Layer.

Это пример моего файла GeoJSON (сокращенно, только с одной функцией):

{
  "type": "FeatureCollection",
  "features": [
    {
      "type": "Feature",
      "geometry": {
        "type": "LineString",
        "coordinates": [
          [23.114870000000053, 56.845980000000134],
          [19.131050000000164, 50.65641000000013]
        ]
      },
      "properties": {
        "OID_": "0",
        "ethnic_gro": "Latvian",
        "religion": "protestant",
        "marital_st": "widow",
        "status_in_": "NULL",
        "gender": "f",
      }
    }
  ]
}

Спасибо за любую помощь!

1 Ответ

0 голосов
/ 11 ноября 2018

Вы можете использовать фильтр массива javascript в исходном массиве объектов для создания нового объекта GeoJSON:

var filteredGeoJSON = {
  "type": "FeatureCollection",
  "features": fullGeoJSON.features.filter(function(feature){
     return (feature.properties.ethnic_gro == "Latvian" && feature.properties.gender == "f");
  })
};

или используйте цикл forEach для построения фильтрованного массива:

var filteredGeoJSON = { 
  "type": "FeatureCollection",
  "features": []
};
fullGeoJSON.features.forEach(function(feature){
  if (feature.properties.ethnic_gro == "Latvian" && feature.properties.gender == "f") {
    filteredGeoJSON.features.push(feature);
  }
});
...