Javascript 如何检测磁贴服务器正确返回的磁贴,但显示;“无地图数据”;

Javascript 如何检测磁贴服务器正确返回的磁贴,但显示;“无地图数据”;,javascript,leaflet,Javascript,Leaflet,我知道传单平铺层的tileerror事件,但如果平铺只是一个带有“无地图数据”免责声明的虚拟平铺,则不会触发该事件 var-map=L.map(“map”).setView([52.21581894148382,2.74709701538086],14); var layer=L.tileLayer('https://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z} /{y}/{x}'{

我知道传单平铺层的
tileerror
事件,但如果平铺只是一个带有“无地图数据”免责声明的虚拟平铺,则不会触发该事件

var-map=L.map(“map”).setView([52.21581894148382,2.74709701538086],14);
var layer=L.tileLayer('https://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z} /{y}/{x}'{
属性:“Tiles©;Esri—来源:Esri、i-cubed、美国农业部、美国地质勘探局、AEX、GeoEye、Getmapping、Aerogrid、IGN、IGP、UPR-EGP和GIS用户社区”
});
图层。添加到(地图);
layer.on(“tileerror”,function()){
log(“尝试加载时间段时出错…”);
});
#地图{高度:98vh;}

如果我理解正确,您的互动程序服务器有时会返回技术上正确的互动程序图像,但其内容表示实际上没有在其上呈现有用的数据,例如:

Tiles©Esri-来源:Esri、i-cubed、美国农业部、美国地质勘探局、AEX、GeoEye、Getmapping、航空网格、IGN、IGP、UPR-EGP和GIS用户社区

您希望在传单瓷砖层获得此类瓷砖时收到通知,方式与事件类似

由于瓷砖在技术上是正确的,不幸的是,传单无法理解其上实际上没有任何有用的数据

但是,如果磁贴服务器总是返回完全相同的内容,则可以很好地与已知没有数据的磁贴进行图像比较

  • 侦听平铺层的事件,以便在加载新平铺时附加回调
  • 将平铺图像与您知道的对应于“无有用数据”状态的图像进行比较。你可以使用,但是有很多其他的库可以完成这样的任务
  • 如果图像相等,则执行一些操作,例如触发新事件
  • (打开浏览器开发人员控制台以查看以下代码段的效果)

    var-map=L.map(“map”).setView([52.21581894148382,2.74709701538086],14);
    var layer=L.tileLayer('https://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z} /{y}/{x}'{
    属性:“Tiles©;Esri—来源:Esri、i-cubed、美国农业部、美国地质勘探局、AEX、GeoEye、Getmapping、Aerogrid、IGN、IGP、UPR-EGP和GIS用户社区”,
    crossOrigin:true//需要能够在画布上下文中分析图像。
    }).addTo(地图);
    var nodatatile=document.getElementById('nodatatile');
    // 1. 收听平铺层的“tileload”事件。
    // http://leafletjs.com/reference-1.3.0.html#gridlayer-蒂莱罗德
    // http://leafletjs.com/reference-1.3.0.html#tileevent
    层上('tileload',函数(tileEvent){
    var tile=tileEvent.tile;
    var c=tileEvent.coords;
    //2.将磁贴与没有有用数据的已知磁贴进行比较。
    // https://github.com/HumbleSoftware/js-imagediff/
    var IsequalToNodeata=图像差异相等(节点数据,分幅);
    //3.如果它们相等,则执行一些操作,例如触发新事件。
    if(等质量节点数据){
    层火('tilenodata',tileEvent);
    }
    });
    //聆听新事件。
    layer.on('tilenodata',函数(tileEvent){
    var c=tileEvent.coords;
    console.log(“+c.x+'/'+c.y+'/'+c.z”没有数据);
    });
    
    #地图{
    高度:98vh;
    }