OpenLayers - 更改视图时地图消失
OpenLayers - Map is gone when changing view
我对具有相同视图的不同地图使用相同的图层定义。我有两个问题:
(1) 当我用 osm 定义添加一个新的 div 时(见下文),旧的 osm-view 不见了。
当我在 2019 复选框之后选中 2018 复选框时,会发生这种情况。之前右边div满屏,osm可见
(2) 当我尝试移动视图时,图层完全消失了。
如果我单击地图并拖动它以更改视图,地图就会消失。
这是我的代码:
html 这部分:
<div id="mapcontainer">
<div id="map0"></div>
<div class="third" id="third2018">
<div id="map2018" class="map"></div>
</div>
<div class="third" id="third2019">
<div id="map2019" class="map"></div>
</div>
<div class="third" id="third2020">
<div id="map2020" class="map"></div>
</div>
JS:
注意:复选框的 ID 为 2018 2019 2020。
var center_start = [495445, 5715029];
var zoom_start = 8;
var projection25832 = new ol.proj.Projection({
code: 'EPSG:25832',
// The extent is used to determine zoom level 0. Recommended values for a
// projection's validity extent can be found at https://epsg.io/.
extent: [-1877994.66, 3932281.56, 1836715.13, 9440581.95],
units: 'm'
});
var topo = new ol.layer.Tile({
source: new ol.source.TileWMS({
url:"https://sgx.geodatenzentrum.de/wms_topplus_open?",
params:{
'LAYERS': "p25",
'TILED': false
}
})
});
var osm = new ol.layer.Tile({
source: new ol.source.TileWMS({
url: 'https://ows.terrestris.de/osm-gray/service?',
params: {
'LAYERS': "OSM-WMS",
'VERSION': '1.1.0',
'FORMAT': 'image/png',
'TILED': false
}
})
}) ;
var view = new ol.View({
projection: projection25832,
center: center_start,
zoom: zoom_start
});
var map2018 = new ol.Map({
target: 'map2018',
layers: [osm],
view: view
});
var map2019 = new ol.Map({
target: 'map2019',
layers: [osm],
view: view
});
var map2020 = new ol.Map({
target: 'map2020',
layers: [osm],
view: view
});
// add Map 0
var map0 = new ol.Map({
target: 'map0',
layers: [osm],
view: view
});
var Mapcount = 0;
/////////
$("#2018").change(function (){
if ($("#2018").is(':checked')){
Mapcount = Mapcount + 1;
document.getElementById('map0').style.display='none';
document.getElementById('third2020').style.width = "calc(100%/" + Mapcount +")";
document.getElementById('third2019').style.width = "calc(100%/" + Mapcount +")";
document.getElementById('third2018').style.width = "calc(100%/" + Mapcount +")";
document.getElementById('third2018').style.display = 'block';
map2018.updateSize();
}else{
Mapcount = Mapcount -1;
document.getElementById('third2018').style.display = 'none';
if(Mapcount === 0){
document.getElementById('map0').style.display='block';
map0.updateSize();
}else{
document.getElementById('third2020').style.width = "calc(100%/" + Mapcount +")";
document.getElementById('third2019').style.width = "calc(100%/" + Mapcount +")";
document.getElementById('third2018').style.width = "calc(100%/" + Mapcount +")";
map2018.updateSize();
map2019.updateSize();
map2020.updateSize();
};
};
});
$("#2019").change(function (){
if ($("#2019").is(':checked')){
Mapcount = Mapcount + 1;
document.getElementById('map0').style.display='none';
document.getElementById('third2020').style.width = "calc(100%/" + Mapcount +")";
document.getElementById('third2019').style.width = "calc(100%/" + Mapcount +")";
document.getElementById('third2018').style.width = "calc(100%/" + Mapcount +")";
document.getElementById('third2019').style.display = 'block';
map2019.updateSize();
}else{
Mapcount = Mapcount -1;
document.getElementById('third2019').style.display = 'none';
if(Mapcount === 0){
document.getElementById('map0').style.display='block';
map0.updateSize();
}else{
document.getElementById('third2020').style.width = "calc(100%/" + Mapcount +")";
document.getElementById('third2019').style.width = "calc(100%/" + Mapcount +")";
document.getElementById('third2018').style.width = "calc(100%/" + Mapcount +")";
map2018.updateSize();
map2019.updateSize();
map2020.updateSize();
};
};
});
$("#2020").change(function (){
if ($("#2020").is(':checked')){
Mapcount = Mapcount + 1;
document.getElementById('map0').style.display='none';
document.getElementById('third2019').style.width = "calc(100%/" + Mapcount +")";
map2019.updateSize();
document.getElementById('third2018').style.width = "calc(100%/" + Mapcount +")";
map2018.updateSize();
document.getElementById('third2020').style.width = "calc(100%/" + Mapcount +")";
document.getElementById('third2020').style.display = 'block';
map2020.updateSize();
}else{
Mapcount = Mapcount -1;
document.getElementById('third2020').style.display = 'none';
if(Mapcount === 0){
document.getElementById('map0').style.display='block';
map0.updateSize();
}else{
document.getElementById('third2020').style.width = "calc(100%/" + Mapcount +")";
document.getElementById('third2019').style.width = "calc(100%/" + Mapcount +")";
document.getElementById('third2018').style.width = "calc(100%/" + Mapcount +")";
map2018.updateSize();
map2019.updateSize();
map2020.updateSize();
};
};
});
编辑:当只显示 map0 时,我可以拖动地图和缩放等。
显然我不能在不同的地图中使用相同的图层,或者至少在我将 osm2018 osm2019 和 osm2019 作为图层并在各自的地图中添加后它按预期工作。
如果有其他解决方案,我仍然很乐意使用它。
您不能重复使用图层,但可以重复使用来源
var osmSource = new ol.source.TileWMS({
url: 'https://ows.terrestris.de/osm-gray/service?',
params: {
'LAYERS': "OSM-WMS",
'VERSION': '1.1.0',
'FORMAT': 'image/png',
'TILED': false
}
});
然后在每个地图中使用
layers: [new ol.layer.Tile({
source: osmSource
})],
我对具有相同视图的不同地图使用相同的图层定义。我有两个问题: (1) 当我用 osm 定义添加一个新的 div 时(见下文),旧的 osm-view 不见了。
当我在 2019 复选框之后选中 2018 复选框时,会发生这种情况。之前右边div满屏,osm可见
(2) 当我尝试移动视图时,图层完全消失了。 如果我单击地图并拖动它以更改视图,地图就会消失。
这是我的代码:
html 这部分:
<div id="mapcontainer">
<div id="map0"></div>
<div class="third" id="third2018">
<div id="map2018" class="map"></div>
</div>
<div class="third" id="third2019">
<div id="map2019" class="map"></div>
</div>
<div class="third" id="third2020">
<div id="map2020" class="map"></div>
</div>
JS: 注意:复选框的 ID 为 2018 2019 2020。
var center_start = [495445, 5715029];
var zoom_start = 8;
var projection25832 = new ol.proj.Projection({
code: 'EPSG:25832',
// The extent is used to determine zoom level 0. Recommended values for a
// projection's validity extent can be found at https://epsg.io/.
extent: [-1877994.66, 3932281.56, 1836715.13, 9440581.95],
units: 'm'
});
var topo = new ol.layer.Tile({
source: new ol.source.TileWMS({
url:"https://sgx.geodatenzentrum.de/wms_topplus_open?",
params:{
'LAYERS': "p25",
'TILED': false
}
})
});
var osm = new ol.layer.Tile({
source: new ol.source.TileWMS({
url: 'https://ows.terrestris.de/osm-gray/service?',
params: {
'LAYERS': "OSM-WMS",
'VERSION': '1.1.0',
'FORMAT': 'image/png',
'TILED': false
}
})
}) ;
var view = new ol.View({
projection: projection25832,
center: center_start,
zoom: zoom_start
});
var map2018 = new ol.Map({
target: 'map2018',
layers: [osm],
view: view
});
var map2019 = new ol.Map({
target: 'map2019',
layers: [osm],
view: view
});
var map2020 = new ol.Map({
target: 'map2020',
layers: [osm],
view: view
});
// add Map 0
var map0 = new ol.Map({
target: 'map0',
layers: [osm],
view: view
});
var Mapcount = 0;
/////////
$("#2018").change(function (){
if ($("#2018").is(':checked')){
Mapcount = Mapcount + 1;
document.getElementById('map0').style.display='none';
document.getElementById('third2020').style.width = "calc(100%/" + Mapcount +")";
document.getElementById('third2019').style.width = "calc(100%/" + Mapcount +")";
document.getElementById('third2018').style.width = "calc(100%/" + Mapcount +")";
document.getElementById('third2018').style.display = 'block';
map2018.updateSize();
}else{
Mapcount = Mapcount -1;
document.getElementById('third2018').style.display = 'none';
if(Mapcount === 0){
document.getElementById('map0').style.display='block';
map0.updateSize();
}else{
document.getElementById('third2020').style.width = "calc(100%/" + Mapcount +")";
document.getElementById('third2019').style.width = "calc(100%/" + Mapcount +")";
document.getElementById('third2018').style.width = "calc(100%/" + Mapcount +")";
map2018.updateSize();
map2019.updateSize();
map2020.updateSize();
};
};
});
$("#2019").change(function (){
if ($("#2019").is(':checked')){
Mapcount = Mapcount + 1;
document.getElementById('map0').style.display='none';
document.getElementById('third2020').style.width = "calc(100%/" + Mapcount +")";
document.getElementById('third2019').style.width = "calc(100%/" + Mapcount +")";
document.getElementById('third2018').style.width = "calc(100%/" + Mapcount +")";
document.getElementById('third2019').style.display = 'block';
map2019.updateSize();
}else{
Mapcount = Mapcount -1;
document.getElementById('third2019').style.display = 'none';
if(Mapcount === 0){
document.getElementById('map0').style.display='block';
map0.updateSize();
}else{
document.getElementById('third2020').style.width = "calc(100%/" + Mapcount +")";
document.getElementById('third2019').style.width = "calc(100%/" + Mapcount +")";
document.getElementById('third2018').style.width = "calc(100%/" + Mapcount +")";
map2018.updateSize();
map2019.updateSize();
map2020.updateSize();
};
};
});
$("#2020").change(function (){
if ($("#2020").is(':checked')){
Mapcount = Mapcount + 1;
document.getElementById('map0').style.display='none';
document.getElementById('third2019').style.width = "calc(100%/" + Mapcount +")";
map2019.updateSize();
document.getElementById('third2018').style.width = "calc(100%/" + Mapcount +")";
map2018.updateSize();
document.getElementById('third2020').style.width = "calc(100%/" + Mapcount +")";
document.getElementById('third2020').style.display = 'block';
map2020.updateSize();
}else{
Mapcount = Mapcount -1;
document.getElementById('third2020').style.display = 'none';
if(Mapcount === 0){
document.getElementById('map0').style.display='block';
map0.updateSize();
}else{
document.getElementById('third2020').style.width = "calc(100%/" + Mapcount +")";
document.getElementById('third2019').style.width = "calc(100%/" + Mapcount +")";
document.getElementById('third2018').style.width = "calc(100%/" + Mapcount +")";
map2018.updateSize();
map2019.updateSize();
map2020.updateSize();
};
};
});
编辑:当只显示 map0 时,我可以拖动地图和缩放等。
显然我不能在不同的地图中使用相同的图层,或者至少在我将 osm2018 osm2019 和 osm2019 作为图层并在各自的地图中添加后它按预期工作。 如果有其他解决方案,我仍然很乐意使用它。
您不能重复使用图层,但可以重复使用来源
var osmSource = new ol.source.TileWMS({
url: 'https://ows.terrestris.de/osm-gray/service?',
params: {
'LAYERS': "OSM-WMS",
'VERSION': '1.1.0',
'FORMAT': 'image/png',
'TILED': false
}
});
然后在每个地图中使用
layers: [new ol.layer.Tile({
source: osmSource
})],