OpenLayers(或其他方式)是否有可能拥有故障转移 WMS 源?
Is it possible with OpenLayers (or other way) to have a failover WMS source?
我们的情况:主要的WMS提供商有时会因为各种原因离线。如果他们离线,我们所有的解决方案看起来都很糟糕(没有地图,只有空白背景上的图钉)。所以我们想使用 OpenStreet Map 作为这种情况的故障转移。我们正在使用 Open Layers 和 Leaflet(不同的前端),并为某些 WFS 服务提供 Geoserver。
是否可以使用其中任何一个(或其他任何东西)来半自动处理这个问题?或者我们是否必须构建自己的 WMS 'proxy' 服务?在那里我们当然可以检测到主节点已关闭并切换到故障转移。但如果有一种内置的方法可以做到这一点,那就更好了。
tilelayer 上有一个tileerror
事件:https://leafletjs.com/reference-1.6.0.html#tilelayer-wms-tileerror
您可以检查有多少图块已加载/失败,然后使用后备 TileLayer。
var loaded = 0;
var errors = 0;
var fallbackloaded = false;
osm.on('tileerror',function(e){
errors++;
});
osm.on('tileload',function(e){
loaded++;
});
osm.on('load',function(e){
if(loaded == 0 || (errors != 0 && (loaded / errors) > 70)){ //More then 70% wrong
console.log("WMS is down");
if(!fallbackloaded){ //prevent infinit loop
fallbackloaded =true;
map.removeLayer(osm); //Remove old TileLayer
osm = L.tileLayer('https://{s}.tile.opentopomap.org/{z}/{x}/{y}.png', {
maxZoom: 17,
attribution: 'Map data: © <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors'
});
map.addLayer(osm); //Add fallback TileLayer
}
}
});
示例:https://jsfiddle.net/falkedesign/r28zojgu/
如果 url 可以访问,您还可以使用 JS 检查启动,然后使用回退层。
我们的情况:主要的WMS提供商有时会因为各种原因离线。如果他们离线,我们所有的解决方案看起来都很糟糕(没有地图,只有空白背景上的图钉)。所以我们想使用 OpenStreet Map 作为这种情况的故障转移。我们正在使用 Open Layers 和 Leaflet(不同的前端),并为某些 WFS 服务提供 Geoserver。
是否可以使用其中任何一个(或其他任何东西)来半自动处理这个问题?或者我们是否必须构建自己的 WMS 'proxy' 服务?在那里我们当然可以检测到主节点已关闭并切换到故障转移。但如果有一种内置的方法可以做到这一点,那就更好了。
tilelayer 上有一个tileerror
事件:https://leafletjs.com/reference-1.6.0.html#tilelayer-wms-tileerror
您可以检查有多少图块已加载/失败,然后使用后备 TileLayer。
var loaded = 0;
var errors = 0;
var fallbackloaded = false;
osm.on('tileerror',function(e){
errors++;
});
osm.on('tileload',function(e){
loaded++;
});
osm.on('load',function(e){
if(loaded == 0 || (errors != 0 && (loaded / errors) > 70)){ //More then 70% wrong
console.log("WMS is down");
if(!fallbackloaded){ //prevent infinit loop
fallbackloaded =true;
map.removeLayer(osm); //Remove old TileLayer
osm = L.tileLayer('https://{s}.tile.opentopomap.org/{z}/{x}/{y}.png', {
maxZoom: 17,
attribution: 'Map data: © <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors'
});
map.addLayer(osm); //Add fallback TileLayer
}
}
});
示例:https://jsfiddle.net/falkedesign/r28zojgu/
如果 url 可以访问,您还可以使用 JS 检查启动,然后使用回退层。