@mesh3d/cesium-vectortile-gl 0.4.4 → 0.4.6

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 (51) hide show
  1. package/.gitattributes +11 -0
  2. package/.gitconfig +3 -0
  3. package/.husky/pre-commit +1 -0
  4. package/.prettierignore +5 -0
  5. package/.vscode/settings.json +25 -0
  6. package/LICENSE.md +203 -203
  7. package/README.md +202 -167
  8. package/Source/Cesium.d.ts +2692 -2691
  9. package/Source/VectorTileLOD.js +720 -532
  10. package/Source/VectorTileRenderList.js +70 -70
  11. package/Source/VectorTileset.js +473 -447
  12. package/Source/layers/BackgroundRenderLayer.js +91 -89
  13. package/Source/layers/FillRenderLayer.js +18 -18
  14. package/Source/layers/IRenderLayer.js +160 -152
  15. package/Source/layers/LineRenderLayer.js +104 -94
  16. package/Source/layers/SymbolRenderLayer.js +30 -31
  17. package/Source/layers/index.js +23 -16
  18. package/Source/layers/registerRenderLayer.js +24 -24
  19. package/Source/layers/visualizers/FillLayerVisualizer.js +542 -426
  20. package/Source/layers/visualizers/ILayerVisualizer.js +90 -94
  21. package/Source/layers/visualizers/LineLayerVisualizer.js +702 -571
  22. package/Source/layers/visualizers/SymbolLayerVisualizer.js +514 -244
  23. package/Source/sources/GeoJSONSource.js +53 -46
  24. package/Source/sources/ISource.js +39 -39
  25. package/Source/sources/VectorSource.js +94 -52
  26. package/Source/sources/granularitySettings.js +23 -20
  27. package/Source/sources/index.js +6 -11
  28. package/Source/sources/registerSource.js +17 -19
  29. package/Source/style/StyleLayer.js +43 -43
  30. package/Source/style/StyleLayerProperties.js +44 -43
  31. package/Source/style/index.js +2 -2
  32. package/Source/symbol/SymbolPlacements.js +117 -88
  33. package/Source/workers/VectorTileWorker.js +41 -0
  34. package/Source/workers/ellipsoid.js +47 -0
  35. package/Source/workers/processTileTask.js +329 -0
  36. package/Source/workers/styleEvaluator.js +168 -0
  37. package/benchmark.html +148 -0
  38. package/dist/cvt-gl-worker.js +9274 -0
  39. package/dist/cvt-gl-worker.js.map +1 -0
  40. package/dist/cvt-gl.js +2570 -2001
  41. package/dist/cvt-gl.js.map +1 -1
  42. package/dist/cvt-gl.min.js +3 -3
  43. package/dist/cvt-gl.min.js.map +1 -1
  44. package/eslint.config.mjs +58 -0
  45. package/index.js +9 -6
  46. package/mlt.html +26 -25
  47. package/package.json +64 -41
  48. package/prettier.config.mjs +30 -0
  49. package/vite.config.mjs +43 -0
  50. package/vite.worker.config.mjs +31 -0
  51. package/worker.html +26 -0
@@ -1,94 +1,104 @@
1
- import * as MVT from '@mapbox/vector-tile'
2
- import { StyleLayer } from '../style/StyleLayer'
3
- import { VectorTileset } from '../VectorTileset'
4
- import { IRenderLayer } from './IRenderLayer'
5
- import { registerRenderLayer } from './registerRenderLayer'
6
- import { VectorTileLOD } from '../VectorTileLOD'
7
- import { LineLayerVisualizer } from './visualizers/LineLayerVisualizer'
8
-
9
- export class LineRenderLayer extends IRenderLayer {
10
- /**
11
- * @param {MVT.VectorTileFeature[]} sourceFeatures
12
- * @param {StyleLayer} styleLayer
13
- * @param {VectorTileLOD} tile
14
- */
15
- constructor(sourceFeatures, styleLayer, tile) {
16
- super(sourceFeatures, styleLayer, tile)
17
- this.primitive = null
18
- this.dasharray = []
19
- this.dashLength = 0
20
- }
21
-
22
- createPrimitve(frameState, tileset) {
23
- const primitive = new Cesium.PolylineCollection()
24
- const sourceFeatures = this.sourceFeatures
25
- const style = this.style
26
- const tile = this.tile
27
-
28
- function addPolyline(coordinates, lineWidth, lineColor) {
29
- if (coordinates.length < 2) return
30
-
31
- const positions = coordinates.map(coord => Cesium.Cartesian3.fromDegrees(coord[0], coord[1]))
32
- primitive.add({
33
- positions,
34
- width: lineWidth,
35
- material: Cesium.Material.fromType('Color', {
36
- color: style.convertColor(lineColor)
37
- })
38
- })
39
- }
40
-
41
- for (const sourceFeature of sourceFeatures) {
42
- const feature = sourceFeature.toGeoJSON(tile.x, tile.y, tile.z)
43
- if (!feature.geometry) continue
44
-
45
- //读取图层样式属性
46
- const lineWidth = style.paint.getDataValue('line-width', tile.z, sourceFeature)
47
- const lineColor = style.paint.getDataValue('line-color', tile.z, sourceFeature)
48
-
49
- const geometryType = feature.geometry.type
50
- const coordinates = feature.geometry.coordinates
51
- if (geometryType == 'LineString') {
52
- addPolyline(coordinates, lineWidth, lineColor)
53
- }
54
- else if (geometryType == 'MultiLineString' || geometryType == 'Polygon') {
55
- for (const ring of coordinates) {
56
- addPolyline(ring, lineWidth, lineColor)
57
- }
58
- }
59
- else if (geometryType == 'MultiPolygon') {
60
- for (const polygon of coordinates) {
61
- for (const ring of polygon) {
62
- addPolyline(ring, lineWidth, lineColor)
63
- }
64
- }
65
- }
66
- else {
67
- console.log('暂不支持几何类型:' + geometryType);
68
- }
69
- }
70
-
71
- this.primitive = primitive
72
- }
73
-
74
- /**
75
- * @param {Cesium.FrameState} frameState
76
- * @param {VectorTileset} tileset
77
- */
78
- update(frameState, tileset) {
79
- // if (!this.primitive) {
80
- // this.createPrimitve(frameState, tileset)
81
- // }
82
- // if (this.primitive && this.primitive.length) {
83
- // this.primitive.update(frameState)
84
- // }
85
- super.update(frameState, tileset)
86
- }
87
-
88
- destroy() {
89
- this.primitive = this.primitive && this.primitive.destroy()
90
- super.destroy()
91
- }
92
- }
93
-
94
- registerRenderLayer('line', LineRenderLayer, LineLayerVisualizer)
1
+ import * as MVT from '@mapbox/vector-tile'
2
+ import { StyleLayer } from '../style/StyleLayer'
3
+ import { VectorTileset } from '../VectorTileset'
4
+ import { IRenderLayer } from './IRenderLayer'
5
+ import { registerRenderLayer } from './registerRenderLayer'
6
+ import { VectorTileLOD } from '../VectorTileLOD'
7
+ import { LineLayerVisualizer } from './visualizers/LineLayerVisualizer'
8
+
9
+ export class LineRenderLayer extends IRenderLayer {
10
+ /**
11
+ * @param {MVT.VectorTileFeature[]} sourceFeatures
12
+ * @param {StyleLayer} styleLayer
13
+ * @param {VectorTileLOD} tile
14
+ */
15
+ constructor(sourceFeatures, styleLayer, tile) {
16
+ super(sourceFeatures, styleLayer, tile)
17
+ this.primitive = null
18
+ this.dasharray = []
19
+ this.dashLength = 0
20
+ }
21
+
22
+ createPrimitve(frameState, tileset) {
23
+ const primitive = new Cesium.PolylineCollection()
24
+ const sourceFeatures = this.sourceFeatures
25
+ const style = this.style
26
+ const tile = this.tile
27
+
28
+ function addPolyline(coordinates, lineWidth, lineColor) {
29
+ if (coordinates.length < 2) return
30
+
31
+ const positions = coordinates.map(coord =>
32
+ Cesium.Cartesian3.fromDegrees(coord[0], coord[1])
33
+ )
34
+ primitive.add({
35
+ positions,
36
+ width: lineWidth,
37
+ material: Cesium.Material.fromType('Color', {
38
+ color: style.convertColor(lineColor)
39
+ })
40
+ })
41
+ }
42
+
43
+ for (const sourceFeature of sourceFeatures) {
44
+ const feature = sourceFeature.toGeoJSON(tile.x, tile.y, tile.z)
45
+ if (!feature.geometry) continue
46
+
47
+ //读取图层样式属性
48
+ const lineWidth = style.paint.getDataValue(
49
+ 'line-width',
50
+ tile.z,
51
+ sourceFeature
52
+ )
53
+ const lineColor = style.paint.getDataValue(
54
+ 'line-color',
55
+ tile.z,
56
+ sourceFeature
57
+ )
58
+
59
+ const geometryType = feature.geometry.type
60
+ const coordinates = feature.geometry.coordinates
61
+ if (geometryType == 'LineString') {
62
+ addPolyline(coordinates, lineWidth, lineColor)
63
+ } else if (
64
+ geometryType == 'MultiLineString' ||
65
+ geometryType == 'Polygon'
66
+ ) {
67
+ for (const ring of coordinates) {
68
+ addPolyline(ring, lineWidth, lineColor)
69
+ }
70
+ } else if (geometryType == 'MultiPolygon') {
71
+ for (const polygon of coordinates) {
72
+ for (const ring of polygon) {
73
+ addPolyline(ring, lineWidth, lineColor)
74
+ }
75
+ }
76
+ } else {
77
+ console.log('暂不支持几何类型:' + geometryType)
78
+ }
79
+ }
80
+
81
+ this.primitive = primitive
82
+ }
83
+
84
+ /**
85
+ * @param {Cesium.FrameState} frameState
86
+ * @param {VectorTileset} tileset
87
+ */
88
+ update(frameState, tileset) {
89
+ // if (!this.primitive) {
90
+ // this.createPrimitve(frameState, tileset)
91
+ // }
92
+ // if (this.primitive && this.primitive.length) {
93
+ // this.primitive.update(frameState)
94
+ // }
95
+ super.update(frameState, tileset)
96
+ }
97
+
98
+ destroy() {
99
+ this.primitive = this.primitive && this.primitive.destroy()
100
+ super.destroy()
101
+ }
102
+ }
103
+
104
+ registerRenderLayer('line', LineRenderLayer, LineLayerVisualizer)
@@ -1,31 +1,30 @@
1
- import * as MVT from '@mapbox/vector-tile'
2
- import { StyleLayer } from '../style/StyleLayer'
3
- import { VectorTileLOD } from '../VectorTileLOD'
4
- import { IRenderLayer } from './IRenderLayer'
5
- import { SymbolLayerVisualizer } from './visualizers/SymbolLayerVisualizer'
6
- import { registerRenderLayer } from './registerRenderLayer'
7
-
8
- export class SymbolRenderLayer extends IRenderLayer {
9
- /**
10
- * @param {MVT.VectorTileFeature[]} sourceFeatures
11
- * @param {StyleLayer} style
12
- * @param {VectorTileLOD} tile
13
- */
14
- constructor(sourceFeatures, styleLayer, tile) {
15
- super(sourceFeatures, styleLayer, tile)
16
- this.labels = []
17
- }
18
-
19
- /**
20
- * @param {Cesium.FrameState} frameState
21
- * @param {VectorTileset} tileset
22
- */
23
- update(frameState, tileset) {
24
- //TODO:动态更新符号样式
25
-
26
- super.update(frameState, tileset)
27
- }
28
-
29
- }
30
-
31
- registerRenderLayer('symbol', SymbolRenderLayer, SymbolLayerVisualizer)
1
+ import * as MVT from '@mapbox/vector-tile'
2
+ import { StyleLayer } from '../style/StyleLayer'
3
+ import { VectorTileLOD } from '../VectorTileLOD'
4
+ import { IRenderLayer } from './IRenderLayer'
5
+ import { SymbolLayerVisualizer } from './visualizers/SymbolLayerVisualizer'
6
+ import { registerRenderLayer } from './registerRenderLayer'
7
+
8
+ export class SymbolRenderLayer extends IRenderLayer {
9
+ /**
10
+ * @param {MVT.VectorTileFeature[]} sourceFeatures
11
+ * @param {StyleLayer} style
12
+ * @param {VectorTileLOD} tile
13
+ */
14
+ constructor(sourceFeatures, styleLayer, tile) {
15
+ super(sourceFeatures, styleLayer, tile)
16
+ this.labels = []
17
+ }
18
+
19
+ /**
20
+ * @param {Cesium.FrameState} frameState
21
+ * @param {VectorTileset} tileset
22
+ */
23
+ update(frameState, tileset) {
24
+ //TODO:动态更新符号样式
25
+
26
+ super.update(frameState, tileset)
27
+ }
28
+ }
29
+
30
+ registerRenderLayer('symbol', SymbolRenderLayer, SymbolLayerVisualizer)
@@ -1,16 +1,23 @@
1
- import { RenderLayers, LayerVisualizers, registerRenderLayer } from "./registerRenderLayer";
2
- import { ILayerVisualizer } from "./visualizers/ILayerVisualizer";
3
- import { IRenderLayer } from "./IRenderLayer";
4
- import { BackgroundRenderLayer } from "./BackgroundRenderLayer";
5
- import { FillRenderLayer } from "./FillRenderLayer";
6
- import { LineRenderLayer } from "./LineRenderLayer";
7
- import {SymbolRenderLayer } from "./SymbolRenderLayer";
8
-
9
- export {
10
- RenderLayers, LayerVisualizers, registerRenderLayer,
11
- IRenderLayer, ILayerVisualizer,
12
- BackgroundRenderLayer,
13
- FillRenderLayer,
14
- LineRenderLayer,
15
- SymbolRenderLayer
16
- }
1
+ import {
2
+ RenderLayers,
3
+ LayerVisualizers,
4
+ registerRenderLayer
5
+ } from './registerRenderLayer'
6
+ import { ILayerVisualizer } from './visualizers/ILayerVisualizer'
7
+ import { IRenderLayer } from './IRenderLayer'
8
+ import { BackgroundRenderLayer } from './BackgroundRenderLayer'
9
+ import { FillRenderLayer } from './FillRenderLayer'
10
+ import { LineRenderLayer } from './LineRenderLayer'
11
+ import { SymbolRenderLayer } from './SymbolRenderLayer'
12
+
13
+ export {
14
+ RenderLayers,
15
+ LayerVisualizers,
16
+ registerRenderLayer,
17
+ IRenderLayer,
18
+ ILayerVisualizer,
19
+ BackgroundRenderLayer,
20
+ FillRenderLayer,
21
+ LineRenderLayer,
22
+ SymbolRenderLayer
23
+ }
@@ -1,24 +1,24 @@
1
- import { ILayerVisualizer } from "./visualizers/ILayerVisualizer"
2
- import { IRenderLayer } from "./IRenderLayer"
3
-
4
- /**
5
- * @type {Record<string,typeof IRenderLayer>}
6
- */
7
- const RenderLayers = {}
8
- /**
9
- * @type {Record<string,typeof ILayerVisualizer>}
10
- */
11
- const LayerVisualizers = {}
12
-
13
- /**
14
- * 注册图层类型,设置渲染图层类和图层渲染器类(非必须)
15
- * @param {"symbol" | "fill" | "line" | "circle" | "heatmap" | "fill-extrusion" | "raster" | "hillshade" | "color-relief" | "background"} type 图层类型
16
- * @param {typeof IRenderLayer} renderLayerCls 渲染图层类,必须继承 IRenderLayer
17
- * @param {typeof ILayerVisualizer} [layerVisualizerCls] 图层渲染器类,必须继承 ILayerVisualizer
18
- */
19
- function registerRenderLayer(type, renderLayerCls, layerVisualizerCls) {
20
- RenderLayers[type] = renderLayerCls
21
- LayerVisualizers[type] = layerVisualizerCls
22
- }
23
-
24
- export { RenderLayers, LayerVisualizers, registerRenderLayer }
1
+ import { ILayerVisualizer } from './visualizers/ILayerVisualizer'
2
+ import { IRenderLayer } from './IRenderLayer'
3
+
4
+ /**
5
+ * @type {Record<string,typeof IRenderLayer>}
6
+ */
7
+ const RenderLayers = {}
8
+ /**
9
+ * @type {Record<string,typeof ILayerVisualizer>}
10
+ */
11
+ const LayerVisualizers = {}
12
+
13
+ /**
14
+ * 注册图层类型,设置渲染图层类和图层渲染器类(非必须)
15
+ * @param {"symbol" | "fill" | "line" | "circle" | "heatmap" | "fill-extrusion" | "raster" | "hillshade" | "color-relief" | "background"} type 图层类型
16
+ * @param {typeof IRenderLayer} renderLayerCls 渲染图层类,必须继承 IRenderLayer
17
+ * @param {typeof ILayerVisualizer} [layerVisualizerCls] 图层渲染器类,必须继承 ILayerVisualizer
18
+ */
19
+ function registerRenderLayer(type, renderLayerCls, layerVisualizerCls) {
20
+ RenderLayers[type] = renderLayerCls
21
+ LayerVisualizers[type] = layerVisualizerCls
22
+ }
23
+
24
+ export { RenderLayers, LayerVisualizers, registerRenderLayer }