gridviz 2.0.38 → 2.0.39
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +119 -119
- package/dist/gridviz.js +7488 -7530
- package/dist/gridviz.min.js +1 -1
- package/package.json +78 -78
- package/src/App.js +698 -698
- package/src/BackgroundLayer.js +182 -182
- package/src/BackgroundLayerWMS.js +131 -131
- package/src/Dataset.js +76 -76
- package/src/DatasetComponent.js +103 -103
- package/src/GeoCanvas.js +419 -419
- package/src/LabelLayer.js +190 -190
- package/src/Layer.js +92 -92
- package/src/Legend.js +86 -86
- package/src/LineLayer.js +150 -150
- package/src/Style.js +114 -114
- package/src/Tooltip.js +168 -168
- package/src/dataset/COGeo.js +24 -24
- package/src/dataset/CSVGrid.js +104 -104
- package/src/dataset/GeoTIFF.js +127 -127
- package/src/dataset/GridTile.js +41 -41
- package/src/dataset/ParquetGrid.js +122 -122
- package/src/dataset/TiledGrid.js +296 -296
- package/src/index.js +177 -177
- package/src/legend/ColorCategoryLegend.js +124 -124
- package/src/legend/ColorDiscreteLegend.js +105 -105
- package/src/legend/ColorLegend.js +125 -125
- package/src/legend/SegmentOrientationLegend.js +87 -87
- package/src/legend/SegmentWidthLegend.js +97 -97
- package/src/legend/SizeLegend.js +141 -141
- package/src/style/CompositionStyle.js +300 -300
- package/src/style/ContourStyle.js +54 -54
- package/src/style/DotDensityStyle.js +156 -156
- package/src/style/JoyPlotStyle.js +135 -135
- package/src/style/KernelSmoothingOldStyle.js +221 -221
- package/src/style/KernelSmoothingStyle.js +115 -115
- package/src/style/KernelSmoothingWGLStyle.js +130 -130
- package/src/style/LegoStyle.js +112 -112
- package/src/style/MosaicStyle.js +107 -107
- package/src/style/NinjaStarStyle.js +124 -124
- package/src/style/PillarStyle.js +230 -230
- package/src/style/SegmentStyle.js +142 -142
- package/src/style/ShapeColorSizeStyle.js +126 -126
- package/src/style/SideCatStyle.js +172 -172
- package/src/style/SideStyle.js +218 -218
- package/src/style/SquareColorCatWGLStyle.js +120 -120
- package/src/style/SquareColorWGLStyle.js +146 -146
- package/src/style/StrokeStyle.js +131 -131
- package/src/style/TanakaStyle.js +160 -160
- package/src/style/TextStyle.js +132 -132
- package/src/utils/Utils.js +35 -35
- package/src/utils/WebGLRectangleColoring.js +106 -106
- package/src/utils/WebGLSquareColoring.js +118 -118
- package/src/utils/WebGLSquareColoringAdvanced.js +230 -230
- package/src/utils/WebGLSquareColoringCatAdvanced.js +133 -133
- package/src/utils/WebGLSquareColoringKS.js +153 -153
- package/src/utils/stretching.js +131 -131
- package/src/utils/webGLUtils.js +71 -71
- package/src/utils/zoomUtils.js +142 -142
|
@@ -1,122 +1,122 @@
|
|
|
1
|
-
//@ts-check
|
|
2
|
-
'use strict'
|
|
3
|
-
|
|
4
|
-
import { DatasetComponent } from '../DatasetComponent.js'
|
|
5
|
-
import { tableFromIPC } from 'apache-arrow'
|
|
6
|
-
//import { readParquet } from "parquet-wasm"
|
|
7
|
-
|
|
8
|
-
/**
|
|
9
|
-
* A dataset composed of a single parquet file (not tiled).
|
|
10
|
-
*
|
|
11
|
-
* @author Julien Gaffuri
|
|
12
|
-
*/
|
|
13
|
-
export class ParquetGrid extends DatasetComponent {
|
|
14
|
-
/**
|
|
15
|
-
* @param {string} url The URL of the dataset.
|
|
16
|
-
* @param {number} resolution The dataset resolution in geographical unit.
|
|
17
|
-
* @param {{preprocess?:(function(import("../Dataset").Cell):boolean), readParquetFun?:Function}} opts
|
|
18
|
-
*/
|
|
19
|
-
constructor(url, resolution, opts = {}) {
|
|
20
|
-
super(url, resolution, opts)
|
|
21
|
-
|
|
22
|
-
/**
|
|
23
|
-
* @private
|
|
24
|
-
* @type {Array.<import("../Dataset").Cell>} */
|
|
25
|
-
this.cells = []
|
|
26
|
-
|
|
27
|
-
/**
|
|
28
|
-
* @type {string}
|
|
29
|
-
* @private */
|
|
30
|
-
this.infoLoadingStatus = 'notLoaded'
|
|
31
|
-
|
|
32
|
-
if (!opts.readParquetFun) throw new Error('readParquet function needed for parquet dataset')
|
|
33
|
-
|
|
34
|
-
/**
|
|
35
|
-
* @type {Function}
|
|
36
|
-
* @private */
|
|
37
|
-
this.readParquetFun = opts.readParquetFun
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
/**
|
|
41
|
-
* Request data within a geographic envelope.
|
|
42
|
-
*
|
|
43
|
-
* @param {import("../Dataset").Envelope|undefined} e
|
|
44
|
-
* @param {function():void} redraw
|
|
45
|
-
*/
|
|
46
|
-
getData(e, redraw) {
|
|
47
|
-
//check if data already loaded
|
|
48
|
-
if (this.infoLoadingStatus != 'notLoaded') return this
|
|
49
|
-
|
|
50
|
-
//load data
|
|
51
|
-
this.infoLoadingStatus = 'loading'
|
|
52
|
-
;(async () => {
|
|
53
|
-
try {
|
|
54
|
-
const resp = await fetch(this.url)
|
|
55
|
-
const parquetUint8Array = new Uint8Array(await resp.arrayBuffer())
|
|
56
|
-
const arrowUint8Array = this.readParquetFun(parquetUint8Array)
|
|
57
|
-
|
|
58
|
-
const t = tableFromIPC(arrowUint8Array)
|
|
59
|
-
//see https://arrow.apache.org/docs/js/
|
|
60
|
-
//https://loaders.gl/arrowjs/docs/developer-guide/tables#record-tojson-and-toarray
|
|
61
|
-
|
|
62
|
-
this.cells = []
|
|
63
|
-
for (const e of t) {
|
|
64
|
-
//get cell
|
|
65
|
-
const c = e.toJSON()
|
|
66
|
-
|
|
67
|
-
//preprocess/filter
|
|
68
|
-
if (this.preprocess) {
|
|
69
|
-
const b = this.preprocess(c)
|
|
70
|
-
if (b == false) continue
|
|
71
|
-
this.cells.push(c)
|
|
72
|
-
} else {
|
|
73
|
-
this.cells.push(c)
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
//TODO check if redraw is necessary
|
|
78
|
-
//that is if the dataset belongs to a layer which is visible at the current zoom level
|
|
79
|
-
|
|
80
|
-
//execute the callback, usually a draw function
|
|
81
|
-
if (redraw) redraw()
|
|
82
|
-
|
|
83
|
-
this.infoLoadingStatus = 'loaded'
|
|
84
|
-
} catch (error) {
|
|
85
|
-
//mark as failed
|
|
86
|
-
this.infoLoadingStatus = 'failed'
|
|
87
|
-
this.cells = []
|
|
88
|
-
}
|
|
89
|
-
})()
|
|
90
|
-
|
|
91
|
-
return this
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
/**
|
|
95
|
-
* Fill the view cache with all cells which are within a geographical envelope.
|
|
96
|
-
*
|
|
97
|
-
* @param {import("../Dataset").Envelope} extGeo
|
|
98
|
-
* @returns {void}
|
|
99
|
-
*/
|
|
100
|
-
updateViewCache(extGeo) {
|
|
101
|
-
//data not loaded yet
|
|
102
|
-
if (!this.cells) return
|
|
103
|
-
|
|
104
|
-
this.cellsViewCache = []
|
|
105
|
-
for (const cell of this.cells) {
|
|
106
|
-
if (+cell.x + this.resolution < extGeo.xMin) continue
|
|
107
|
-
if (+cell.x - this.resolution > extGeo.xMax) continue
|
|
108
|
-
if (+cell.y + this.resolution < extGeo.yMin) continue
|
|
109
|
-
if (+cell.y - this.resolution > extGeo.yMax) continue
|
|
110
|
-
this.cellsViewCache.push(cell)
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
/**
|
|
116
|
-
* Retrieve parquet wasm decoder
|
|
117
|
-
*/
|
|
118
|
-
const getReadParquet = async () => {
|
|
119
|
-
//const parquetModule = await import("https://unpkg.com/parquet-wasm@0.4.0-beta.5/esm/arrow2.js");
|
|
120
|
-
//await parquetModule.default();
|
|
121
|
-
//return parquetModule.readParquet;
|
|
122
|
-
}
|
|
1
|
+
//@ts-check
|
|
2
|
+
'use strict'
|
|
3
|
+
|
|
4
|
+
import { DatasetComponent } from '../DatasetComponent.js'
|
|
5
|
+
import { tableFromIPC } from 'apache-arrow'
|
|
6
|
+
//import { readParquet } from "parquet-wasm"
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* A dataset composed of a single parquet file (not tiled).
|
|
10
|
+
*
|
|
11
|
+
* @author Julien Gaffuri
|
|
12
|
+
*/
|
|
13
|
+
export class ParquetGrid extends DatasetComponent {
|
|
14
|
+
/**
|
|
15
|
+
* @param {string} url The URL of the dataset.
|
|
16
|
+
* @param {number} resolution The dataset resolution in geographical unit.
|
|
17
|
+
* @param {{preprocess?:(function(import("../Dataset").Cell):boolean), readParquetFun?:Function}} opts
|
|
18
|
+
*/
|
|
19
|
+
constructor(url, resolution, opts = {}) {
|
|
20
|
+
super(url, resolution, opts)
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* @private
|
|
24
|
+
* @type {Array.<import("../Dataset").Cell>} */
|
|
25
|
+
this.cells = []
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* @type {string}
|
|
29
|
+
* @private */
|
|
30
|
+
this.infoLoadingStatus = 'notLoaded'
|
|
31
|
+
|
|
32
|
+
if (!opts.readParquetFun) throw new Error('readParquet function needed for parquet dataset')
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* @type {Function}
|
|
36
|
+
* @private */
|
|
37
|
+
this.readParquetFun = opts.readParquetFun
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Request data within a geographic envelope.
|
|
42
|
+
*
|
|
43
|
+
* @param {import("../Dataset").Envelope|undefined} e
|
|
44
|
+
* @param {function():void} redraw
|
|
45
|
+
*/
|
|
46
|
+
getData(e, redraw) {
|
|
47
|
+
//check if data already loaded
|
|
48
|
+
if (this.infoLoadingStatus != 'notLoaded') return this
|
|
49
|
+
|
|
50
|
+
//load data
|
|
51
|
+
this.infoLoadingStatus = 'loading'
|
|
52
|
+
;(async () => {
|
|
53
|
+
try {
|
|
54
|
+
const resp = await fetch(this.url)
|
|
55
|
+
const parquetUint8Array = new Uint8Array(await resp.arrayBuffer())
|
|
56
|
+
const arrowUint8Array = this.readParquetFun(parquetUint8Array)
|
|
57
|
+
|
|
58
|
+
const t = tableFromIPC(arrowUint8Array)
|
|
59
|
+
//see https://arrow.apache.org/docs/js/
|
|
60
|
+
//https://loaders.gl/arrowjs/docs/developer-guide/tables#record-tojson-and-toarray
|
|
61
|
+
|
|
62
|
+
this.cells = []
|
|
63
|
+
for (const e of t) {
|
|
64
|
+
//get cell
|
|
65
|
+
const c = e.toJSON()
|
|
66
|
+
|
|
67
|
+
//preprocess/filter
|
|
68
|
+
if (this.preprocess) {
|
|
69
|
+
const b = this.preprocess(c)
|
|
70
|
+
if (b == false) continue
|
|
71
|
+
this.cells.push(c)
|
|
72
|
+
} else {
|
|
73
|
+
this.cells.push(c)
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
//TODO check if redraw is necessary
|
|
78
|
+
//that is if the dataset belongs to a layer which is visible at the current zoom level
|
|
79
|
+
|
|
80
|
+
//execute the callback, usually a draw function
|
|
81
|
+
if (redraw) redraw()
|
|
82
|
+
|
|
83
|
+
this.infoLoadingStatus = 'loaded'
|
|
84
|
+
} catch (error) {
|
|
85
|
+
//mark as failed
|
|
86
|
+
this.infoLoadingStatus = 'failed'
|
|
87
|
+
this.cells = []
|
|
88
|
+
}
|
|
89
|
+
})()
|
|
90
|
+
|
|
91
|
+
return this
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* Fill the view cache with all cells which are within a geographical envelope.
|
|
96
|
+
*
|
|
97
|
+
* @param {import("../Dataset").Envelope} extGeo
|
|
98
|
+
* @returns {void}
|
|
99
|
+
*/
|
|
100
|
+
updateViewCache(extGeo) {
|
|
101
|
+
//data not loaded yet
|
|
102
|
+
if (!this.cells) return
|
|
103
|
+
|
|
104
|
+
this.cellsViewCache = []
|
|
105
|
+
for (const cell of this.cells) {
|
|
106
|
+
if (+cell.x + this.resolution < extGeo.xMin) continue
|
|
107
|
+
if (+cell.x - this.resolution > extGeo.xMax) continue
|
|
108
|
+
if (+cell.y + this.resolution < extGeo.yMin) continue
|
|
109
|
+
if (+cell.y - this.resolution > extGeo.yMax) continue
|
|
110
|
+
this.cellsViewCache.push(cell)
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
/**
|
|
116
|
+
* Retrieve parquet wasm decoder
|
|
117
|
+
*/
|
|
118
|
+
const getReadParquet = async () => {
|
|
119
|
+
//const parquetModule = await import("https://unpkg.com/parquet-wasm@0.4.0-beta.5/esm/arrow2.js");
|
|
120
|
+
//await parquetModule.default();
|
|
121
|
+
//return parquetModule.readParquet;
|
|
122
|
+
}
|