Openlayers 如何基于internet连接可用性切换基础层

Openlayers 如何基于internet连接可用性切换基础层,openlayers,javascript,google-maps,Openlayers,Javascript,Google Maps,我的应用程序(html+JavaScript)使用谷歌地图作为基础层。我还将OSM设置为脱机基本层,以便在没有internet连接时使用 现在我正在寻找一种方法,让应用程序检查互联网连接,如果有,然后使用谷歌地图作为基础层。如果没有,则使用OSM。您可以侦听“loaderror”事件,该事件将在加载Google地图磁贴失败时引发。下面是常规WMS层的示例(中的完整示例) 当电脑再次联机时,检测起来更为棘手。例如,当您脱机时,启动定期计时器从Internet加载一些图像。如果成功了,你就可以重新上

我的应用程序(html+JavaScript)使用谷歌地图作为基础层。我还将OSM设置为脱机基本层,以便在没有internet连接时使用


现在我正在寻找一种方法,让应用程序检查互联网连接,如果有,然后使用谷歌地图作为基础层。如果没有,则使用OSM。

您可以侦听“loaderror”事件,该事件将在加载Google地图磁贴失败时引发。下面是常规WMS层的示例(中的完整示例)


当电脑再次联机时,检测起来更为棘手。例如,当您脱机时,启动定期计时器从Internet加载一些图像。如果成功了,你就可以重新上线了。

我设计了这个解决方案,你需要根据你的情况调整它

    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
              });
var backupLayerUrl={
url:“http://b.tile.opencyclemap.org/cycle/",
类型:“png”
}
tileOptions={
eventListeners:{
“loaderror”:函数(e){
署长(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];
变量y=oUS[oUS.length-1]。拆分(“.”[0];
var layerType=e.object.layer.CLASS_NAME.split(“.”[e.object.layer.CLASS_NAME.split(“.”).length-1];
如果(layerType!=“OSM”){

var ymax=1这是一个stackoverflow问题,而不是GIS问题。您在连接测试或层切换方面有问题吗?
    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
              });