【发布时间】:2020-06-01 04:19:27
【问题描述】:
我在我的反应应用程序中使用 openlayer 5.3.3。当用户单击图层选项时,我正在尝试动态更改图层的可见性。
var resolutions = new Array(14);
var matrixIds = new Array(14);
var size = getWidth(projectionExtent) / 256;
for (var z = 0; z < 14; ++z) {
// generate resolutions and matrixIds arrays for this WMTS
resolutions[z] = size / Math.pow(2, z);
matrixIds[z] = "EPSG:4326:" + (z - 1);
}
const constructSource = (layer) => {
var source = new WMTS({
url: geoserverUrl,
layer:layer,
matrixSet:"EPSG:4326",
format:"image/png",
projection: getProjection("EPSG:4326"),
tileGrid: new WMTSTileGrid({
origin: getTopLeft(projectionExtent),
resolutions: resolutions,
matrixIds: matrixIds,
}),
style: "",
wrapX: true,
});
return source;
};
var layersource = constructSource("layers:myLayer");
var layer1 = new TileLayer({
opacity: 0.7,
source: layersource,
visible: false,
});
var view = new View({
center: [29.94049072265625, -3.438720703125],
zoom: 8,
projection:getProjection("EPSG:4326"),
});
useEffect(() => {
map.current = new Map({
view,
layers: [layer1],
target: "map",
});
}, [map]);
useEffect(() => {
if (props.selectedLevel === "level2") {
console.log("check visibility here", layer1.getVisible()); // this results false
layer1.setVisible(true);
console.log("check visibility here 2", layer1.getVisible()); //this results true
}
}, [props.selectedLevel]);
return (
<div
id="map"
ref={(el) => (map = el)}
style={{ height: "100%", width: "80em" }}
></div>
);
layer1.getVisible 给出 true 但未显示该层。 layer1.setVisible(true) 工作,如果它在第一次重新加载时设置。
【问题讨论】:
-
我的感觉告诉我你想在你的应用程序/每个组件中调用一次
new Map。现在,每次map变量在第一个useEffect()调用中发生变化时,您都会首先创建一个新映射。map持有什么,它多久改变一次?您是否尝试使用空列表(而不是[map])调用useEffect? -
是的,没有变化。还是一样
标签: javascript reactjs openlayers postgis geoserver