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);
})