我一直坚持创建一个函数来处理已加载的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
的数据源?
感谢您的帮助!
答案 0 :(得分:1)
您必须更改图层的来源以刷新地图内容:
onClick("gender", function() {
// clear filteredGeoJSON
filteredGeoJSON = {
type: "FeatureCollection",
features: []
};
filteredSource = new VectorSource({
features: filterGeoJSON("protestantisch", "f")
})
filteredLayer.setSource(filteredSource);
})
请参见here.