Leaflet-Leafletv0.7使用leaflet-bing-layer

digidem/leaflet-bing-layer: Bing Maps Layer for Leaflet v1.0.0:从标题就可以看出要Leaflet v1.0.0才能用。其实leaflet v0.7也是可以用的,但有点bug,下面是一些偷懒的解决方法:

listeners[i].action未定义

  • leaflet版本:0.7.1
  • 报错:TypeError: listeners[i].action is undefined; can't access its "call" property[Learn More] leaflet-src.js:461:9
  • 解决方法:461行的listeners[i].action.call(listeners[i].context, event);改为listeners[i].action && listeners[i].action.call(listeners[i].context, event);

改成这样的:

for (i = 0, len = listeners.length; i < len; i++) {
  // listeners[i].action.call(listeners[i].context, event);
  listeners[i].action && listeners[i].action.call(listeners[i].context, event);
}

str未定义

这个是加载地图前异步请求的锅,异步请求完成会给_url赋值,如果未做完异步请求就加载地图_url未赋值会报错

  • leaflet-bing-layer版本:3.3.0
  • 报错:str is undefined; can't access its "replace" property
  • 解决:获取到加载地图前异步请求的Promise,resole方法里加载地图

首先leaflet-bing-layer.js中将Promise存到window.BING_PROMISE

window.BING_PROMISE = this._fetch = fetchJsonp(metaDataUrl, {jsonpCallback: 'jsonp'})
  .then(function (response) {
    return response.json()
  })
  .then(this._metaDataOnLoad.bind(this))
  .catch(console.error.bind(console))

然后在自己的代码中等resole了执行地图加载

window.BING_PROMISE.then(()=>{
  L.tileLayer.bing({
    'bingMapsKey': 'ArgnwO7xlP9MmmeQTYhgZjOuX6TsVdLWK8gE7BwqwOfuDM5_eAltM8IZXG6YsUDZ',
    'imagerySet': 'CanvasLight'
  }).addTo(map);
})

转载于:https://www.cnblogs.com/jffun-blog/p/9917280.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值