Skip to content
This repository has been archived by the owner on Feb 8, 2024. It is now read-only.

显示连续层,超过-180度至180度,我们做到这样 #48

Open
jiemil opened this issue Dec 19, 2019 · 2 comments
Open

显示连续层,超过-180度至180度,我们做到这样 #48

jiemil opened this issue Dec 19, 2019 · 2 comments

Comments

@jiemil
Copy link

jiemil commented Dec 19, 2019

20191219170941
20191219171047
20191219171158
20191219171240

1、 执行L.CanvasLayer.ScalarField.js文件中的构造函数L.canvasLayer.scalarField,创建一个标量层,代码如下:
let globeScalarLayerVelocity = L.canvasLayer.scalarField(null, {
class: 'Globe',
opacity: 0.65
});
其中,class:‘Globe‘ 就是用来设置在跨360°绘制的。

2、 第二个关键函数是L.CanvasLayer.ScalarField.js文件中的 _prepareImageIn 函数,该函数用于构建绘制数据。
其中
let f = (this.options.interpolate ? 'interpolatedValueAt' : 'valueAt') + this.options.class;
是一行关键代码,设置了取数据的方式。

3、 第三个关键函数是 Field.js 文件中的 valueAtGlobe 函数,该函数用于按照“跨360°模式”取数据。
4、 valueAtGlobe(lon, lat) { //added by zxl
5、 let [i, j] = this._getDecimalGlobeIndexes(lon, lat); //根据经纬度获取网格行列号
6、 let ii = Math.floor(i);
7、 let jj = Math.floor(j);
8、
9、 const ci = this._clampColumnIndex(ii); // 判断行列号是否有效
10、 const cj = this._clampRowIndex(jj);
11、
12、 let value = this._valueAtIndexes(ci, cj); //根据行列号获取要素值
13、 if (this._inFilter) {
14、 if (!this._inFilter(value)) return null; //判断该值是否设置了不绘制
15、 }
16、 return value;
17、 }

4、 第四个关键函数是Field.js文件中的 _getDecimalGlabeIndexes(lon,lat)函数,用于将经纬度值转换为网格号
_getDecimalGlobeIndexes(lon, lat) { //added by zxl
if (lon < this.xllCorner) {
let n = Math.floor((this.xllCorner - lon) / 360) + 1;
lon = lon + 360 * n;
}
let offset_i = (lon - this.xllCorner) % 360;
let i = offset_i / this.cellXSize;
let j = (this.yurCorner - lat) / this.cellYSize;
return [i, j];
}

@jiemil
Copy link
Author

jiemil commented Dec 19, 2019

最后一张图,如何跨越-180度到180度

@xueyan123321
Copy link

具体怎么做到的跨越-180度到180度,代码共享一下可以吗

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants