a
来源:互联网 发布:郭艾伦奥运会数据 编辑:程序博客网 时间:2024/06/10 14:50
leaflet前期学习到熟练使用就不说了,当前接到个任务,项目需求要增加航空气象监测,经研究决定使用windy api,windy支持各种图层显示,使用的是webGL渲染,可以根据高度进行渲染,满足要求且速度很快,但问题来了,我的项目使用的是leaflet1.2.0版本,而windy只支持0.7.5和0.7.7版本,看了下leaflet更新log发现,差距太大了啊,不过还好windy干的事情不多,仅仅是调几个add方法添加canvas,因此决定改windy源码与leaflet1.2.0兼容,相关如下:
下载相关源码并修改兼容(windy做的挺~~)
然后debug就会发现其实他主要:
initCanvas: function () { var mya = L.canvasOverlay(); var a = mya.addTo(e); var b = a.canvas(); //var a = L.canvasOverlay().addTo(e), b = a.canvas();曾经的写法,我只是为了看看a能回来个啥 this.canvases = { particleCanvas: b[0], overlayCanvas: [b[1], b[2]], actualCanvas: 0 }, this.resetCanvas = a.reset.bind(a), b[2].style.opacity = 0, this.rescaleCanvas() }, 最终发现正常的b是有3个canvas的,于是知道了: windy的addTo方法调leaflet的addLayer,生成了3个canvas:
windyapi的addTo: function (a) { return a.addWindyLayer(this), this//原来是addLayer } //leaflet1.2 addLayer: function (t) { if (!t._layerAdd) throw new Error("The provided object is not a Layer."); var i = n(t); return this._layers[i] ? this : (this._layers[i] = t, t._mapToAdd = this, t.beforeAdd && t.beforeAdd(this), this.whenReady(t._layerAdd, t), this)}, addWindyLayer: function (t) { //zz~~此处我模仿addLayer写了个函数 var e = windy_stamp(t); return this._layers[e] ? this : (this._layers[e] = t, !t.options || isNaN(t.options.maxZoom) && isNaN(t.options.minZoom) || (this._zoomBoundLayers[e] = t, this._updateZoomLevels()), this.options.zoomAnimation && o.TileLayer && t instanceof o.TileLayer && (this._tileLayersNum++, this._tileLayersToLoad++, t.on("load", this._onTileLayerLoad, this)), this._loaded && windy_layerAdd(t,this), this)},
其中
function windy_stamp () {//zz var t = 0, e = "_leaflet_id"; return function (i) { return i[e] = i[e] || ++t, i[e] }}function windy_layerAdd(t,zzthis) {//zz t.onAdd(zzthis), zzthis.fire("layeradd", {layer: t})}
而onAdd:
onAdd: function (a) { this._map = a, this._canvas1 = L.DomUtil.create("canvas", "leaflet-canvas1"), this._canvas2 = L.DomUtil.create("canvas", "leaflet-canvas2"), this._canvas3 = L.DomUtil.create("canvas", "leaflet-canvas3"); var b = this._map.getSize(); this._canvas1.width = this._canvas2.width = this._canvas3.width = b.x, this._canvas1.height = this._canvas2.height = this._canvas3.height = b.y; var c = this._map.options.zoomAnimation && L.Browser.any3d; L.DomUtil.addClass(this._canvas1, "leaflet-zoom-" + (c ? "animated" : "hide")), L.DomUtil.addClass(this._canvas2, "leaflet-zoom-" + (c ? "animated" : "hide")), L.DomUtil.addClass(this._canvas3, "leaflet-zoom-" + (c ? "animated" : "hide")), a._panes.overlayPane.appendChild(this._canvas1), a._panes.overlayPane.appendChild(this._canvas2), a._panes.overlayPane.appendChild(this._canvas3), a.on("moveend", this._redraw, this), a.on("resize", this._resize, this), a.options.zoomAnimation && L.Browser.any3d && a.on("zoomanim", this._animateZoom, this), this._reset(), this._redraw() }
回来后:
效果图:支持leaflet1.2.0
阅读全文
0 0
- a
- a
- a
- a
- a
- a
- a
- a
- a
- a
- a
- a
- a
- A
- A*
- a
- A
- a
- 【分治算法】大整数乘法
- CSS3 calc的用法详解
- 机器学习-方差
- IntelliJ初使用:IntelliJ创建简单的maven项目
- Spring框架之基础类—ScannedGenericBeanDefinition实现类
- a
- KNN和K-means
- Shiro 处理ajax请求 拦截登录超时---解决!
- android system hack Cipher
- mysql中的左连接、内连接、右连接和全连接理解
- ConstraintLayout 技术分享
- 周四见|公开课预告《软件测试,我们在做些什么?》by鸿一
- css弹性盒子
- Delphi10控件Style自定义注意点