操纵GeoJSON数据-在OpenLayers中重新加载矢量图层

时间:2018-11-16 20:53:59

标签: javascript openlayers geojson

我一直坚持创建一个函数来处理已加载的GeoJSON数据并更新OpenLayers Map。到目前为止,我所拥有的地图可以处理从加载的GeoJSON文件中过滤出的数据。如何更改矢量层以使用更新的数据?

到目前为止,这是我的代码:

  • 加载GeoJSON fullGeoJSON

    var fullGeoJSON = require("./data/data.json");
    
  • 创建varfilteredGeoJSON

    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后遗留下来

现在,我正在寻找一种方法,通过单击带有不同参数的filterGeoJSON()来单击按钮来更改filteredGeoJSON,并使用更改后的数据源刷新filteredSource,从而刷新filteredLayer。到目前为止,我有:

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

如何强制OpenLayers将onClick函数中更改的filteredGeoJSON用作我的mainMap的数据源?

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

您必须更改图层的来源以刷新地图内容:

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

请参见here.