Манипулировать данными GeoJSON - перезагрузить векторный слой в OpenLayers - PullRequest
0 голосов
/ 16 ноября 2018

Я застрял при создании функции, которая манипулирует загруженными данными GeoJSON и обновляет карту OpenLayers. Пока у меня есть карта, которая работает с данными, отфильтрованными из загруженного файла GeoJSON. Как изменить векторный слой для использования обновленных данных?

Это мой код:

  • загрузить GeoJSON fullGeoJSON:

    var fullGeoJSON = require("./data/data.json");
    
  • создать var отфильтрованныйGeoJSON

    var filteredGeoJSON = {
        "type": "FeatureCollection",
        "features": []
    };
    
  • заполнить пустым features, отфильтровав fullGeoJSON

    function filterGeoJSON(religion, gender) {
        fullGeoJSON.features.forEach(function (feature) {
            if (
                feature.properties.religion == religion &&
                feature.properties.gender == gender
            ) {
                filteredGeoJSON.features.push(feature);
            }
        });
    }
    
  • определить источник вектора

    var filteredSource = new VectorSource({
        features: new GeoJSON().readFeatures(filteredGeoJSON, {
            featureProjection: "EPSG:3857"
        })
    });
    
  • определить новый векторный слой, используя источник

    var filteredLayer = new VectorLayer({
        source: filteredSource
    });
    

определение карты (mainMap) с использованием векторного источника. Карта хорошо отображает только показанные функции, оставшиеся после фильтрации ввода JSON

Теперь я ищу способ изменить filteredGeoJSON нажатием кнопки, вызвав filterGeoJSON () с другими параметрами, и использовать этот измененный источник данных для обновления filteredSource и, следовательно, filteredLayer. То, что у меня пока есть:

onClick("gender", function () {
    // clear filteredGeoJSON
    (filteredGeoJSON = {
        type: "FeatureCollection",
        features: []
    });
    filterGeoJSON("protestantisch", "f"); // call filterGeoJSON again
    mainMap.refresh(); // <- Something like this?
});

Как заставить OpenLayers использовать измененный filteredGeoJSON из функции onClick в качестве источника данных для моего mainMap?

Спасибо за вашу помощь!

1 Ответ

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

Вы должны изменить источник слоя, чтобы обновить содержимое карты:

onClick("gender", function() {
   // clear filteredGeoJSON
   filteredGeoJSON = {
      type: "FeatureCollection",
      features: []
   };
   filteredSource = new VectorSource({
      features: filterGeoJSON("protestantisch", "f")
   })
  filteredLayer.setSource(filteredSource);
})

См. здесь.

...