1

如何检测地图是否正确加载?发生的事情是,在我的 ionic 应用程序中,地图 url 停止工作,并且地图没有抛出错误。它只显示灰色。

有没有办法正确检查此事件并退回到替代地图?

4

3 回答 3

1

通常但简单的解决方法是使用 tileLayer 的errorTileUrl 选项指定单个后备图块。通常,它会显示一个浅红色的十字,让用户知道地图服务器没有任何图像可用于该区域和该缩放。

现在,如果您想变得更聪明并回退到不同的地图(即重定向到不同的 URL),我不知道有任何开箱即用的解决方案,但它非常可行。这个想法是覆盖类的_tileOnError方法L.TileLayer,它通常用errorTileUrl收到 404 错误(即服务器上没有可用的图块)时的图块替换图块。在给定的链接中,它会自动将 URL 替换为不同位置的新 URL(可能是不同的服务器),因为它预计只会丢失几个图块。

现在,如果您假设整个服务器将停止响应并且您想要切换到不同的 tileLayer(以便它停止 ping 故障服务器),您可以实现例如一个由该_tileOnError方法递增的简单计数器,并且一旦给定达到阈值,切换图层。

于 2015-10-28T05:37:46.683 回答
0

经历和最近一样。在这里找到原因Tile Usage Policy

OpenStreetMap 数据可供所有人免费使用。我们的瓷砖服务器不是。

以下是 tile.openstreetmap.org 用户必须遵守的最低要求。这些可能会在未来发生变化,具体取决于可用资源。>如果任何用户或使用模式仍然导致服务出现问题,访问可能仍会被阻止,恕不另行通知。如果可能,我们会尽量联系相关方,但不能保证。

但由于 OpenStreetMap 数据是免费的,许多其他组织提供由 OSM 数据制成的地图 > 瓦片。如果您的项目不满足这些要求,>您可以在其他地方获取 OSM 派生的地图图块。要求

未经系统 > 管理员事先许可,禁止大量使用(例如,分发使用来自 >openstreetmap.org 的图块的应用程序)。请参阅下面的替代方案。清楚地显示许可证归属。不要主动或被动地鼓励侵犯版权。对 /cgi-bin/export 的调用只能由最终用户的直接操作触发。>(例如:“单击此处导出”。)导出调用是一个昂贵的 >(CPU+RAM) 函数,运行时会频繁地在服务器处于 >高负载时拒绝。强烈推荐:不要将 tile.openstreetmap.org 上的任何 URL 硬编码到应用程序中。推荐:添加指向https://www.openstreetmap.org/fixthemap的链接> 允许您的用户报告和修复我们数据中的问题。

使用其他使用 osm 的瓦片层来渲染地图。不得不将其用于地图图像以在移动设备上显示

{tileLayer: "http://{s}.tile.opencyclemap.org/cycle/{z}/{x}/{y}.png",
    zoomControl: false,
    tileLayerOptions: {
        opacity: 0.9,
        detectRetina: true,
        reuseTiles: true
    },
    scrollWheelZoom: false,
    attributionControl: false
}

简而言之,osm 阻止了地图图块。

于 2017-10-30T10:59:28.757 回答
0

我可能会迟到回答这个问题,但这里是您可以使用的图层事件。此事件在图层上触发,而不是在地图上触发。在这种情况下,如果bingLayer加载失败,tileerror将被触发。

this.bingLayer.on("tileerror", function (error, tile) {
 //do something when the tile fails to load
});

this.bingLayer.on("tileload", function(e){
  //do something when the tile loads successfully
})
于 2017-07-20T08:57:00.870 回答