LeafletJS检查没有加载地图

时间:2015-10-28 04:46:56

标签: ionic-framework leaflet angular-leaflet-directive

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

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

3 个答案:

答案 0 :(得分:1)

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

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

现在,如果您假设整个服务器将停止响应并且您想切换到另一个tileLayer(以便它停止ping错误的服务器),您可以实现一个简单的计数器,其增加{{1方法,一旦达到给定的阈值,切换图层。

答案 1 :(得分: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
})

答案 2 :(得分:0)

最近经历过同样的经历。找到原因Tile Usage Policy

  

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

     

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

     

但是由于OpenStreetMap数据是免费的,许多其他组织提供了由OSM数据制作的map> tile。如果您的项目不符合这些要求,那么>您可以在其他地方获得OSM派生的地图图块。   要求

     

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

使用使用osm渲染地图的其他图块层。不得不使用它来在地图上显示移动

(/=)

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