gridviz 2.1.13 → 2.1.15

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.
Files changed (62) hide show
  1. package/README.md +124 -125
  2. package/dist/gridviz.js +8900 -8368
  3. package/dist/gridviz.min.js +1 -1
  4. package/package.json +77 -77
  5. package/src/App.js +760 -758
  6. package/src/BackgroundLayer.js +182 -182
  7. package/src/BackgroundLayerWMS.js +131 -131
  8. package/src/Dataset.js +76 -76
  9. package/src/DatasetComponent.js +113 -113
  10. package/src/GeoCanvas.js +420 -420
  11. package/src/LabelLayer.js +190 -190
  12. package/src/Layer.js +103 -103
  13. package/src/Legend.js +86 -86
  14. package/src/LineLayer.js +150 -150
  15. package/src/Style.js +131 -129
  16. package/src/Tooltip.js +182 -180
  17. package/src/button/Button.js +66 -54
  18. package/src/button/FullscreenButton.js +120 -98
  19. package/src/button/ZoomButtons.js +95 -72
  20. package/src/dataset/COGeo.js +24 -24
  21. package/src/dataset/CSVGrid.js +104 -104
  22. package/src/dataset/GeoTIFF.js +127 -127
  23. package/src/dataset/GridTile.js +41 -41
  24. package/src/dataset/LGrid.js +54 -54
  25. package/src/dataset/TiledGrid.js +264 -264
  26. package/src/index.js +73 -71
  27. package/src/legend/ColorCategoryLegend.js +124 -124
  28. package/src/legend/ColorDiscreteLegend.js +103 -103
  29. package/src/legend/ColorLegend.js +128 -128
  30. package/src/legend/SegmentOrientationLegend.js +87 -87
  31. package/src/legend/SegmentWidthLegend.js +101 -101
  32. package/src/legend/SizeLegend.js +141 -141
  33. package/src/style/CompositionStyle.js +300 -300
  34. package/src/style/CompositionStyle_.js +293 -0
  35. package/src/style/ContourStyle.js +54 -54
  36. package/src/style/DotDensityStyle.js +156 -156
  37. package/src/style/IsoFenceStyle.js +262 -262
  38. package/src/style/JoyPlotStyle.js +135 -135
  39. package/src/style/LegoStyle.js +112 -112
  40. package/src/style/MosaicStyle.js +107 -107
  41. package/src/style/NinjaStarStyle.js +125 -125
  42. package/src/style/PillarStyle.js +230 -230
  43. package/src/style/SegmentStyle.js +142 -142
  44. package/src/style/ShapeColorSizeStyle.js +152 -152
  45. package/src/style/ShapeColorSizeStyle_.js +108 -0
  46. package/src/style/SideCatStyle.js +172 -172
  47. package/src/style/SideStyle.js +216 -216
  48. package/src/style/SquareColorCatWGLStyle.js +120 -120
  49. package/src/style/SquareColorWGLStyle.js +146 -146
  50. package/src/style/StrokeStyle.js +131 -131
  51. package/src/style/TanakaStyle.js +160 -160
  52. package/src/style/TextStyle.js +132 -132
  53. package/src/style/TimeSeriesStyle.js +259 -259
  54. package/src/utils/Utils.js +35 -35
  55. package/src/utils/WebGLRectangleColoring.js +106 -106
  56. package/src/utils/WebGLSquareColoring.js +118 -118
  57. package/src/utils/WebGLSquareColoringAdvanced.js +230 -230
  58. package/src/utils/WebGLSquareColoringCatAdvanced.js +133 -133
  59. package/src/utils/WebGLSquareColoringKS.js +153 -153
  60. package/src/utils/stretching.js +154 -131
  61. package/src/utils/webGLUtils.js +71 -71
  62. package/src/utils/zoomUtils.js +142 -142
@@ -1,54 +1,66 @@
1
- /**
2
- * Parent class for button elements used to interact with the gridviz viewer.
3
- *
4
- * @author Joseph Davies, Julien Gaffuri
5
- */
6
- export class Button {
7
- /**
8
- * @param {Object} opts
9
- * opts.parentNode
10
- * opts.id
11
- * opts.title
12
- * opts.class
13
- * opts.onClickFunction
14
- * opts.x
15
- * opts.y
16
- */
17
- constructor(opts) {
18
- opts = opts || {}
19
-
20
- this.app = opts.app
21
- this.parentNode = opts.parentNode || opts.app.container
22
- this.id = opts.id || 'button-' + Math.random()
23
-
24
- // create HTML node
25
- this.node = document.createElement('div')
26
- this.node.id = this.id
27
- if (opts.title) this.node.title = opts.title
28
- if (opts.class) this.node.classList.add(opts.class)
29
-
30
- // add events
31
- if (opts.onClickFunction) this.node.addEventListener('onclick', opts.onClickFunction)
32
- this.node.addEventListener('mouseover', (e)=>{this.node.style.backgroundColor = 'lightgrey'})
33
- this.node.addEventListener('mouseout', (e)=>{this.node.style.backgroundColor = '#ffffff'})
34
-
35
- //set styles
36
- this.node.classList.add(opts.class)
37
- this.node.style.boxShadow =
38
- '0 7px 8px rgba(0,47,103,.08), 0 0 22px rgba(0,47,103,.04), 0 12px 17px rgba(0,47,103,.04), 0 -4px 4px rgba(0,47,103,.04)' //.ecl-u-shadow-3
39
- this.node.style.backgroundColor = '#ffffff' //.ecl-u-bg-white
40
- this.node.style.position = 'absolute'
41
- this.node.style.cursor = 'pointer'
42
- this.node.style.display = 'flex'
43
- this.node.style.justifyContent = 'center'
44
- this.node.style.alignItems = 'center'
45
- this.node.style.width = '30px'
46
- this.node.style.height = '30px'
47
- // this.node.style.padding = '4px'
48
- this.node.style.top = opts.y + 'px'
49
- this.node.style.left = opts.x + 'px'
50
-
51
- // append to parent
52
- this.parentNode.appendChild(this.node)
53
- }
54
- }
1
+ import { select } from 'd3-selection'
2
+
3
+ /**
4
+ * Parent class for button elements used to interact with the gridviz viewer.
5
+ *
6
+ * @author Joseph Davies, Julien Gaffuri
7
+ */
8
+ export class Button {
9
+ /**
10
+ * @param {Object} opts
11
+ * opts.parentNode
12
+ * opts.id
13
+ * opts.title
14
+ * opts.class
15
+ * opts.onClickFunction
16
+ * opts.x
17
+ * opts.y
18
+ */
19
+ constructor(opts) {
20
+ opts = opts || {}
21
+
22
+ this.app = opts.app
23
+ this.parentNode = opts.parentNode || opts.app.container
24
+
25
+ // the div element
26
+ if (this.id) this.div = select('#' + this.id)
27
+
28
+ if (!this.div || this.div.empty()) {
29
+ this.div = select(document.createElement('div'))
30
+ if (this.id) this.div.attr('id', this.id)
31
+ }
32
+
33
+ if (opts.title) this.div.attr('title',opts.title)
34
+ if (opts.class) this.div.attr('class',opts.class)
35
+
36
+ // add events
37
+ if (opts.onClickFunction) this.div.on('click', opts.onClickFunction)
38
+
39
+ //set styles
40
+ this.style('box-shadow','0 7px 8px rgba(0,47,103,.08), 0 0 22px rgba(0,47,103,.04), 0 12px 17px rgba(0,47,103,.04), 0 -4px 4px rgba(0,47,103,.04)') //.ecl-u-shadow-3
41
+ this.style('background-color','#ffffff')
42
+ this.style('position' , 'absolute')
43
+ this.style('cursor' , 'pointer')
44
+ this.style('display' , 'flex')
45
+ this.style('justify-content' , 'center')
46
+ this.style('align-items' , 'center')
47
+ this.style('width' , '30px')
48
+ this.style('height' , '30px')
49
+ // this.style(padding , '4px'
50
+
51
+
52
+ // append to parent
53
+ this.parentNode.appendChild(this.div.node())
54
+ }
55
+
56
+ /**
57
+ * Apply a style to the button div.
58
+ * @param {string} k
59
+ * @param {string} v
60
+ * @returns {this}
61
+ */
62
+ style(k, v) {
63
+ this.div.style(k, v)
64
+ return this
65
+ }
66
+ }
@@ -1,98 +1,120 @@
1
- import { Button } from './Button.js'
2
-
3
- /**
4
- * Button for toggling fullscreen mode
5
- *
6
- * @author Joseph Davies, Julien Gaffuri
7
- */
8
- export class FullscreenButton extends Button {
9
- /**
10
- * @param {Object} opts
11
- * opts.parentNode - the node that the button is appended to
12
- * opts.canvas - the gridviz canvas
13
- * opts.id
14
- * opts.title - HTML title attribute
15
- * opts.class - css class
16
- * opts.onClickFunction
17
- * opts.x - x position of the button
18
- * opts.y - y position of the button
19
- */
20
-
21
- // default state
22
- isFullscreen = false
23
-
24
- constructor(opts) {
25
- super(opts)
26
-
27
- // append fullscreen icon to button container
28
- this.node.innerHTML = `
29
- <svg
30
- style="height: 1.2rem; width: 1.2rem; fill:black; margin:0;"
31
- focusable="false"
32
- aria-hidden="true"
33
- >
34
- <svg fill="#000000" viewBox="0 0 96 96" xmlns="http://www.w3.org/2000/svg">
35
- <title/>
36
- <g>
37
- <path d="M30,0H6A5.9966,5.9966,0,0,0,0,6V30a6,6,0,0,0,12,0V12H30A6,6,0,0,0,30,0Z"/>
38
- <path d="M90,0H66a6,6,0,0,0,0,12H84V30a6,6,0,0,0,12,0V6A5.9966,5.9966,0,0,0,90,0Z"/>
39
- <path d="M30,84H12V66A6,6,0,0,0,0,66V90a5.9966,5.9966,0,0,0,6,6H30a6,6,0,0,0,0-12Z"/>
40
- <path d="M90,60a5.9966,5.9966,0,0,0-6,6V84H66a6,6,0,0,0,0,12H90a5.9966,5.9966,0,0,0,6-6V66A5.9966,5.9966,0,0,0,90,60Z"/>
41
- </g>
42
- </svg>
43
- </svg>
44
- `
45
-
46
- //save initial app dimensions
47
- this.defaultHeight = this.app.h
48
- this.defaultWidth = this.app.w
49
-
50
- // event handler
51
- this.node.addEventListener('click', (e) => {
52
- this.onClickFunction(e)
53
- })
54
-
55
- }
56
-
57
- onClickFunction(e) {
58
- if (this.isFullscreen) {
59
- this.closeFullscreen(containerDiv)
60
- //resize canvas to default
61
- this.app.h = this.defaultHeight
62
- this.app.w = this.defaultWidth
63
- this.isFullscreen = false
64
- } else {
65
- this.openFullscreen(containerDiv)
66
- //resize canvas to fullscreen
67
- this.app.h = window.screen.height
68
- this.app.w = window.screen.width
69
- this.isFullscreen = true
70
- }
71
- }
72
-
73
- /* Open fullscreen */
74
- openFullscreen(elem) {
75
- if (elem.requestFullscreen) {
76
- elem.requestFullscreen()
77
- } else if (elem.webkitRequestFullscreen) {
78
- /* Safari */
79
- elem.webkitRequestFullscreen()
80
- } else if (elem.msRequestFullscreen) {
81
- /* IE11 */
82
- elem.msRequestFullscreen()
83
- }
84
- }
85
-
86
- /* Close fullscreen */
87
- closeFullscreen() {
88
- if (document.exitFullscreen) {
89
- document.exitFullscreen()
90
- } else if (document.webkitExitFullscreen) {
91
- /* Safari */
92
- document.webkitExitFullscreen()
93
- } else if (document.msExitFullscreen) {
94
- /* IE11 */
95
- document.msExitFullscreen()
96
- }
97
- }
98
- }
1
+ import { Button } from './Button.js'
2
+
3
+ /**
4
+ * Button for toggling fullscreen mode
5
+ *
6
+ * @author Joseph Davies, Julien Gaffuri
7
+ */
8
+ export class FullscreenButton extends Button {
9
+ /**
10
+ * @param {Object} opts
11
+ * opts.parentNode - the node that the button is appended to
12
+ * opts.canvas - the gridviz canvas
13
+ * opts.id
14
+ * opts.title - HTML title attribute
15
+ * opts.class - css class
16
+ * opts.onClickFunction
17
+ * opts.x - x position of the button
18
+ * opts.y - y position of the button
19
+ */
20
+
21
+ // default state
22
+ isFullscreen = false
23
+
24
+ constructor(opts) {
25
+ super(opts)
26
+
27
+ // append fullscreen icon to button container
28
+ this.div.node().innerHTML = `
29
+ <svg
30
+ style="height: 1.2rem; width: 1.2rem; fill:black; margin:0;"
31
+ focusable="false"
32
+ aria-hidden="true"
33
+ >
34
+ <svg fill="#000000" viewBox="0 0 96 96" xmlns="http://www.w3.org/2000/svg">
35
+ <title/>
36
+ <g>
37
+ <path d="M30,0H6A5.9966,5.9966,0,0,0,0,6V30a6,6,0,0,0,12,0V12H30A6,6,0,0,0,30,0Z"/>
38
+ <path d="M90,0H66a6,6,0,0,0,0,12H84V30a6,6,0,0,0,12,0V6A5.9966,5.9966,0,0,0,90,0Z"/>
39
+ <path d="M30,84H12V66A6,6,0,0,0,0,66V90a5.9966,5.9966,0,0,0,6,6H30a6,6,0,0,0,0-12Z"/>
40
+ <path d="M90,60a5.9966,5.9966,0,0,0-6,6V84H66a6,6,0,0,0,0,12H90a5.9966,5.9966,0,0,0,6-6V66A5.9966,5.9966,0,0,0,90,60Z"/>
41
+ </g>
42
+ </svg>
43
+ </svg>
44
+ `
45
+
46
+ //save initial app dimensions
47
+ this.defaultHeight = this.app.h
48
+ this.defaultWidth = this.app.w
49
+
50
+ // event handler
51
+ this.div.on('click', (e) => {
52
+ this.onClickFunction(e)
53
+ })
54
+ this.div.on('mouseover', (e) => {
55
+ this.style('background-color', 'lightgrey')
56
+ })
57
+ this.div.on('mouseout', (e) => {
58
+ this.style('background-color', '#ffffff')
59
+ })
60
+
61
+ //set position
62
+ if (opts.x) {
63
+ this.style('left', opts.x + 'px')
64
+ } else {
65
+ this.style('right', '10px')
66
+ }
67
+ if (opts.y) {
68
+ this.style('top', opts.y + 'px')
69
+ } else {
70
+ this.style('top', '90px')
71
+ }
72
+ }
73
+
74
+ onClickFunction(e) {
75
+ if (this.isFullscreen) {
76
+ this.closeFullscreen(this.app.container)
77
+ //resize canvas to default
78
+ this.app.h = this.defaultHeight
79
+ this.app.w = this.defaultWidth
80
+ this.app.cg.h = this.defaultHeight
81
+ this.app.cg.w = this.defaultWidth
82
+ this.app.cg.canvas.setAttribute('width', '' + this.defaultWidth)
83
+ this.app.cg.canvas.setAttribute('height', '' + this.defaultHeight)
84
+ this.app.redraw()
85
+ this.isFullscreen = false
86
+ } else {
87
+ this.openFullscreen(this.app.container)
88
+ //resize canvas to fullscreen
89
+ this.app.h = window.screen.height
90
+ this.app.w = window.screen.width
91
+ this.isFullscreen = true
92
+ }
93
+ }
94
+
95
+ /* Open fullscreen */
96
+ openFullscreen(elem) {
97
+ if (elem.requestFullscreen) {
98
+ elem.requestFullscreen()
99
+ } else if (elem.webkitRequestFullscreen) {
100
+ /* Safari */
101
+ elem.webkitRequestFullscreen()
102
+ } else if (elem.msRequestFullscreen) {
103
+ /* IE11 */
104
+ elem.msRequestFullscreen()
105
+ }
106
+ }
107
+
108
+ /* Close fullscreen */
109
+ closeFullscreen() {
110
+ if (document.exitFullscreen) {
111
+ document.exitFullscreen()
112
+ } else if (document.webkitExitFullscreen) {
113
+ /* Safari */
114
+ document.webkitExitFullscreen()
115
+ } else if (document.msExitFullscreen) {
116
+ /* IE11 */
117
+ document.msExitFullscreen()
118
+ }
119
+ }
120
+ }
@@ -1,72 +1,95 @@
1
- import { Button } from './Button.js'
2
-
3
-
4
- /**
5
- * Button for toggling fullscreen mode
6
- *
7
- * @author Joseph Davies, Julien Gaffuri
8
- */
9
- export class ZoomButtons extends Button {
10
- /**
11
- * @param {Object} opts
12
- */
13
- constructor(opts) {
14
- super(opts)
15
-
16
- this.onZoom = opts.onZoom // custom user event handler
17
- this.delta = opts.delta || 0.2
18
-
19
- // zoom in btn
20
- this.zoomInBtn = document.createElement('a')
21
- this.zoomInBtn.innerHTML = `<a id="zoomin" class="gridviz-zoom-button" title="Zoom in">+</a>`
22
- this.zoomInBtn.title = 'Zoom in';
23
- this.zoomInBtn.addEventListener('click', (e)=>{this.zoomIn(e)})
24
- this.zoomInBtn.addEventListener('mouseover', (e)=>{this.zoomInBtn.style.backgroundColor = 'lightgrey'})
25
- this.zoomInBtn.addEventListener('mouseout', (e)=>{this.zoomInBtn.style.backgroundColor = '#ffffff'})
26
-
27
- // zoom out btn
28
- this.zoomOutBtn = document.createElement('a')
29
- this.zoomOutBtn.innerHTML = `<a id="zoomin" class="gridviz-zoom-button" title="Zoom out">-</a>`
30
- this.zoomOutBtn.title = 'Zoom out';
31
- this.zoomOutBtn.addEventListener('click', (e)=>{this.zoomOut(e)})
32
- this.zoomOutBtn.addEventListener('mouseover', (e)=>{this.zoomOutBtn.style.backgroundColor = 'lightgrey'})
33
- this.zoomOutBtn.addEventListener('mouseout', (e)=>{this.zoomOutBtn.style.backgroundColor = '#ffffff'})
34
-
35
- //set styles
36
- let btns = [this.zoomInBtn, this.zoomOutBtn]
37
- btns.forEach((btn, i)=>{
38
- btn.style.alignItems = 'center';
39
- btn.style.justifyContent = 'center';
40
- btn.style.display = 'flex';
41
- btn.style.border = 'none';
42
- btn.style.color = 'black';
43
- btn.style.textAlign = 'center';
44
- btn.style.textDecoration = 'none';
45
- btn.style.padding = '4px';
46
- btn.style.fontSize = '20px';
47
- btn.style.fontWeight = 'bold';
48
- btn.style.userSelect = 'none';
49
- if (i==0) btn.style.borderBottom = '1px solid grey'
50
- })
51
-
52
- // unset parent class height
53
- this.node.style.height="unset"
54
- this.node.style.display="unset"
55
-
56
- // append to button container
57
- this.node.appendChild(this.zoomInBtn)
58
- this.node.appendChild(this.zoomOutBtn)
59
- }
60
-
61
- /* Zoom in */
62
- zoomIn(e) {
63
- this.app.setZoomFactor(this.app.getZoomFactor() * (1 - this.delta)).redraw()
64
- if (this.onZoom) this.onZoom(e)
65
- }
66
-
67
- /* Zoom out */
68
- zoomOut(e) {
69
- this.app.setZoomFactor(this.app.getZoomFactor() * (1 + this.delta)).redraw()
70
- if (this.onZoom) this.onZoom(e)
71
- }
72
- }
1
+ import { Button } from './Button.js'
2
+
3
+ /**
4
+ * Button for toggling fullscreen mode
5
+ *
6
+ * @author Joseph Davies, Julien Gaffuri
7
+ */
8
+ export class ZoomButtons extends Button {
9
+ /**
10
+ * @param {Object} opts
11
+ */
12
+ constructor(opts) {
13
+ super(opts)
14
+
15
+ this.onZoom = opts.onZoom // custom user event handler
16
+ this.delta = opts.delta || 0.2
17
+
18
+ // zoom in btn
19
+ this.zoomInBtn = document.createElement('a')
20
+ this.zoomInBtn.innerHTML = `<a id="zoomin" class="gridviz-zoom-button" title="Zoom in">+</a>`
21
+ this.zoomInBtn.title = 'Zoom in'
22
+ this.zoomInBtn.addEventListener('click', (e) => {
23
+ this.zoomIn(e)
24
+ })
25
+ this.zoomInBtn.addEventListener('mouseover', (e) => {
26
+ this.zoomInBtn.style.backgroundColor = 'lightgrey'
27
+ })
28
+ this.zoomInBtn.addEventListener('mouseout', (e) => {
29
+ this.zoomInBtn.style.backgroundColor = '#ffffff'
30
+ })
31
+
32
+ // zoom out btn
33
+ this.zoomOutBtn = document.createElement('a')
34
+ this.zoomOutBtn.innerHTML = `<a id="zoomin" class="gridviz-zoom-button" title="Zoom out">-</a>`
35
+ this.zoomOutBtn.title = 'Zoom out'
36
+ this.zoomOutBtn.addEventListener('click', (e) => {
37
+ this.zoomOut(e)
38
+ })
39
+ this.zoomOutBtn.addEventListener('mouseover', (e) => {
40
+ this.zoomOutBtn.style.backgroundColor = 'lightgrey'
41
+ })
42
+ this.zoomOutBtn.addEventListener('mouseout', (e) => {
43
+ this.zoomOutBtn.style.backgroundColor = '#ffffff'
44
+ })
45
+
46
+ //set styles
47
+ let btns = [this.zoomInBtn, this.zoomOutBtn]
48
+ btns.forEach((btn, i) => {
49
+ btn.style.alignItems = 'center'
50
+ btn.style.justifyContent = 'center'
51
+ btn.style.display = 'flex'
52
+ btn.style.border = 'none'
53
+ btn.style.color = 'black'
54
+ btn.style.textAlign = 'center'
55
+ btn.style.textDecoration = 'none'
56
+ btn.style.padding = '4px'
57
+ btn.style.fontSize = '20px'
58
+ btn.style.fontWeight = 'bold'
59
+ btn.style.userSelect = 'none'
60
+ if (i == 0) btn.style.borderBottom = '1px solid grey'
61
+ })
62
+
63
+ // unset parent class height and display for dual buttons
64
+ this.style('height', 'unset')
65
+ this.style('display', 'unset')
66
+
67
+ //set position
68
+ if (opts.x) {
69
+ this.style('left', opts.x + 'px')
70
+ } else {
71
+ this.style('right', '10px')
72
+ }
73
+ if (opts.y) {
74
+ this.style('top', opts.y + 'px')
75
+ } else {
76
+ this.style('top', '10px')
77
+ }
78
+
79
+ // append to button container
80
+ this.div.node().appendChild(this.zoomInBtn)
81
+ this.div.node().appendChild(this.zoomOutBtn)
82
+ }
83
+
84
+ /* Zoom in */
85
+ zoomIn(e) {
86
+ this.app.setZoomFactor(this.app.getZoomFactor() * (1 - this.delta)).redraw()
87
+ if (this.onZoom) this.onZoom(e)
88
+ }
89
+
90
+ /* Zoom out */
91
+ zoomOut(e) {
92
+ this.app.setZoomFactor(this.app.getZoomFactor() * (1 + this.delta)).redraw()
93
+ if (this.onZoom) this.onZoom(e)
94
+ }
95
+ }
@@ -1,24 +1,24 @@
1
- //@ts-check
2
- 'use strict'
3
-
4
- import { DatasetComponent } from '../DatasetComponent.js'
5
-
6
- /**
7
- * @todo
8
- * A dataset composed of a COGeo file.
9
- * @see https://www.cogeo.org/
10
- *
11
- * @author Joseph Davies, Julien Gaffuri
12
- */
13
- export class COGeo extends DatasetComponent {
14
- /**
15
- *
16
- * @param {String} url
17
- * @param {{preprocess?:(function(import("../Dataset").Cell):boolean)}} opts
18
- */
19
- constructor(url, opts = {}) {
20
- super(url, 0, opts)
21
- }
22
-
23
- //TODO Use https://geotiffjs.github.io/
24
- }
1
+ //@ts-check
2
+ 'use strict'
3
+
4
+ import { DatasetComponent } from '../DatasetComponent.js'
5
+
6
+ /**
7
+ * @todo
8
+ * A dataset composed of a COGeo file.
9
+ * @see https://www.cogeo.org/
10
+ *
11
+ * @author Joseph Davies, Julien Gaffuri
12
+ */
13
+ export class COGeo extends DatasetComponent {
14
+ /**
15
+ *
16
+ * @param {String} url
17
+ * @param {{preprocess?:(function(import("../Dataset").Cell):boolean)}} opts
18
+ */
19
+ constructor(url, opts = {}) {
20
+ super(url, 0, opts)
21
+ }
22
+
23
+ //TODO Use https://geotiffjs.github.io/
24
+ }