如何根据网络连接的可用性切换基础层
How to switch base layer based on internet connection availability
我的应用程序(html+ JavaScript)使用谷歌地图作为基础层。我还将OSM设置为离线基础层,以便在没有互联网连接时使用。
现在我锁定了一种方法,使应用程序检查互联网连接,如果有,然后使用谷歌地图作为基础层。
你可以监听'loaderror'事件,这将被抛出,当谷歌地图加载失败。下面是常规WMS层的示例(完整示例见http://jsfiddle.net/D3Eha/2/)
var wmsLayer, workingOffline = false;
wmsLayer = new OpenLayers.Layer.WMS("OpenLayers WMS",
"http://vmap0.tiles.osgeo.org/wms/vmap0?",
{layers: 'basic'},
{
attribution: 'Provided by OSGeo',
tileOptions: {
eventListeners: {
'loaderror': function(evt) {
if (workingOffline == false) {
console.log('Tile load error, switching to offline map');
workingOffline = true;
}
}
}
}
}
);
当电脑再次联机时,检测起来比较困难。例如,当您离线时,启动定时定时器从互联网加载一些图像。如果成功,则返回在线。
我设计了那个解决方案,你需要根据你的情况调整它。
var backupLayerUrl = {
url: "http://b.tile.opencyclemap.org/cycle/",
type: "png"
}
tileOptions = {
eventListeners: {
'loaderror': function(e) {
console.dir(e);
var newUrl = backupLayerUrl.url;
var oldUrl = e.object.url;
var oUS = oldUrl.split("/");//oldUrlSplitted
var type = backupLayerUrl.type;
var z = oUS[oUS.length-3];
var x = oUS[oUS.length-2];
var y = oUS[oUS.length-1].split(".")[0];
var layerType = e.object.layer.CLASS_NAME.split(".")[e.object.layer.CLASS_NAME.split(".").length-1];
if (layerType != "OSM"){
var ymax = 1 << z;
y = ymax - y - 1;
}
newUrl += z + "/" + x + "/" + y + "." + type;
e.object.imgDiv.src = newUrl;
}
}
};
var mylayer = new OpenLayers.Layer.TMS("Layer Name", "/layer_url/",
{ tileOptions: tileOptions,
projection: epsg900913,
alpha: true,
type: 'png',
visibility: false,
isBaseLayer: true,
getURL: getTileURL
});
相关文章:
- CSS根据属性的可用性有条件地应用样式
- 下拉菜单的可用性
- 框架的可用性问题是什么
- 用于跟踪购物车可用性的Javascript数组/对象/哈希表
- 几个URL连续可用性的可视化
- 通过Jquery检查用户名可用性
- 检查Firefox中IndexedDB的真实可用性
- jQuery增加了菜单导航的延迟,可用性
- 如何使用 JavaScript 检查资源的可用性
- 在Codeigniter中使用Ajax和jQuery检查用户名的可用性
- 函数内变量的范围和可用性
- 如何在不牺牲可用性的情况下修改 DOM 中的大量元素
- 使用 AJAX 和 JSP 错误检查用户名可用性
- 淘汰基实体属性可用性令人困惑
- 未捕获的引用错误: 未定义检查可用性
- 如何检测前进按钮的可用性
- PHP CodeIgniter 框架中的 JavaScript 可用性验证
- 如何检查window.showModalDialog的可用性
- 如何在客户端JavaScript中检查端口可用性
- 如何在JS web worker中循环查询worker的可用性而不阻塞