@antv/l7-layers 2.8.45 → 2.9.2

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 (171) hide show
  1. package/es/core/BaseLayer.d.ts +3 -1
  2. package/es/core/BaseLayer.js +23 -3
  3. package/es/core/BaseLayer.js.map +1 -1
  4. package/es/core/BaseModel.d.ts +2 -1
  5. package/es/core/BaseModel.js +3 -0
  6. package/es/core/BaseModel.js.map +1 -1
  7. package/es/core/interface.d.ts +12 -0
  8. package/es/core/interface.js.map +1 -1
  9. package/es/image/models/image.js.map +1 -1
  10. package/es/line/index.d.ts +1 -1
  11. package/es/line/index.js +7 -1
  12. package/es/line/index.js.map +1 -1
  13. package/es/line/models/index.d.ts +1 -1
  14. package/es/line/models/index.js +5 -1
  15. package/es/line/models/index.js.map +1 -1
  16. package/es/line/models/tile.d.ts +20 -0
  17. package/es/line/models/tile.js +327 -0
  18. package/es/line/models/tile.js.map +1 -0
  19. package/es/plugins/ShaderUniformPlugin.js +3 -1
  20. package/es/plugins/ShaderUniformPlugin.js.map +1 -1
  21. package/es/point/index.d.ts +1 -1
  22. package/es/point/index.js +8 -2
  23. package/es/point/index.js.map +1 -1
  24. package/es/point/models/index.d.ts +1 -1
  25. package/es/point/models/index.js +5 -1
  26. package/es/point/models/index.js.map +1 -1
  27. package/es/point/models/tile.d.ts +31 -0
  28. package/es/point/models/tile.js +291 -0
  29. package/es/point/models/tile.js.map +1 -0
  30. package/es/polygon/index.js +6 -0
  31. package/es/polygon/index.js.map +1 -1
  32. package/es/polygon/models/index.d.ts +1 -1
  33. package/es/polygon/models/index.js +5 -1
  34. package/es/polygon/models/index.js.map +1 -1
  35. package/es/polygon/models/tile.d.ts +16 -0
  36. package/es/polygon/models/tile.js +137 -0
  37. package/es/polygon/models/tile.js.map +1 -0
  38. package/es/raster/index.d.ts +2 -2
  39. package/es/raster/index.js +4 -4
  40. package/es/raster/index.js.map +1 -1
  41. package/es/raster/models/index.js +1 -1
  42. package/es/raster/models/index.js.map +1 -1
  43. package/es/raster/models/raster.d.ts +1 -0
  44. package/es/raster/models/raster.js +8 -2
  45. package/es/raster/models/raster.js.map +1 -1
  46. package/es/tile/interface.d.ts +28 -0
  47. package/es/tile/interface.js +2 -0
  48. package/es/tile/interface.js.map +1 -0
  49. package/es/tile/manager/tileConfigManager.d.ts +17 -0
  50. package/es/tile/manager/tileConfigManager.js +123 -0
  51. package/es/tile/manager/tileConfigManager.js.map +1 -0
  52. package/es/tile/manager/tileLayerManager.d.ts +34 -0
  53. package/es/tile/manager/tileLayerManager.js +283 -0
  54. package/es/tile/manager/tileLayerManager.js.map +1 -0
  55. package/es/tile/manager/tilePickerManager.d.ts +20 -0
  56. package/es/tile/manager/tilePickerManager.js +167 -0
  57. package/es/tile/manager/tilePickerManager.js.map +1 -0
  58. package/es/tile/models/tileModel.d.ts +8 -0
  59. package/es/tile/models/tileModel.js +61 -0
  60. package/es/tile/models/tileModel.js.map +1 -0
  61. package/es/tile/tileFactory/base.d.ts +41 -0
  62. package/es/tile/tileFactory/base.js +380 -0
  63. package/es/tile/tileFactory/base.js.map +1 -0
  64. package/es/tile/tileFactory/index.d.ts +5 -0
  65. package/es/tile/tileFactory/index.js +30 -0
  66. package/es/tile/tileFactory/index.js.map +1 -0
  67. package/es/tile/tileFactory/line.d.ts +12 -0
  68. package/es/tile/tileFactory/line.js +65 -0
  69. package/es/tile/tileFactory/line.js.map +1 -0
  70. package/es/tile/tileFactory/point.d.ts +12 -0
  71. package/es/tile/tileFactory/point.js +65 -0
  72. package/es/tile/tileFactory/point.js.map +1 -0
  73. package/es/tile/tileFactory/polygon.d.ts +12 -0
  74. package/es/tile/tileFactory/polygon.js +65 -0
  75. package/es/tile/tileFactory/polygon.js.map +1 -0
  76. package/es/tile/tileFactory/raster.d.ts +12 -0
  77. package/es/tile/tileFactory/raster.js +61 -0
  78. package/es/tile/tileFactory/raster.js.map +1 -0
  79. package/es/tile/tileFactory/rasterData.d.ts +12 -0
  80. package/es/tile/tileFactory/rasterData.js +75 -0
  81. package/es/tile/tileFactory/rasterData.js.map +1 -0
  82. package/es/tile/tileFactory/rasterDataLayer.d.ts +19 -0
  83. package/es/{core/LayerGroup.js → tile/tileFactory/rasterDataLayer.js} +39 -32
  84. package/es/tile/tileFactory/rasterDataLayer.js.map +1 -0
  85. package/es/tile/tileFactory/vectorLayer.d.ts +27 -0
  86. package/es/tile/tileFactory/vectorLayer.js +131 -0
  87. package/es/tile/tileFactory/vectorLayer.js.map +1 -0
  88. package/es/tile/tileLayer/baseTileLayer.d.ts +51 -0
  89. package/es/tile/tileLayer/baseTileLayer.js +409 -0
  90. package/es/tile/tileLayer/baseTileLayer.js.map +1 -0
  91. package/es/tile/tmsTileLayer.d.ts +7 -0
  92. package/es/tile/tmsTileLayer.js +100 -0
  93. package/es/tile/tmsTileLayer.js.map +1 -0
  94. package/es/tile/utils.d.ts +11 -0
  95. package/es/tile/utils.js +125 -0
  96. package/es/tile/utils.js.map +1 -0
  97. package/lib/core/BaseLayer.js +21 -2
  98. package/lib/core/BaseLayer.js.map +1 -1
  99. package/lib/core/BaseModel.js +2 -0
  100. package/lib/core/BaseModel.js.map +1 -1
  101. package/lib/core/interface.js.map +1 -1
  102. package/lib/image/models/image.js.map +1 -1
  103. package/lib/line/index.js +7 -1
  104. package/lib/line/index.js.map +1 -1
  105. package/lib/line/models/index.js +7 -1
  106. package/lib/line/models/index.js.map +1 -1
  107. package/lib/line/models/tile.js +342 -0
  108. package/lib/line/models/tile.js.map +1 -0
  109. package/lib/plugins/ShaderUniformPlugin.js +3 -1
  110. package/lib/plugins/ShaderUniformPlugin.js.map +1 -1
  111. package/lib/point/index.js +8 -2
  112. package/lib/point/index.js.map +1 -1
  113. package/lib/point/models/index.js +7 -1
  114. package/lib/point/models/index.js.map +1 -1
  115. package/lib/point/models/tile.js +308 -0
  116. package/lib/point/models/tile.js.map +1 -0
  117. package/lib/polygon/index.js +6 -0
  118. package/lib/polygon/index.js.map +1 -1
  119. package/lib/polygon/models/index.js +7 -1
  120. package/lib/polygon/models/index.js.map +1 -1
  121. package/lib/polygon/models/tile.js +152 -0
  122. package/lib/polygon/models/tile.js.map +1 -0
  123. package/lib/raster/index.js +4 -4
  124. package/lib/raster/index.js.map +1 -1
  125. package/lib/raster/models/index.js +2 -2
  126. package/lib/raster/models/index.js.map +1 -1
  127. package/lib/raster/models/raster.js +8 -2
  128. package/lib/raster/models/raster.js.map +1 -1
  129. package/lib/tile/interface.js +2 -0
  130. package/lib/tile/interface.js.map +1 -0
  131. package/lib/tile/manager/tileConfigManager.js +134 -0
  132. package/lib/tile/manager/tileConfigManager.js.map +1 -0
  133. package/lib/tile/manager/tileLayerManager.js +291 -0
  134. package/lib/tile/manager/tileLayerManager.js.map +1 -0
  135. package/lib/tile/manager/tilePickerManager.js +173 -0
  136. package/lib/tile/manager/tilePickerManager.js.map +1 -0
  137. package/lib/tile/models/tileModel.js +73 -0
  138. package/lib/tile/models/tileModel.js.map +1 -0
  139. package/lib/tile/tileFactory/base.js +395 -0
  140. package/lib/tile/tileFactory/base.js.map +1 -0
  141. package/lib/tile/tileFactory/index.js +60 -0
  142. package/lib/tile/tileFactory/index.js.map +1 -0
  143. package/lib/tile/tileFactory/line.js +76 -0
  144. package/lib/tile/tileFactory/line.js.map +1 -0
  145. package/lib/tile/tileFactory/point.js +76 -0
  146. package/lib/tile/tileFactory/point.js.map +1 -0
  147. package/lib/tile/tileFactory/polygon.js +76 -0
  148. package/lib/tile/tileFactory/polygon.js.map +1 -0
  149. package/lib/tile/tileFactory/raster.js +74 -0
  150. package/lib/tile/tileFactory/raster.js.map +1 -0
  151. package/lib/tile/tileFactory/rasterData.js +88 -0
  152. package/lib/tile/tileFactory/rasterData.js.map +1 -0
  153. package/lib/{core/LayerGroup.js → tile/tileFactory/rasterDataLayer.js} +40 -32
  154. package/lib/tile/tileFactory/rasterDataLayer.js.map +1 -0
  155. package/lib/tile/tileFactory/vectorLayer.js +145 -0
  156. package/lib/tile/tileFactory/vectorLayer.js.map +1 -0
  157. package/lib/tile/tileLayer/baseTileLayer.js +408 -0
  158. package/lib/tile/tileLayer/baseTileLayer.js.map +1 -0
  159. package/lib/tile/tmsTileLayer.js +116 -0
  160. package/lib/tile/tmsTileLayer.js.map +1 -0
  161. package/lib/tile/utils.js +147 -0
  162. package/lib/tile/utils.js.map +1 -0
  163. package/package.json +7 -5
  164. package/es/core/LayerGroup.d.ts +0 -9
  165. package/es/core/LayerGroup.js.map +0 -1
  166. package/es/raster/models/raste-tile.d.ts +0 -23
  167. package/es/raster/models/raste-tile.js +0 -285
  168. package/es/raster/models/raste-tile.js.map +0 -1
  169. package/lib/core/LayerGroup.js.map +0 -1
  170. package/lib/raster/models/raste-tile.js +0 -294
  171. package/lib/raster/models/raste-tile.js.map +0 -1
@@ -0,0 +1,125 @@
1
+ import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
2
+ import { createLayerContainer } from '@antv/l7-core';
3
+ import { DOM } from '@antv/l7-utils';
4
+ export function registerLayers(parentLayer, layers) {
5
+ layers.map(function (layer) {
6
+ var container = createLayerContainer(parentLayer.sceneContainer);
7
+ layer.setContainer(container, parentLayer.sceneContainer);
8
+ layer.init();
9
+ });
10
+ }
11
+ export function getLayerShape(layerType, layer) {
12
+ var _layerShape$scale;
13
+
14
+ var layerShape = layer.getAttribute('shape');
15
+
16
+ if (layerShape && (_layerShape$scale = layerShape.scale) !== null && _layerShape$scale !== void 0 && _layerShape$scale.field) {
17
+ var _layerShape$scale2;
18
+
19
+ if (((_layerShape$scale2 = layerShape.scale) === null || _layerShape$scale2 === void 0 ? void 0 : _layerShape$scale2.values) === 'text') {
20
+ return [layerShape.scale.field, layerShape.scale.values];
21
+ }
22
+
23
+ return layerShape.scale.field;
24
+ }
25
+
26
+ switch (layerType) {
27
+ case 'PolygonLayer':
28
+ return 'fill';
29
+
30
+ case 'LineLayer':
31
+ return 'tileline';
32
+
33
+ case 'PointLayer':
34
+ return 'circle';
35
+
36
+ case 'RasterLayer':
37
+ return 'image';
38
+
39
+ default:
40
+ return '';
41
+ }
42
+ }
43
+ export function getMaskValue(layerType, mask) {
44
+ switch (layerType) {
45
+ case 'PolygonLayer':
46
+ return true;
47
+
48
+ case 'LineLayer':
49
+ return true;
50
+
51
+ case 'PointLayer':
52
+ return false;
53
+
54
+ case 'RasterLayer':
55
+ return mask;
56
+
57
+ default:
58
+ return mask;
59
+ }
60
+ }
61
+ export function getContainerSize(container) {
62
+ if (!!container.getContext) {
63
+ return {
64
+ width: container.width / DOM.DPR,
65
+ height: container.height / DOM.DPR
66
+ };
67
+ } else {
68
+ return container.getBoundingClientRect();
69
+ }
70
+ }
71
+ export function readRasterValue(tile, mapService, x, y) {
72
+ var _tile$bboxPolygon, _tile$data, _tile$data2, _tile$data3;
73
+
74
+ var bbox = (tile === null || tile === void 0 ? void 0 : (_tile$bboxPolygon = tile.bboxPolygon) === null || _tile$bboxPolygon === void 0 ? void 0 : _tile$bboxPolygon.bbox) || [0, 0, 10, -10];
75
+
76
+ var _bbox = _slicedToArray(bbox, 4),
77
+ _bbox$ = _bbox[0],
78
+ minLng = _bbox$ === void 0 ? 0 : _bbox$,
79
+ _bbox$2 = _bbox[1],
80
+ minLat = _bbox$2 === void 0 ? 0 : _bbox$2,
81
+ _bbox$3 = _bbox[2],
82
+ maxLng = _bbox$3 === void 0 ? 10 : _bbox$3,
83
+ _bbox$4 = _bbox[3],
84
+ maxLat = _bbox$4 === void 0 ? -10 : _bbox$4;
85
+
86
+ var tileXY = mapService.lngLatToContainer([minLng, minLat]);
87
+ var tileMaxXY = mapService.lngLatToContainer([maxLng, maxLat]);
88
+ var tilePixelWidth = tileMaxXY.x - tileXY.x;
89
+ var tilePixelHeight = tileXY.y - tileMaxXY.y;
90
+ var pos = [(x - tileXY.x) / tilePixelWidth, (y - tileMaxXY.y) / tilePixelHeight];
91
+ var tileWidth = (tile === null || tile === void 0 ? void 0 : (_tile$data = tile.data) === null || _tile$data === void 0 ? void 0 : _tile$data.width) || 1;
92
+ var tileHeight = (tile === null || tile === void 0 ? void 0 : (_tile$data2 = tile.data) === null || _tile$data2 === void 0 ? void 0 : _tile$data2.height) || 1;
93
+ var indexX = Math.floor(pos[0] * tileWidth);
94
+ var indexY = Math.floor(pos[1] * tileHeight);
95
+ var index = Math.max(0, indexY - 1) * tileWidth + indexX;
96
+ var data = tile === null || tile === void 0 ? void 0 : (_tile$data3 = tile.data) === null || _tile$data3 === void 0 ? void 0 : _tile$data3.data[index];
97
+ return data;
98
+ }
99
+ export function readPixel(x, y, rendererService) {
100
+ var readPixels = rendererService.readPixels,
101
+ getContainer = rendererService.getContainer;
102
+ var xInDevicePixel = x * DOM.DPR;
103
+ var yInDevicePixel = y * DOM.DPR;
104
+
105
+ var _getContainerSize = getContainerSize(getContainer()),
106
+ width = _getContainerSize.width,
107
+ height = _getContainerSize.height;
108
+
109
+ width *= DOM.DPR;
110
+ height *= DOM.DPR;
111
+
112
+ if (xInDevicePixel > width - 1 * DOM.DPR || xInDevicePixel < 0 || yInDevicePixel > height - 1 * DOM.DPR || yInDevicePixel < 0) {
113
+ return false;
114
+ }
115
+
116
+ var pickedColors = readPixels({
117
+ x: Math.floor(xInDevicePixel),
118
+ y: Math.floor(height - (y + 1) * DOM.DPR),
119
+ width: 1,
120
+ height: 1,
121
+ data: new Uint8Array(1 * 1 * 4)
122
+ });
123
+ return pickedColors;
124
+ }
125
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/tile/utils.ts"],"names":["createLayerContainer","DOM","registerLayers","parentLayer","layers","map","layer","container","sceneContainer","setContainer","init","getLayerShape","layerType","layerShape","getAttribute","scale","field","values","getMaskValue","mask","getContainerSize","getContext","width","DPR","height","getBoundingClientRect","readRasterValue","tile","mapService","x","y","bbox","bboxPolygon","minLng","minLat","maxLng","maxLat","tileXY","lngLatToContainer","tileMaxXY","tilePixelWidth","tilePixelHeight","pos","tileWidth","data","tileHeight","indexX","Math","floor","indexY","index","max","readPixel","rendererService","readPixels","getContainer","xInDevicePixel","yInDevicePixel","pickedColors","Uint8Array"],"mappings":"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","sourcesContent":["import {\n createLayerContainer,\n ILayer,\n IMapService,\n IRendererService,\n} from '@antv/l7-core';\nimport { DOM, Tile } from '@antv/l7-utils';\nimport { Container } from 'inversify';\nexport function registerLayers(parentLayer: ILayer, layers: ILayer[]) {\n layers.map((layer) => {\n const container = createLayerContainer(\n parentLayer.sceneContainer as Container,\n );\n layer.setContainer(container, parentLayer.sceneContainer as Container);\n layer.init();\n });\n}\n\nexport function getLayerShape(layerType: string, layer: ILayer) {\n const layerShape = layer.getAttribute('shape');\n if (layerShape && layerShape.scale?.field) {\n if (layerShape.scale?.values === 'text') {\n return [layerShape.scale.field, layerShape.scale.values] as string[];\n }\n return layerShape.scale.field as string;\n }\n switch (layerType) {\n case 'PolygonLayer':\n return 'fill';\n case 'LineLayer':\n return 'tileline';\n case 'PointLayer':\n return 'circle';\n case 'RasterLayer':\n return 'image';\n default:\n return '';\n }\n}\n\nexport function getMaskValue(layerType: string, mask: boolean) {\n switch (layerType) {\n case 'PolygonLayer':\n return true;\n case 'LineLayer':\n return true;\n case 'PointLayer':\n return false;\n case 'RasterLayer':\n return mask;\n default:\n return mask;\n }\n}\n\nexport function getContainerSize(container: HTMLCanvasElement | HTMLElement) {\n if (!!(container as HTMLCanvasElement).getContext) {\n return {\n width: (container as HTMLCanvasElement).width / DOM.DPR,\n height: (container as HTMLCanvasElement).height / DOM.DPR,\n };\n } else {\n return container.getBoundingClientRect();\n }\n}\n\nexport function readRasterValue(\n tile: Tile,\n mapService: IMapService,\n x: number,\n y: number,\n) {\n const bbox = tile?.bboxPolygon?.bbox || [0, 0, 10, -10];\n\n const [minLng = 0, minLat = 0, maxLng = 10, maxLat = -10] = bbox;\n\n const tileXY = mapService.lngLatToContainer([minLng, minLat]);\n const tileMaxXY = mapService.lngLatToContainer([maxLng, maxLat]);\n\n const tilePixelWidth = tileMaxXY.x - tileXY.x;\n const tilePixelHeight = tileXY.y - tileMaxXY.y;\n const pos = [\n (x - tileXY.x) / tilePixelWidth, // x\n (y - tileMaxXY.y) / tilePixelHeight, // y\n ];\n\n const tileWidth = tile?.data?.width || 1;\n const tileHeight = tile?.data?.height || 1;\n\n const indexX = Math.floor(pos[0] * tileWidth);\n const indexY = Math.floor(pos[1] * tileHeight);\n const index = Math.max(0, indexY - 1) * tileWidth + indexX;\n\n const data = tile?.data?.data[index];\n\n return data;\n}\n\nexport function readPixel(\n x: number,\n y: number,\n rendererService: IRendererService,\n) {\n const { readPixels, getContainer } = rendererService;\n const xInDevicePixel = x * DOM.DPR;\n const yInDevicePixel = y * DOM.DPR;\n let { width, height } = getContainerSize(\n getContainer() as HTMLCanvasElement | HTMLElement,\n );\n width *= DOM.DPR;\n height *= DOM.DPR;\n if (\n xInDevicePixel > width - 1 * DOM.DPR ||\n xInDevicePixel < 0 ||\n yInDevicePixel > height - 1 * DOM.DPR ||\n yInDevicePixel < 0\n ) {\n return false;\n }\n\n const pickedColors = readPixels({\n x: Math.floor(xInDevicePixel),\n // 视口坐标系原点在左上,而 WebGL 在左下,需要翻转 Y 轴\n y: Math.floor(height - (y + 1) * DOM.DPR),\n width: 1,\n height: 1,\n data: new Uint8Array(1 * 1 * 4),\n });\n return pickedColors;\n}\n"],"file":"utils.js"}
@@ -105,7 +105,6 @@ var BaseLayer = (_dec = (0, _l7Core.lazyInject)(_l7Core.TYPES.IGlobalConfigServi
105
105
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "rendering", void 0);
106
106
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "clusterZoom", 0);
107
107
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "layerType", void 0);
108
- (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "isLayerGroup", false);
109
108
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "triangulation", void 0);
110
109
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "dataState", {
111
110
  dataSourceNeedUpdate: false,
@@ -136,8 +135,10 @@ var BaseLayer = (_dec = (0, _l7Core.lazyInject)(_l7Core.TYPES.IGlobalConfigServi
136
135
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "layerModel", void 0);
137
136
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "shapeOption", void 0);
138
137
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "sceneContainer", void 0);
138
+ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "tileLayer", void 0);
139
139
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "layerChildren", []);
140
140
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "masks", []);
141
+ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "isVector", false);
141
142
  (0, _initializerDefineProperty2.default)((0, _assertThisInitialized2.default)(_this), "configService", _descriptor, (0, _assertThisInitialized2.default)(_this));
142
143
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "shaderModuleService", void 0);
143
144
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "cameraService", void 0);
@@ -203,6 +204,11 @@ var BaseLayer = (_dec = (0, _l7Core.lazyInject)(_l7Core.TYPES.IGlobalConfigServi
203
204
 
204
205
  maskLayer.destroy();
205
206
  }
207
+ }, {
208
+ key: "getAttribute",
209
+ value: function getAttribute(name) {
210
+ return this.styleAttributeService.getLayerStyleAttribute(name);
211
+ }
206
212
  }, {
207
213
  key: "getLayerConfig",
208
214
  value: function getLayerConfig() {
@@ -424,7 +430,11 @@ var BaseLayer = (_dec = (0, _l7Core.lazyInject)(_l7Core.TYPES.IGlobalConfigServi
424
430
  values: values
425
431
  };
426
432
  this.updateStyleAttribute('shape', field, values, updateOptions);
427
- (0, _updateShape.updateShape)(this, lastShape, currentShape);
433
+
434
+ if (!this.tileLayer) {
435
+ (0, _updateShape.updateShape)(this, lastShape, currentShape);
436
+ }
437
+
428
438
  return this;
429
439
  }
430
440
  }, {
@@ -535,6 +545,10 @@ var BaseLayer = (_dec = (0, _l7Core.lazyInject)(_l7Core.TYPES.IGlobalConfigServi
535
545
  this.scaleOptions[field] = cfg;
536
546
  }
537
547
 
548
+ if (this.tileLayer) {
549
+ this.tileLayer.scale(field, cfg);
550
+ }
551
+
538
552
  return this;
539
553
  }
540
554
  }, {
@@ -547,6 +561,11 @@ var BaseLayer = (_dec = (0, _l7Core.lazyInject)(_l7Core.TYPES.IGlobalConfigServi
547
561
  }, {
548
562
  key: "render",
549
563
  value: function render() {
564
+ if (this.tileLayer !== undefined) {
565
+ this.tileLayer.render();
566
+ return this;
567
+ }
568
+
550
569
  if (this.getEncodedData().length !== 0) {
551
570
  this.renderModels();
552
571
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/core/BaseLayer.ts"],"names":["layerIdCounter","BaseLayer","TYPES","IGlobalConfigService","config","dataSourceNeedUpdate","dataMappingNeedUpdate","filterNeedUpdate","featureScaleNeedUpdate","StyleAttrNeedUpdate","init","SyncBailHook","afterInit","beforeRender","beforeRenderData","SyncWaterfallHook","afterRender","SyncHook","beforePickingEncode","afterPickingEncode","beforeHighlight","afterHighlight","beforeSelect","afterSelect","beforeDestroy","afterDestroy","enable","dataState","getLayerConfig","autoFit","fitBoundsOptions","fitBounds","reRender","name","id","zIndex","rawConfig","maskLayer","masks","push","layerIndex","indexOf","splice","destroy","configService","configToUpdate","inited","needUpdateConfig","sceneId","container","get","SceneID","setLayerConfig","sceneContainer","color","bottomColor","plugin","plugins","layerType","iconService","IIconService","fontService","IFontService","rendererService","IRendererService","layerService","ILayerService","interactionService","IInteractionService","pickingService","IPickingService","mapService","IMapService","enableMultiPassRenderer","passes","length","on","renderLayers","cameraService","ICameraService","coordinateService","ICoordinateSystemService","shaderModuleService","IShaderModuleService","postProcessingPassFactory","IFactoryPostProcessingPass","normalPassFactory","IFactoryNormalPass","styleAttributeService","IStyleAttributeService","multiPassRenderer","IMultiPassRenderer","setLayer","pendingStyleAttributes","forEach","attributeName","attributeField","attributeValues","updateOptions","updateStyleAttribute","scale","field","splitValuesAndCallbackInAttribute","getAll","ILayerPlugin","apply","hooks","call","emit","target","type","data","attributes","elements","models","map","m","updateAttributesAndElements","console","warn","option","layerModel","createModelData","calEncodeData","calculateEncodeData","triangulation","createAttributesAndIndices","undefined","updateLayerConfig","getDefaultConfig","animateOption","startAnimate","aniamateStatus","values","lastShape","getLayerStyleAttribute","currentShape","shapeOption","options","rawAnimate","setSource","sourceOption","clusterZoom","layerSource","setData","currentSource","getSource","source","Source","sourceEvent","lastConfig","rest","pass","postProcessingPass","getPostProcessor","getPostProcessingPassByName","styleNeedUpdate","mask","clearModels","buildModels","cfg","scaleOptions","rendering","getEncodedData","renderModels","getRenderFlag","render","activeOption","enableHighlight","highlightColor","mix","activeMix","x","y","pick","pickedFeatureID","then","setTimeout","enableSelect","selectColor","selectMix","blend","layerModelNeedUpdate","visible","clearCanvas","index","updateLayerRenderList","currentPickId","selectedFeatureID","zoom","getZoom","minZoom","Infinity","maxZoom","enableMultiPass","currentPasses","setRenderFlag","getViewportSize","width","height","resize","extent","isValid","some","v","Math","abs","isDestroied","layerChildren","child","off","clearAllAttributes","cleanRemove","removeAllListeners","model","getLayerStyleAttributes","filter","attribute","needRescale","needRemapping","needRegenerateVertices","cluster","updateClusterData","encodedData","getLayerAttributeScale","invertExtent","items","range","item","value","ticks","domain","triggerHover","box","cb","boxPickLayer","moduleName","vertexShader","fragmentShader","segmentNumber","registerModule","vs","fs","getModule","uniforms","createModel","BlendTypes","BlendType","normal","createAttributes","clock","getDelta","animateStartTime","getElapsedTime","stopAnimate","isPick","eventNames","isVisible","Error","isPicking","renderUpdate","draw","getUninforms","getShaderPickStat","time","valuesOrCallback","defaultValues","callback","EventEmitter"],"mappings":"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","sourcesContent":["// @ts-ignore\nimport { SyncBailHook, SyncHook, SyncWaterfallHook } from '@antv/async-hook';\nimport {\n BlendType,\n gl,\n IActiveOption,\n IAnimateOption,\n IAttrubuteAndElements,\n ICameraService,\n ICoordinateSystemService,\n IDataState,\n IEncodeFeature,\n IFontService,\n IGlobalConfigService,\n IIconService,\n IInteractionService,\n ILayer,\n ILayerConfig,\n ILayerModel,\n ILayerModelInitializationOptions,\n ILayerPlugin,\n ILayerService,\n ILegendClassificaItem,\n ILegendSegmentItem,\n IMapService,\n IModel,\n IModelInitializationOptions,\n IMultiPassRenderer,\n IPass,\n IPickingService,\n IPostProcessingPass,\n IRendererService,\n IScale,\n IScaleOptions,\n IShaderModuleService,\n ISource,\n ISourceCFG,\n IStyleAttributeInitializationOptions,\n IStyleAttributeService,\n IStyleAttributeUpdateOptions,\n LayerEventType,\n lazyInject,\n LegendItems,\n ScaleAttributeType,\n ScaleTypeName,\n ScaleTypes,\n StyleAttributeField,\n StyleAttributeOption,\n Triangulation,\n TYPES,\n} from '@antv/l7-core';\nimport Source from '@antv/l7-source';\nimport { encodePickingColor } from '@antv/l7-utils';\nimport { EventEmitter } from 'eventemitter3';\nimport { Container } from 'inversify';\nimport { isFunction, isObject, isUndefined } from 'lodash';\nimport { BlendTypes } from '../utils/blend';\nimport { handleStyleDataMapping } from '../utils/dataMappingStyle';\nimport { calculateData } from '../utils/layerData';\nimport {\n createMultiPassRenderer,\n normalizePasses,\n} from '../utils/multiPassRender';\nimport { updateShape } from '../utils/updateShape';\n/**\n * 分配 layer id\n */\nlet layerIdCounter = 0;\n\nexport default class BaseLayer<ChildLayerStyleOptions = {}>\n extends EventEmitter<LayerEventType>\n implements ILayer {\n public id: string = `${layerIdCounter++}`;\n public name: string = `${layerIdCounter}`;\n public type: string;\n public visible: boolean = true;\n public zIndex: number = 0;\n public minZoom: number;\n public maxZoom: number;\n public inited: boolean = false;\n public layerModelNeedUpdate: boolean = false;\n public pickedFeatureID: number | null = null;\n public selectedFeatureID: number | null = null;\n public styleNeedUpdate: boolean = false;\n public rendering: boolean;\n public clusterZoom: number = 0; // 聚合等级标记\n public layerType?: string | undefined;\n public isLayerGroup: boolean = false;\n public triangulation?: Triangulation | undefined;\n\n public dataState: IDataState = {\n dataSourceNeedUpdate: false,\n dataMappingNeedUpdate: false,\n filterNeedUpdate: false,\n featureScaleNeedUpdate: false,\n StyleAttrNeedUpdate: false,\n };\n // 生命周期钩子\n public hooks = {\n init: new SyncBailHook(),\n afterInit: new SyncBailHook(),\n beforeRender: new SyncBailHook(),\n beforeRenderData: new SyncWaterfallHook(),\n afterRender: new SyncHook(),\n beforePickingEncode: new SyncHook(),\n afterPickingEncode: new SyncHook(),\n beforeHighlight: new SyncHook(['pickedColor']),\n afterHighlight: new SyncHook(),\n beforeSelect: new SyncHook(['pickedColor']),\n afterSelect: new SyncHook(),\n beforeDestroy: new SyncHook(),\n afterDestroy: new SyncHook(),\n };\n\n // 待渲染 model 列表\n public models: IModel[] = [];\n\n // 每个 Layer 都有一个\n public multiPassRenderer: IMultiPassRenderer;\n\n // 注入插件集\n public plugins: ILayerPlugin[];\n\n public sourceOption: {\n data: any;\n options?: ISourceCFG;\n };\n\n public layerModel: ILayerModel;\n\n public shapeOption: {\n field: any;\n values: any;\n };\n\n // TODO: 记录 sceneContainer 供创建子图层的时候使用 如 imageTileLayer\n public sceneContainer: Container | undefined;\n // TODO: 用于保存子图层对象\n public layerChildren: ILayer[] = [];\n public masks: ILayer[] = [];\n\n @lazyInject(TYPES.IGlobalConfigService)\n protected readonly configService: IGlobalConfigService;\n\n // @lazyInject(TYPES.IShaderModuleService)\n // protected readonly shaderModuleService: IShaderModuleService;\n\n protected shaderModuleService: IShaderModuleService;\n protected cameraService: ICameraService;\n\n protected coordinateService: ICoordinateSystemService;\n\n protected iconService: IIconService;\n\n protected fontService: IFontService;\n\n protected pickingService: IPickingService;\n\n protected rendererService: IRendererService;\n\n protected layerService: ILayerService;\n\n protected interactionService: IInteractionService;\n\n protected mapService: IMapService;\n\n protected styleAttributeService: IStyleAttributeService;\n\n protected layerSource: Source;\n\n protected postProcessingPassFactory: (\n name: string,\n ) => IPostProcessingPass<unknown>;\n protected normalPassFactory: (name: string) => IPass<unknown>;\n\n protected animateOptions: IAnimateOption = { enable: false };\n\n /**\n * 图层容器\n */\n private container: Container;\n\n private encodedData: IEncodeFeature[];\n\n private configSchema: object;\n\n private currentPickId: number | null = null;\n\n private rawConfig: Partial<ILayerConfig & ChildLayerStyleOptions>;\n\n private needUpdateConfig: Partial<ILayerConfig & ChildLayerStyleOptions>;\n\n /**\n * 待更新样式属性,在初始化阶段完成注册\n */\n private pendingStyleAttributes: Array<{\n attributeName: string;\n attributeField: StyleAttributeField;\n attributeValues?: StyleAttributeOption;\n defaultName?: string;\n updateOptions?: Partial<IStyleAttributeUpdateOptions>;\n }> = [];\n\n private scaleOptions: IScaleOptions = {};\n\n private animateStartTime: number;\n\n private aniamateStatus: boolean = false;\n\n // TODO: layer 保底颜色\n private bottomColor = 'rgba(0, 0, 0, 0)';\n\n private isDestroied: boolean = false;\n\n // private pickingPassRender: IPass<'pixelPicking'>;\n\n constructor(config: Partial<ILayerConfig & ChildLayerStyleOptions> = {}) {\n super();\n this.name = config.name || this.id;\n this.zIndex = config.zIndex || 0;\n this.rawConfig = config;\n }\n\n public addMaskLayer(maskLayer: ILayer) {\n this.masks.push(maskLayer);\n }\n\n public removeMaskLayer(maskLayer: ILayer) {\n const layerIndex = this.masks.indexOf(maskLayer);\n if (layerIndex > -1) {\n this.masks.splice(layerIndex, 1);\n }\n maskLayer.destroy();\n }\n\n public getLayerConfig() {\n return this.configService.getLayerConfig<ChildLayerStyleOptions>(this.id);\n }\n\n public updateLayerConfig(\n configToUpdate: Partial<ILayerConfig | ChildLayerStyleOptions>,\n ) {\n if (!this.inited) {\n this.needUpdateConfig = {\n ...this.needUpdateConfig,\n ...configToUpdate,\n };\n } else {\n const sceneId = this.container.get<string>(TYPES.SceneID);\n\n // @ts-ignore\n handleStyleDataMapping(configToUpdate, this); // 处理 style 中进行数据映射的属性字段\n\n this.configService.setLayerConfig(sceneId, this.id, {\n ...this.configService.getLayerConfig(this.id),\n ...this.needUpdateConfig,\n ...configToUpdate,\n });\n this.needUpdateConfig = {};\n }\n }\n\n /**\n * 注入图层容器,父容器为场景容器\n * RootContainer 1\n * -> SceneContainer 1.*\n * -> LayerContainer 1.*\n */\n public setContainer(container: Container, sceneContainer: Container) {\n this.container = container;\n this.sceneContainer = sceneContainer;\n }\n\n public getContainer() {\n return this.container;\n }\n\n public setBottomColor(color: string) {\n this.bottomColor = color;\n }\n\n public getBottomColor() {\n return this.bottomColor;\n }\n\n public addPlugin(plugin: ILayerPlugin): ILayer {\n // TODO: 控制插件注册顺序\n // @example:\n // pointLayer.addPlugin(new MyCustomPlugin(), {\n // before: 'L7BuiltinPlugin'\n // });\n this.plugins.push(plugin);\n return this;\n }\n\n public init() {\n // 设置配置项\n const sceneId = this.container.get<string>(TYPES.SceneID);\n // 初始化图层配置项\n // const { enableMultiPassRenderer = false } = this.rawConfig;\n // this.configService.setLayerConfig(sceneId, this.id, {\n // enableMultiPassRenderer,\n // });\n this.configService.setLayerConfig(sceneId, this.id, this.rawConfig);\n this.layerType = this.rawConfig.layerType;\n\n // 全局容器服务\n\n // 场景容器服务\n this.iconService = this.container.get<IIconService>(TYPES.IIconService);\n this.fontService = this.container.get<IFontService>(TYPES.IFontService);\n\n this.rendererService = this.container.get<IRendererService>(\n TYPES.IRendererService,\n );\n this.layerService = this.container.get<ILayerService>(TYPES.ILayerService);\n this.interactionService = this.container.get<IInteractionService>(\n TYPES.IInteractionService,\n );\n\n this.pickingService = this.container.get<IPickingService>(\n TYPES.IPickingService,\n );\n this.mapService = this.container.get<IMapService>(TYPES.IMapService);\n const { enableMultiPassRenderer, passes } = this.getLayerConfig();\n if (enableMultiPassRenderer && passes?.length && passes.length > 0) {\n // Tip: 兼容 multiPassRender 在 amap1 时存在的图层不同步问题 zoom\n this.mapService.on('mapAfterFrameChange', () => {\n this.renderLayers();\n });\n }\n\n this.cameraService = this.container.get<ICameraService>(\n TYPES.ICameraService,\n );\n this.coordinateService = this.container.get<ICoordinateSystemService>(\n TYPES.ICoordinateSystemService,\n );\n this.shaderModuleService = this.container.get<IShaderModuleService>(\n TYPES.IShaderModuleService,\n );\n this.postProcessingPassFactory = this.container.get(\n TYPES.IFactoryPostProcessingPass,\n );\n this.normalPassFactory = this.container.get(TYPES.IFactoryNormalPass);\n\n // 图层容器服务\n this.styleAttributeService = this.container.get<IStyleAttributeService>(\n TYPES.IStyleAttributeService,\n );\n this.multiPassRenderer = this.container.get<IMultiPassRenderer>(\n TYPES.IMultiPassRenderer,\n );\n this.multiPassRenderer.setLayer(this);\n\n // 完成样式服务注册完成前添加的属性\n this.pendingStyleAttributes.forEach(\n ({ attributeName, attributeField, attributeValues, updateOptions }) => {\n this.styleAttributeService.updateStyleAttribute(\n attributeName,\n {\n // @ts-ignore\n scale: {\n field: attributeField,\n ...this.splitValuesAndCallbackInAttribute(\n // @ts-ignore\n attributeValues,\n // @ts-ignore\n this.getLayerConfig()[attributeName],\n ),\n },\n },\n // @ts-ignore\n updateOptions,\n );\n },\n );\n this.pendingStyleAttributes = [];\n\n // 获取插件集\n this.plugins = this.container.getAll<ILayerPlugin>(TYPES.ILayerPlugin);\n // 完成插件注册,传入场景和图层容器内的服务\n for (const plugin of this.plugins) {\n plugin.apply(this, {\n rendererService: this.rendererService,\n mapService: this.mapService,\n styleAttributeService: this.styleAttributeService,\n normalPassFactory: this.normalPassFactory,\n postProcessingPassFactory: this.postProcessingPassFactory,\n });\n }\n\n // 触发 init 生命周期插件\n this.hooks.init.call();\n // this.pickingPassRender = this.normalPassFactory('pixelPicking');\n // this.pickingPassRender.init(this);\n this.hooks.afterInit.call();\n\n // 触发初始化完成事件;\n this.emit('inited', {\n target: this,\n type: 'inited',\n });\n this.emit('add', {\n target: this,\n type: 'add',\n });\n\n return this;\n }\n\n public updateModelData(data: IAttrubuteAndElements) {\n if (data.attributes && data.elements) {\n this.models.map((m) => {\n m.updateAttributesAndElements(data.attributes, data.elements);\n });\n } else {\n console.warn('data error');\n }\n }\n\n public createModelData(data: any, option?: ISourceCFG) {\n if (this.layerModel.createModelData) {\n // 在某些特殊图层中单独构建 attribute & elements\n return this.layerModel.createModelData(option);\n }\n const calEncodeData = this.calculateEncodeData(data, option);\n const triangulation = this.triangulation;\n\n if (calEncodeData && triangulation) {\n return this.styleAttributeService.createAttributesAndIndices(\n calEncodeData,\n triangulation,\n );\n } else {\n return {\n attributes: undefined,\n elements: undefined,\n };\n }\n }\n\n public calculateEncodeData(data: any, option?: ISourceCFG) {\n if (this.inited) {\n return calculateData(\n this,\n this.fontService,\n this.mapService,\n this.styleAttributeService,\n data,\n option,\n );\n } else {\n console.warn('layer not inited!');\n return null;\n }\n }\n /**\n * Model初始化前需要更新Model样式\n */\n public prepareBuildModel() {\n this.inited = true;\n this.updateLayerConfig({\n ...(this.getDefaultConfig() as object),\n ...this.rawConfig,\n });\n\n // 启动动画\n const { animateOption } = this.getLayerConfig();\n if (animateOption?.enable) {\n this.layerService.startAnimate();\n this.aniamateStatus = true;\n }\n }\n public color(\n field: StyleAttributeField,\n values?: StyleAttributeOption,\n updateOptions?: Partial<IStyleAttributeUpdateOptions>,\n ) {\n // 设置 color、size、shape、style 时由于场景服务尚未完成(并没有调用 scene.addLayer),因此暂时加入待更新属性列表\n this.updateStyleAttribute('color', field, values, updateOptions);\n\n // this.pendingStyleAttributes.push({\n // attributeName: 'color',\n // attributeField: field,\n // attributeValues: values,\n // defaultName: 'colors',\n // updateOptions,\n // });\n return this;\n }\n\n // 为对应的图层传入纹理的编号名称(point/image 在 shape 方法中传入纹理名称的方法并不通用)\n public texture(\n field: StyleAttributeField,\n values?: StyleAttributeOption,\n updateOptions?: Partial<IStyleAttributeUpdateOptions>,\n ) {\n this.updateStyleAttribute('texture', field, values, updateOptions);\n return this;\n }\n\n public rotate(\n field: StyleAttributeField,\n values?: StyleAttributeOption,\n updateOptions?: Partial<IStyleAttributeUpdateOptions>,\n ) {\n this.updateStyleAttribute('rotate', field, values, updateOptions);\n return this;\n }\n public size(\n field: StyleAttributeField,\n values?: StyleAttributeOption,\n updateOptions?: Partial<IStyleAttributeUpdateOptions>,\n ) {\n this.updateStyleAttribute('size', field, values, updateOptions);\n return this;\n }\n // 对mapping后的数据过滤,scale保持不变\n public filter(\n field: StyleAttributeField,\n values?: StyleAttributeOption,\n updateOptions?: Partial<IStyleAttributeUpdateOptions>,\n ) {\n this.updateStyleAttribute('filter', field, values, updateOptions);\n return this;\n }\n\n public shape(\n field: StyleAttributeField,\n values?: StyleAttributeOption,\n updateOptions?: Partial<IStyleAttributeUpdateOptions>,\n ) {\n const lastShape = this.styleAttributeService?.getLayerStyleAttribute(\n 'shape',\n )?.scale?.field;\n const currentShape = field;\n this.shapeOption = {\n field,\n values,\n };\n this.updateStyleAttribute('shape', field, values, updateOptions);\n // TODO: 根据 shape 判断是否需要更新 model\n updateShape(this, lastShape, currentShape);\n return this;\n }\n public label(\n field: StyleAttributeField,\n values?: StyleAttributeOption,\n updateOptions?: Partial<IStyleAttributeUpdateOptions>,\n ) {\n this.pendingStyleAttributes.push({\n attributeName: 'label',\n attributeField: field,\n attributeValues: values,\n updateOptions,\n });\n return this;\n }\n public animate(options: IAnimateOption | boolean) {\n let rawAnimate: Partial<IAnimateOption> = {};\n if (isObject(options)) {\n rawAnimate.enable = true;\n rawAnimate = {\n ...rawAnimate,\n ...options,\n };\n } else {\n rawAnimate.enable = options;\n }\n this.updateLayerConfig({\n animateOption: rawAnimate,\n });\n // this.animateOptions = options;\n return this;\n }\n\n public source(data: any, options?: ISourceCFG): ILayer {\n if (data?.data) {\n // 判断是否为source\n this.setSource(data);\n return this;\n }\n this.sourceOption = {\n data,\n options,\n };\n this.clusterZoom = 0;\n return this;\n }\n\n public setData(data: any, options?: ISourceCFG) {\n if (this.inited) {\n this.layerSource.setData(data, options);\n } else {\n this.on('inited', () => {\n const currentSource = this.getSource();\n if (!currentSource) {\n // 执行 setData 的时候 source 还不存在(还未执行 addLayer)\n this.source(new Source(data, options));\n this.sourceEvent();\n } else {\n this.layerSource.setData(data, options);\n }\n // this.layerSource.setData(data, options);\n });\n }\n\n return this;\n }\n public style(\n options: Partial<ChildLayerStyleOptions> & Partial<ILayerConfig>,\n ): ILayer {\n const lastConfig = this.getLayerConfig();\n const { passes, ...rest } = options;\n\n // passes 特殊处理\n if (passes) {\n normalizePasses(passes).forEach(\n (pass: [string, { [key: string]: unknown }]) => {\n const postProcessingPass = this.multiPassRenderer\n .getPostProcessor()\n .getPostProcessingPassByName(pass[0]);\n if (postProcessingPass) {\n postProcessingPass.updateOptions(pass[1]);\n }\n },\n );\n }\n\n this.rawConfig = {\n ...this.rawConfig,\n ...rest,\n };\n if (this.container) {\n this.updateLayerConfig(this.rawConfig);\n this.styleNeedUpdate = true;\n }\n\n // @ts-ignore\n if (lastConfig && lastConfig.mask === true && options.mask === false) {\n this.clearModels();\n this.models = this.layerModel.buildModels();\n }\n return this;\n }\n public scale(field: string | number | IScaleOptions, cfg?: IScale) {\n if (isObject(field)) {\n this.scaleOptions = {\n ...this.scaleOptions,\n ...field,\n };\n } else {\n this.scaleOptions[field] = cfg;\n }\n return this;\n }\n\n /**\n * 渲染所有的图层\n */\n public renderLayers(): void {\n this.rendering = true;\n\n this.layerService.renderLayers();\n\n this.rendering = false;\n }\n\n public render(): ILayer {\n // TODO: this.getEncodedData().length !== 0 这个判断是为了解决在 2.5.x 引入数据纹理后产生的 空数据渲染导致 texture 超出上限问题\n if (this.getEncodedData().length !== 0) {\n this.renderModels();\n }\n return this;\n }\n\n /**\n * renderMultiPass 专门用于渲染支持 multipass 的 layer\n */\n public async renderMultiPass() {\n if (this.getEncodedData().length !== 0) {\n if (this.multiPassRenderer && this.multiPassRenderer.getRenderFlag()) {\n // multi render 开始执行 multiPassRender 的渲染流程\n await this.multiPassRenderer.render();\n } else if (this.multiPassRenderer) {\n // renderPass 触发的渲染\n this.renderModels();\n } else {\n this.renderModels();\n }\n }\n }\n\n public active(options: IActiveOption | boolean) {\n const activeOption: Partial<ILayerConfig> = {};\n activeOption.enableHighlight = isObject(options) ? true : options;\n if (isObject(options)) {\n activeOption.enableHighlight = true;\n if (options.color) {\n activeOption.highlightColor = options.color;\n }\n if (options.mix) {\n activeOption.activeMix = options.mix;\n }\n } else {\n activeOption.enableHighlight = !!options;\n }\n this.updateLayerConfig(activeOption);\n return this;\n }\n public setActive(\n id: number | { x: number; y: number },\n options?: IActiveOption,\n ): void {\n if (isObject(id)) {\n const { x = 0, y = 0 } = id;\n this.updateLayerConfig({\n highlightColor: isObject(options)\n ? options.color\n : this.getLayerConfig().highlightColor,\n activeMix: isObject(options)\n ? options.mix\n : this.getLayerConfig().activeMix,\n });\n this.pick({ x, y });\n } else {\n this.updateLayerConfig({\n pickedFeatureID: id,\n highlightColor: isObject(options)\n ? options.color\n : this.getLayerConfig().highlightColor,\n activeMix: isObject(options)\n ? options.mix\n : this.getLayerConfig().activeMix,\n });\n this.hooks.beforeSelect\n .call(encodePickingColor(id as number) as number[])\n // @ts-ignore\n .then(() => {\n setTimeout(() => {\n this.reRender();\n }, 1);\n });\n }\n }\n\n public select(option: IActiveOption | boolean): ILayer {\n const activeOption: Partial<ILayerConfig> = {};\n activeOption.enableSelect = isObject(option) ? true : option;\n if (isObject(option)) {\n activeOption.enableSelect = true;\n if (option.color) {\n activeOption.selectColor = option.color;\n }\n if (option.mix) {\n activeOption.selectMix = option.mix;\n }\n } else {\n activeOption.enableSelect = !!option;\n }\n this.updateLayerConfig(activeOption);\n return this;\n }\n\n public setSelect(\n id: number | { x: number; y: number },\n options?: IActiveOption,\n ): void {\n if (isObject(id)) {\n const { x = 0, y = 0 } = id;\n this.updateLayerConfig({\n selectColor: isObject(options)\n ? options.color\n : this.getLayerConfig().selectColor,\n selectMix: isObject(options)\n ? options.mix\n : this.getLayerConfig().selectMix,\n });\n this.pick({ x, y });\n } else {\n this.updateLayerConfig({\n pickedFeatureID: id,\n selectColor: isObject(options)\n ? options.color\n : this.getLayerConfig().selectColor,\n selectMix: isObject(options)\n ? options.mix\n : this.getLayerConfig().selectMix,\n });\n this.hooks.beforeSelect\n .call(encodePickingColor(id as number) as number[])\n // @ts-ignore\n .then(() => {\n setTimeout(() => {\n this.reRender();\n }, 1);\n });\n }\n }\n public setBlend(type: keyof typeof BlendType): ILayer {\n this.updateLayerConfig({\n blend: type,\n });\n this.layerModelNeedUpdate = true;\n this.reRender();\n return this;\n }\n public show(): ILayer {\n this.updateLayerConfig({\n visible: true,\n });\n this.reRender();\n return this;\n }\n\n public hide(): ILayer {\n if (this.type === 'CanvasLayer' && this.layerModel.clearCanvas) {\n // 对 canvasLayer 的 hide 操作做特殊处理\n this.layerModel.clearCanvas();\n }\n this.updateLayerConfig({\n visible: false,\n });\n this.reRender();\n return this;\n }\n public setIndex(index: number): ILayer {\n this.zIndex = index;\n this.layerService.updateLayerRenderList();\n this.layerService.renderLayers();\n return this;\n }\n\n public setCurrentPickId(id: number) {\n this.currentPickId = id;\n }\n\n public getCurrentPickId(): number | null {\n return this.currentPickId;\n }\n\n public setCurrentSelectedId(id: number) {\n this.selectedFeatureID = id;\n }\n\n public getCurrentSelectedId(): number | null {\n return this.selectedFeatureID;\n }\n public isVisible(): boolean {\n const zoom = this.mapService.getZoom();\n const {\n visible,\n minZoom = -Infinity,\n maxZoom = Infinity,\n } = this.getLayerConfig();\n return !!visible && zoom >= minZoom && zoom <= maxZoom;\n }\n\n public setMultiPass(\n enableMultiPass: boolean,\n currentPasses?: Array<string | [string, { [key: string]: unknown }]>,\n ) {\n this.updateLayerConfig({\n enableMultiPassRenderer: enableMultiPass,\n });\n if (currentPasses) {\n this.updateLayerConfig({\n passes: currentPasses,\n });\n }\n\n if (enableMultiPass) {\n const { passes = [] } = this.getLayerConfig();\n this.multiPassRenderer = createMultiPassRenderer(\n this,\n passes,\n this.postProcessingPassFactory,\n this.normalPassFactory,\n );\n this.multiPassRenderer.setRenderFlag(true);\n const { width, height } = this.rendererService.getViewportSize();\n this.multiPassRenderer.resize(width, height);\n }\n\n return this;\n }\n\n public setMinZoom(minZoom: number): ILayer {\n this.updateLayerConfig({\n minZoom,\n });\n return this;\n }\n\n public getMinZoom(): number {\n const { minZoom } = this.getLayerConfig();\n return minZoom as number;\n }\n\n public getMaxZoom(): number {\n const { maxZoom } = this.getLayerConfig();\n return maxZoom as number;\n }\n\n public get(name: string) {\n const cfg = this.getLayerConfig();\n // @ts-ignore\n return cfg[name];\n }\n\n public setMaxZoom(maxZoom: number): ILayer {\n this.updateLayerConfig({\n maxZoom,\n });\n return this;\n }\n\n public setAutoFit(autoFit: boolean): ILayer {\n this.updateLayerConfig({\n autoFit,\n });\n return this;\n }\n\n /**\n * zoom to layer Bounds\n */\n public fitBounds(fitBoundsOptions?: unknown): ILayer {\n if (!this.inited) {\n this.updateLayerConfig({\n autoFit: true,\n });\n return this;\n }\n const source = this.getSource();\n const extent = source.extent;\n const isValid = extent.some((v) => Math.abs(v) === Infinity);\n if (isValid) {\n return this;\n }\n this.mapService.fitBounds(\n [\n [extent[0], extent[1]],\n [extent[2], extent[3]],\n ],\n fitBoundsOptions,\n );\n return this;\n }\n\n public destroy() {\n if (this.isDestroied) {\n return;\n }\n\n // remove child layer\n this.layerChildren.map((child: ILayer) => child.destroy());\n this.layerChildren = [];\n\n // remove mask list\n this.masks.map((mask: ILayer) => mask.destroy());\n this.masks = [];\n\n this.hooks.beforeDestroy.call();\n // 清除sources事件\n this.layerSource.off('update', this.sourceEvent);\n\n this.multiPassRenderer.destroy();\n // console.log(this.styleAttributeService.getAttributes())\n // 清除所有属性以及关联的 vao == 销毁所有 => model this.models.forEach((model) => model.destroy());\n this.styleAttributeService.clearAllAttributes();\n\n // 执行每个图层单独的 clearModels 方法 (清除一些额外的 texture、program、buffer 等)\n\n this.hooks.afterDestroy.call();\n\n // TODO: 清除各个图层自定义的 models 资源\n this.layerModel?.clearModels();\n\n this.models = [];\n\n this.layerService.cleanRemove(this);\n\n this.emit('remove', {\n target: this,\n type: 'remove',\n });\n\n this.emit('destroy', {\n target: this,\n type: 'destroy',\n });\n\n this.removeAllListeners();\n // 解绑图层容器中的服务\n // this.container.unbind(TYPES.IStyleAttributeService);\n\n this.isDestroied = true;\n }\n public clear() {\n this.styleAttributeService.clearAllAttributes();\n // 销毁所有 model\n }\n public clearModels() {\n this.models.forEach((model) => model.destroy());\n this.layerModel.clearModels();\n this.models = [];\n }\n\n public isDirty() {\n return !!(\n this.styleAttributeService.getLayerStyleAttributes() || []\n ).filter(\n (attribute) =>\n attribute.needRescale ||\n attribute.needRemapping ||\n attribute.needRegenerateVertices,\n ).length;\n }\n\n public setSource(source: Source) {\n // 清除旧 sources 事件\n if (this.layerSource) {\n this.layerSource.off('update', this.sourceEvent);\n }\n\n this.layerSource = source;\n this.clusterZoom = 0;\n\n // 已 inited 且启用聚合进行更新聚合数据\n if (this.inited && this.layerSource.cluster) {\n const zoom = this.mapService.getZoom();\n this.layerSource.updateClusterData(zoom);\n }\n // source 可能会复用,会在其它layer被修改\n this.layerSource.on('update', this.sourceEvent);\n }\n public getSource() {\n return this.layerSource;\n }\n\n public getScaleOptions() {\n return this.scaleOptions;\n }\n\n public setEncodedData(encodedData: IEncodeFeature[]) {\n this.encodedData = encodedData;\n }\n public getEncodedData() {\n return this.encodedData;\n }\n\n public getScale(name: string): any {\n return this.styleAttributeService.getLayerAttributeScale(name);\n }\n\n public getLegendItems(name: string): LegendItems {\n const scale = this.styleAttributeService.getLayerAttributeScale(name);\n\n // 函数自定义映射,没有 scale 返回为空数组\n if (!scale) {\n return [];\n }\n\n if (scale.invertExtent) {\n // 分段类型 Quantize、Quantile、Threshold\n const items: ILegendSegmentItem[] = scale.range().map((item: number) => {\n return {\n value: scale.invertExtent(item),\n [name]: item,\n };\n });\n\n return items;\n } else if (scale.ticks) {\n // 连续类型 Continuous (Linear, Power, Log, Identity, Time)\n const items: ILegendClassificaItem[] = scale\n .ticks()\n .map((item: string) => {\n return {\n value: item,\n [name]: scale(item),\n };\n });\n\n return items;\n } else if (scale?.domain) {\n // 枚举类型 Cat\n const items: ILegendClassificaItem[] = scale\n .domain()\n .filter((item: string | number | undefined) => !isUndefined(item))\n .map((item: string | number) => {\n return {\n value: item,\n [name]: scale(item) as string,\n };\n });\n\n return items;\n }\n\n return [];\n }\n\n public pick({ x, y }: { x: number; y: number }) {\n this.interactionService.triggerHover({ x, y });\n }\n\n public boxSelect(\n box: [number, number, number, number],\n cb: (...args: any[]) => void,\n ) {\n this.pickingService.boxPickLayer(this, box, cb);\n }\n\n public buildLayerModel(\n options: ILayerModelInitializationOptions &\n Partial<IModelInitializationOptions>,\n ): IModel {\n const {\n moduleName,\n vertexShader,\n fragmentShader,\n triangulation,\n segmentNumber,\n ...rest\n } = options;\n this.shaderModuleService.registerModule(moduleName, {\n vs: vertexShader,\n fs: fragmentShader,\n });\n const { vs, fs, uniforms } = this.shaderModuleService.getModule(moduleName);\n const { createModel } = this.rendererService;\n const {\n attributes,\n elements,\n } = this.styleAttributeService.createAttributesAndIndices(\n this.encodedData,\n triangulation,\n segmentNumber,\n );\n return createModel({\n attributes,\n uniforms,\n fs,\n vs,\n elements,\n blend: BlendTypes[BlendType.normal],\n ...rest,\n });\n }\n\n public createAttrubutes(\n options: ILayerModelInitializationOptions &\n Partial<IModelInitializationOptions>,\n ) {\n const { triangulation } = options;\n // @ts-ignore\n const { attributes } = this.styleAttributeService.createAttributes(\n this.encodedData,\n triangulation,\n );\n return attributes;\n }\n\n public getTime() {\n return this.layerService.clock.getDelta();\n }\n public setAnimateStartTime() {\n this.animateStartTime = this.layerService.clock.getElapsedTime();\n }\n public stopAnimate() {\n if (this.aniamateStatus) {\n this.layerService.stopAnimate();\n this.aniamateStatus = false;\n this.updateLayerConfig({\n animateOption: {\n enable: false,\n },\n });\n }\n }\n public getLayerAnimateTime(): number {\n return this.layerService.clock.getElapsedTime() - this.animateStartTime;\n }\n\n public needPick(type: string): boolean {\n const {\n enableHighlight = true,\n enableSelect = true,\n } = this.getLayerConfig();\n // 判断layer是否监听事件;\n let isPick =\n this.eventNames().indexOf(type) !== -1 ||\n this.eventNames().indexOf('un' + type) !== -1;\n if ((type === 'click' || type === 'dblclick') && enableSelect) {\n isPick = true;\n }\n if (\n type === 'mousemove' &&\n (enableHighlight ||\n this.eventNames().indexOf('mouseenter') !== -1 ||\n this.eventNames().indexOf('unmousemove') !== -1 ||\n this.eventNames().indexOf('mouseout') !== -1)\n ) {\n isPick = true;\n }\n return this.isVisible() && isPick;\n }\n\n public buildModels() {\n throw new Error('Method not implemented.');\n }\n public rebuildModels() {\n throw new Error('Method not implemented.');\n }\n\n public async renderMulPass(multiPassRenderer: IMultiPassRenderer) {\n await multiPassRenderer.render();\n }\n\n public renderModels(isPicking?: boolean) {\n // TODO: this.getEncodedData().length > 0 这个判断是为了解决在 2.5.x 引入数据纹理后产生的 空数据渲染导致 texture 超出上限问题\n if (this.getEncodedData().length > 0) {\n if (this.layerModelNeedUpdate && this.layerModel) {\n this.models = this.layerModel.buildModels();\n this.hooks.beforeRender.call();\n this.layerModelNeedUpdate = false;\n }\n if (this.layerModel.renderUpdate) {\n this.layerModel.renderUpdate();\n }\n this.models.forEach((model) => {\n model.draw(\n {\n uniforms: this.layerModel.getUninforms(),\n },\n isPicking,\n );\n });\n }\n return this;\n }\n\n public updateStyleAttribute(\n type: string,\n field: StyleAttributeField,\n values?: StyleAttributeOption,\n updateOptions?: Partial<IStyleAttributeUpdateOptions>,\n ) {\n if (!this.inited) {\n this.pendingStyleAttributes.push({\n attributeName: type,\n attributeField: field,\n attributeValues: values,\n updateOptions,\n });\n } else {\n this.styleAttributeService.updateStyleAttribute(\n type,\n {\n // @ts-ignore\n scale: {\n field,\n ...this.splitValuesAndCallbackInAttribute(\n // @ts-ignore\n values,\n // @ts-ignore\n this.getLayerConfig()[field],\n ),\n },\n },\n // @ts-ignore\n updateOptions,\n );\n }\n }\n\n public getShaderPickStat() {\n return this.layerService.getShaderPickStat();\n }\n\n /**\n * 继承空方法\n * @param time\n */\n public setEarthTime(time: number) {\n console.warn('empty fn');\n }\n\n protected getConfigSchema() {\n throw new Error('Method not implemented.');\n }\n\n protected getModelType(): unknown {\n throw new Error('Method not implemented.');\n }\n protected getDefaultConfig() {\n return {};\n }\n\n private sourceEvent = () => {\n this.dataState.dataSourceNeedUpdate = true;\n const { autoFit, fitBoundsOptions } = this.getLayerConfig();\n if (autoFit) {\n this.fitBounds(fitBoundsOptions);\n }\n // 对外暴露事件 迁移到 DataMappingPlugin generateMapping,保证在重新重新映射后触发\n // this.emit('dataUpdate');\n this.reRender();\n };\n\n private reRender() {\n if (this.inited) {\n this.layerService.updateLayerRenderList();\n this.layerService.renderLayers();\n }\n }\n private splitValuesAndCallbackInAttribute(\n valuesOrCallback?: unknown[],\n defaultValues?: unknown[],\n ) {\n return {\n values: isFunction(valuesOrCallback)\n ? undefined\n : valuesOrCallback || defaultValues,\n callback: isFunction(valuesOrCallback) ? valuesOrCallback : undefined,\n };\n }\n}\n"],"file":"BaseLayer.js"}
1
+ {"version":3,"sources":["../../src/core/BaseLayer.ts"],"names":["layerIdCounter","BaseLayer","TYPES","IGlobalConfigService","config","dataSourceNeedUpdate","dataMappingNeedUpdate","filterNeedUpdate","featureScaleNeedUpdate","StyleAttrNeedUpdate","init","SyncBailHook","afterInit","beforeRender","beforeRenderData","SyncWaterfallHook","afterRender","SyncHook","beforePickingEncode","afterPickingEncode","beforeHighlight","afterHighlight","beforeSelect","afterSelect","beforeDestroy","afterDestroy","enable","dataState","getLayerConfig","autoFit","fitBoundsOptions","fitBounds","reRender","name","id","zIndex","rawConfig","maskLayer","masks","push","layerIndex","indexOf","splice","destroy","styleAttributeService","getLayerStyleAttribute","configService","configToUpdate","inited","needUpdateConfig","sceneId","container","get","SceneID","setLayerConfig","sceneContainer","color","bottomColor","plugin","plugins","layerType","iconService","IIconService","fontService","IFontService","rendererService","IRendererService","layerService","ILayerService","interactionService","IInteractionService","pickingService","IPickingService","mapService","IMapService","enableMultiPassRenderer","passes","length","on","renderLayers","cameraService","ICameraService","coordinateService","ICoordinateSystemService","shaderModuleService","IShaderModuleService","postProcessingPassFactory","IFactoryPostProcessingPass","normalPassFactory","IFactoryNormalPass","IStyleAttributeService","multiPassRenderer","IMultiPassRenderer","setLayer","pendingStyleAttributes","forEach","attributeName","attributeField","attributeValues","updateOptions","updateStyleAttribute","scale","field","splitValuesAndCallbackInAttribute","getAll","ILayerPlugin","apply","hooks","call","emit","target","type","data","attributes","elements","models","map","m","updateAttributesAndElements","console","warn","option","layerModel","createModelData","calEncodeData","calculateEncodeData","triangulation","createAttributesAndIndices","undefined","updateLayerConfig","getDefaultConfig","animateOption","startAnimate","aniamateStatus","values","lastShape","currentShape","shapeOption","tileLayer","options","rawAnimate","setSource","sourceOption","clusterZoom","layerSource","setData","currentSource","getSource","source","Source","sourceEvent","lastConfig","rest","pass","postProcessingPass","getPostProcessor","getPostProcessingPassByName","styleNeedUpdate","mask","clearModels","buildModels","cfg","scaleOptions","rendering","render","getEncodedData","renderModels","getRenderFlag","activeOption","enableHighlight","highlightColor","mix","activeMix","x","y","pick","pickedFeatureID","then","setTimeout","enableSelect","selectColor","selectMix","blend","layerModelNeedUpdate","visible","clearCanvas","index","updateLayerRenderList","currentPickId","selectedFeatureID","zoom","getZoom","minZoom","Infinity","maxZoom","enableMultiPass","currentPasses","setRenderFlag","getViewportSize","width","height","resize","extent","isValid","some","v","Math","abs","isDestroied","layerChildren","child","off","clearAllAttributes","cleanRemove","removeAllListeners","model","getLayerStyleAttributes","filter","attribute","needRescale","needRemapping","needRegenerateVertices","cluster","updateClusterData","encodedData","getLayerAttributeScale","invertExtent","items","range","item","value","ticks","domain","triggerHover","box","cb","boxPickLayer","moduleName","vertexShader","fragmentShader","segmentNumber","registerModule","vs","fs","getModule","uniforms","createModel","BlendTypes","BlendType","normal","createAttributes","clock","getDelta","animateStartTime","getElapsedTime","stopAnimate","isPick","eventNames","isVisible","Error","isPicking","renderUpdate","draw","getUninforms","getShaderPickStat","time","valuesOrCallback","defaultValues","callback","EventEmitter"],"mappings":"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","sourcesContent":["// @ts-ignore\nimport { SyncBailHook, SyncHook, SyncWaterfallHook } from '@antv/async-hook';\nimport {\n BlendType,\n gl,\n IActiveOption,\n IAnimateOption,\n IAttrubuteAndElements,\n ICameraService,\n ICoordinateSystemService,\n IDataState,\n IEncodeFeature,\n IFontService,\n IGlobalConfigService,\n IIconService,\n IInteractionService,\n ILayer,\n ILayerConfig,\n ILayerModel,\n ILayerModelInitializationOptions,\n ILayerPlugin,\n ILayerService,\n ILegendClassificaItem,\n ILegendSegmentItem,\n IMapService,\n IModel,\n IModelInitializationOptions,\n IMultiPassRenderer,\n IPass,\n IPickingService,\n IPostProcessingPass,\n IRendererService,\n IScale,\n IScaleOptions,\n IShaderModuleService,\n ISource,\n ISourceCFG,\n IStyleAttributeInitializationOptions,\n IStyleAttributeService,\n IStyleAttributeUpdateOptions,\n LayerEventType,\n lazyInject,\n LegendItems,\n ScaleAttributeType,\n ScaleTypeName,\n ScaleTypes,\n StyleAttributeField,\n StyleAttributeOption,\n Triangulation,\n TYPES,\n} from '@antv/l7-core';\nimport Source from '@antv/l7-source';\nimport { encodePickingColor } from '@antv/l7-utils';\nimport { EventEmitter } from 'eventemitter3';\nimport { Container } from 'inversify';\nimport { isFunction, isObject, isUndefined } from 'lodash';\nimport { BlendTypes } from '../utils/blend';\nimport { handleStyleDataMapping } from '../utils/dataMappingStyle';\nimport { calculateData } from '../utils/layerData';\nimport {\n createMultiPassRenderer,\n normalizePasses,\n} from '../utils/multiPassRender';\nimport { updateShape } from '../utils/updateShape';\n/**\n * 分配 layer id\n */\nlet layerIdCounter = 0;\n\nexport default class BaseLayer<ChildLayerStyleOptions = {}>\n extends EventEmitter<LayerEventType>\n implements ILayer {\n public id: string = `${layerIdCounter++}`;\n public name: string = `${layerIdCounter}`;\n public type: string;\n public visible: boolean = true;\n public zIndex: number = 0;\n public minZoom: number;\n public maxZoom: number;\n public inited: boolean = false;\n public layerModelNeedUpdate: boolean = false;\n public pickedFeatureID: number | null = null;\n public selectedFeatureID: number | null = null;\n public styleNeedUpdate: boolean = false;\n public rendering: boolean;\n public clusterZoom: number = 0; // 聚合等级标记\n public layerType?: string | undefined;\n public triangulation?: Triangulation | undefined;\n\n public dataState: IDataState = {\n dataSourceNeedUpdate: false,\n dataMappingNeedUpdate: false,\n filterNeedUpdate: false,\n featureScaleNeedUpdate: false,\n StyleAttrNeedUpdate: false,\n };\n // 生命周期钩子\n public hooks = {\n init: new SyncBailHook(),\n afterInit: new SyncBailHook(),\n beforeRender: new SyncBailHook(),\n beforeRenderData: new SyncWaterfallHook(),\n afterRender: new SyncHook(),\n beforePickingEncode: new SyncHook(),\n afterPickingEncode: new SyncHook(),\n beforeHighlight: new SyncHook(['pickedColor']),\n afterHighlight: new SyncHook(),\n beforeSelect: new SyncHook(['pickedColor']),\n afterSelect: new SyncHook(),\n beforeDestroy: new SyncHook(),\n afterDestroy: new SyncHook(),\n };\n\n // 待渲染 model 列表\n public models: IModel[] = [];\n\n // 每个 Layer 都有一个\n public multiPassRenderer: IMultiPassRenderer;\n\n // 注入插件集\n public plugins: ILayerPlugin[];\n\n public sourceOption: {\n data: any;\n options?: ISourceCFG;\n };\n\n public layerModel: ILayerModel;\n\n public shapeOption: {\n field: any;\n values: any;\n };\n\n // TODO: 记录 sceneContainer 供创建子图层的时候使用 如 imageTileLayer\n public sceneContainer: Container | undefined;\n public tileLayer: any | undefined;\n // TODO: 用于保存子图层对象\n public layerChildren: ILayer[] = [];\n public masks: ILayer[] = [];\n // Tip: 用于标识矢量图层\n public isVector: boolean = false;\n\n @lazyInject(TYPES.IGlobalConfigService)\n protected readonly configService: IGlobalConfigService;\n\n // @lazyInject(TYPES.IShaderModuleService)\n // protected readonly shaderModuleService: IShaderModuleService;\n\n protected shaderModuleService: IShaderModuleService;\n protected cameraService: ICameraService;\n\n protected coordinateService: ICoordinateSystemService;\n\n protected iconService: IIconService;\n\n protected fontService: IFontService;\n\n protected pickingService: IPickingService;\n\n protected rendererService: IRendererService;\n\n protected layerService: ILayerService;\n\n protected interactionService: IInteractionService;\n\n protected mapService: IMapService;\n\n protected styleAttributeService: IStyleAttributeService;\n\n protected layerSource: Source;\n\n protected postProcessingPassFactory: (\n name: string,\n ) => IPostProcessingPass<unknown>;\n protected normalPassFactory: (name: string) => IPass<unknown>;\n\n protected animateOptions: IAnimateOption = { enable: false };\n\n /**\n * 图层容器\n */\n private container: Container;\n\n private encodedData: IEncodeFeature[];\n\n private configSchema: object;\n\n private currentPickId: number | null = null;\n\n private rawConfig: Partial<ILayerConfig & ChildLayerStyleOptions>;\n\n private needUpdateConfig: Partial<ILayerConfig & ChildLayerStyleOptions>;\n\n /**\n * 待更新样式属性,在初始化阶段完成注册\n */\n private pendingStyleAttributes: Array<{\n attributeName: string;\n attributeField: StyleAttributeField;\n attributeValues?: StyleAttributeOption;\n defaultName?: string;\n updateOptions?: Partial<IStyleAttributeUpdateOptions>;\n }> = [];\n\n private scaleOptions: IScaleOptions = {};\n\n private animateStartTime: number;\n\n private aniamateStatus: boolean = false;\n\n // TODO: layer 保底颜色\n private bottomColor = 'rgba(0, 0, 0, 0)';\n\n private isDestroied: boolean = false;\n\n // private pickingPassRender: IPass<'pixelPicking'>;\n\n constructor(config: Partial<ILayerConfig & ChildLayerStyleOptions> = {}) {\n super();\n this.name = config.name || this.id;\n this.zIndex = config.zIndex || 0;\n this.rawConfig = config;\n }\n\n public addMaskLayer(maskLayer: ILayer) {\n this.masks.push(maskLayer);\n }\n\n public removeMaskLayer(maskLayer: ILayer) {\n const layerIndex = this.masks.indexOf(maskLayer);\n if (layerIndex > -1) {\n this.masks.splice(layerIndex, 1);\n }\n maskLayer.destroy();\n }\n\n public getAttribute(name: string) {\n return this.styleAttributeService.getLayerStyleAttribute(name);\n }\n\n public getLayerConfig() {\n return this.configService.getLayerConfig<ChildLayerStyleOptions>(this.id);\n }\n\n public updateLayerConfig(\n configToUpdate: Partial<ILayerConfig | ChildLayerStyleOptions>,\n ) {\n if (!this.inited) {\n this.needUpdateConfig = {\n ...this.needUpdateConfig,\n ...configToUpdate,\n };\n } else {\n const sceneId = this.container.get<string>(TYPES.SceneID);\n\n // @ts-ignore\n handleStyleDataMapping(configToUpdate, this); // 处理 style 中进行数据映射的属性字段\n\n this.configService.setLayerConfig(sceneId, this.id, {\n ...this.configService.getLayerConfig(this.id),\n ...this.needUpdateConfig,\n ...configToUpdate,\n });\n this.needUpdateConfig = {};\n }\n }\n\n /**\n * 注入图层容器,父容器为场景容器\n * RootContainer 1\n * -> SceneContainer 1.*\n * -> LayerContainer 1.*\n */\n public setContainer(container: Container, sceneContainer: Container) {\n this.container = container;\n this.sceneContainer = sceneContainer;\n }\n\n public getContainer() {\n return this.container;\n }\n\n public setBottomColor(color: string) {\n this.bottomColor = color;\n }\n\n public getBottomColor() {\n return this.bottomColor;\n }\n\n public addPlugin(plugin: ILayerPlugin): ILayer {\n // TODO: 控制插件注册顺序\n // @example:\n // pointLayer.addPlugin(new MyCustomPlugin(), {\n // before: 'L7BuiltinPlugin'\n // });\n this.plugins.push(plugin);\n return this;\n }\n\n public init() {\n // 设置配置项\n const sceneId = this.container.get<string>(TYPES.SceneID);\n // 初始化图层配置项\n // const { enableMultiPassRenderer = false } = this.rawConfig;\n // this.configService.setLayerConfig(sceneId, this.id, {\n // enableMultiPassRenderer,\n // });\n this.configService.setLayerConfig(sceneId, this.id, this.rawConfig);\n this.layerType = this.rawConfig.layerType;\n\n // 全局容器服务\n\n // 场景容器服务\n this.iconService = this.container.get<IIconService>(TYPES.IIconService);\n this.fontService = this.container.get<IFontService>(TYPES.IFontService);\n\n this.rendererService = this.container.get<IRendererService>(\n TYPES.IRendererService,\n );\n this.layerService = this.container.get<ILayerService>(TYPES.ILayerService);\n this.interactionService = this.container.get<IInteractionService>(\n TYPES.IInteractionService,\n );\n\n this.pickingService = this.container.get<IPickingService>(\n TYPES.IPickingService,\n );\n this.mapService = this.container.get<IMapService>(TYPES.IMapService);\n const { enableMultiPassRenderer, passes } = this.getLayerConfig();\n if (enableMultiPassRenderer && passes?.length && passes.length > 0) {\n // Tip: 兼容 multiPassRender 在 amap1 时存在的图层不同步问题 zoom\n this.mapService.on('mapAfterFrameChange', () => {\n this.renderLayers();\n });\n }\n\n this.cameraService = this.container.get<ICameraService>(\n TYPES.ICameraService,\n );\n this.coordinateService = this.container.get<ICoordinateSystemService>(\n TYPES.ICoordinateSystemService,\n );\n this.shaderModuleService = this.container.get<IShaderModuleService>(\n TYPES.IShaderModuleService,\n );\n this.postProcessingPassFactory = this.container.get(\n TYPES.IFactoryPostProcessingPass,\n );\n this.normalPassFactory = this.container.get(TYPES.IFactoryNormalPass);\n\n // 图层容器服务\n this.styleAttributeService = this.container.get<IStyleAttributeService>(\n TYPES.IStyleAttributeService,\n );\n this.multiPassRenderer = this.container.get<IMultiPassRenderer>(\n TYPES.IMultiPassRenderer,\n );\n this.multiPassRenderer.setLayer(this);\n\n // 完成样式服务注册完成前添加的属性\n this.pendingStyleAttributes.forEach(\n ({ attributeName, attributeField, attributeValues, updateOptions }) => {\n this.styleAttributeService.updateStyleAttribute(\n attributeName,\n {\n // @ts-ignore\n scale: {\n field: attributeField,\n ...this.splitValuesAndCallbackInAttribute(\n // @ts-ignore\n attributeValues,\n // @ts-ignore\n this.getLayerConfig()[attributeName],\n ),\n },\n },\n // @ts-ignore\n updateOptions,\n );\n },\n );\n this.pendingStyleAttributes = [];\n\n // 获取插件集\n this.plugins = this.container.getAll<ILayerPlugin>(TYPES.ILayerPlugin);\n // 完成插件注册,传入场景和图层容器内的服务\n for (const plugin of this.plugins) {\n plugin.apply(this, {\n rendererService: this.rendererService,\n mapService: this.mapService,\n styleAttributeService: this.styleAttributeService,\n normalPassFactory: this.normalPassFactory,\n postProcessingPassFactory: this.postProcessingPassFactory,\n });\n }\n\n // 触发 init 生命周期插件\n this.hooks.init.call();\n // this.pickingPassRender = this.normalPassFactory('pixelPicking');\n // this.pickingPassRender.init(this);\n this.hooks.afterInit.call();\n // 触发初始化完成事件;\n this.emit('inited', {\n target: this,\n type: 'inited',\n });\n this.emit('add', {\n target: this,\n type: 'add',\n });\n\n return this;\n }\n\n public updateModelData(data: IAttrubuteAndElements) {\n if (data.attributes && data.elements) {\n this.models.map((m) => {\n m.updateAttributesAndElements(data.attributes, data.elements);\n });\n } else {\n console.warn('data error');\n }\n }\n\n public createModelData(data: any, option?: ISourceCFG) {\n if (this.layerModel.createModelData) {\n // 在某些特殊图层中单独构建 attribute & elements\n return this.layerModel.createModelData(option);\n }\n const calEncodeData = this.calculateEncodeData(data, option);\n const triangulation = this.triangulation;\n\n if (calEncodeData && triangulation) {\n return this.styleAttributeService.createAttributesAndIndices(\n calEncodeData,\n triangulation,\n );\n } else {\n return {\n attributes: undefined,\n elements: undefined,\n };\n }\n }\n\n public calculateEncodeData(data: any, option?: ISourceCFG) {\n if (this.inited) {\n return calculateData(\n this,\n this.fontService,\n this.mapService,\n this.styleAttributeService,\n data,\n option,\n );\n } else {\n console.warn('layer not inited!');\n return null;\n }\n }\n /**\n * Model初始化前需要更新Model样式\n */\n public prepareBuildModel() {\n this.inited = true;\n this.updateLayerConfig({\n ...(this.getDefaultConfig() as object),\n ...this.rawConfig,\n });\n\n // 启动动画\n const { animateOption } = this.getLayerConfig();\n if (animateOption?.enable) {\n this.layerService.startAnimate();\n this.aniamateStatus = true;\n }\n }\n public color(\n field: StyleAttributeField,\n values?: StyleAttributeOption,\n updateOptions?: Partial<IStyleAttributeUpdateOptions>,\n ) {\n // 设置 color、size、shape、style 时由于场景服务尚未完成(并没有调用 scene.addLayer),因此暂时加入待更新属性列表\n this.updateStyleAttribute('color', field, values, updateOptions);\n\n // this.pendingStyleAttributes.push({\n // attributeName: 'color',\n // attributeField: field,\n // attributeValues: values,\n // defaultName: 'colors',\n // updateOptions,\n // });\n return this;\n }\n\n // 为对应的图层传入纹理的编号名称(point/image 在 shape 方法中传入纹理名称的方法并不通用)\n public texture(\n field: StyleAttributeField,\n values?: StyleAttributeOption,\n updateOptions?: Partial<IStyleAttributeUpdateOptions>,\n ) {\n this.updateStyleAttribute('texture', field, values, updateOptions);\n return this;\n }\n\n public rotate(\n field: StyleAttributeField,\n values?: StyleAttributeOption,\n updateOptions?: Partial<IStyleAttributeUpdateOptions>,\n ) {\n this.updateStyleAttribute('rotate', field, values, updateOptions);\n return this;\n }\n public size(\n field: StyleAttributeField,\n values?: StyleAttributeOption,\n updateOptions?: Partial<IStyleAttributeUpdateOptions>,\n ) {\n this.updateStyleAttribute('size', field, values, updateOptions);\n return this;\n }\n // 对mapping后的数据过滤,scale保持不变\n public filter(\n field: StyleAttributeField,\n values?: StyleAttributeOption,\n updateOptions?: Partial<IStyleAttributeUpdateOptions>,\n ) {\n this.updateStyleAttribute('filter', field, values, updateOptions);\n return this;\n }\n\n public shape(\n field: StyleAttributeField,\n values?: StyleAttributeOption,\n updateOptions?: Partial<IStyleAttributeUpdateOptions>,\n ) {\n const lastShape = this.styleAttributeService?.getLayerStyleAttribute(\n 'shape',\n )?.scale?.field;\n const currentShape = field;\n this.shapeOption = {\n field,\n values,\n };\n this.updateStyleAttribute('shape', field, values, updateOptions);\n // TODO: 根据 shape 判断是否需要更新 model\n if (!this.tileLayer) {\n updateShape(this, lastShape, currentShape);\n }\n return this;\n }\n public label(\n field: StyleAttributeField,\n values?: StyleAttributeOption,\n updateOptions?: Partial<IStyleAttributeUpdateOptions>,\n ) {\n this.pendingStyleAttributes.push({\n attributeName: 'label',\n attributeField: field,\n attributeValues: values,\n updateOptions,\n });\n return this;\n }\n public animate(options: IAnimateOption | boolean) {\n let rawAnimate: Partial<IAnimateOption> = {};\n if (isObject(options)) {\n rawAnimate.enable = true;\n rawAnimate = {\n ...rawAnimate,\n ...options,\n };\n } else {\n rawAnimate.enable = options;\n }\n this.updateLayerConfig({\n animateOption: rawAnimate,\n });\n // this.animateOptions = options;\n return this;\n }\n\n public source(data: any, options?: ISourceCFG): ILayer {\n if (data?.data) {\n // 判断是否为source\n this.setSource(data);\n return this;\n }\n this.sourceOption = {\n data,\n options,\n };\n this.clusterZoom = 0;\n return this;\n }\n\n public setData(data: any, options?: ISourceCFG) {\n if (this.inited) {\n this.layerSource.setData(data, options);\n } else {\n this.on('inited', () => {\n const currentSource = this.getSource();\n if (!currentSource) {\n // 执行 setData 的时候 source 还不存在(还未执行 addLayer)\n this.source(new Source(data, options));\n this.sourceEvent();\n } else {\n this.layerSource.setData(data, options);\n }\n // this.layerSource.setData(data, options);\n });\n }\n\n return this;\n }\n public style(\n options: Partial<ChildLayerStyleOptions> & Partial<ILayerConfig>,\n ): ILayer {\n const lastConfig = this.getLayerConfig();\n const { passes, ...rest } = options;\n\n // passes 特殊处理\n if (passes) {\n normalizePasses(passes).forEach(\n (pass: [string, { [key: string]: unknown }]) => {\n const postProcessingPass = this.multiPassRenderer\n .getPostProcessor()\n .getPostProcessingPassByName(pass[0]);\n if (postProcessingPass) {\n postProcessingPass.updateOptions(pass[1]);\n }\n },\n );\n }\n\n this.rawConfig = {\n ...this.rawConfig,\n ...rest,\n };\n if (this.container) {\n this.updateLayerConfig(this.rawConfig);\n this.styleNeedUpdate = true;\n }\n\n // @ts-ignore\n if (lastConfig && lastConfig.mask === true && options.mask === false) {\n this.clearModels();\n this.models = this.layerModel.buildModels();\n }\n return this;\n }\n public scale(field: string | number | IScaleOptions, cfg?: IScale) {\n if (isObject(field)) {\n this.scaleOptions = {\n ...this.scaleOptions,\n ...field,\n };\n } else {\n this.scaleOptions[field] = cfg;\n }\n if (this.tileLayer) {\n this.tileLayer.scale(field, cfg);\n }\n return this;\n }\n\n /**\n * 渲染所有的图层\n */\n public renderLayers(): void {\n this.rendering = true;\n\n this.layerService.renderLayers();\n\n this.rendering = false;\n }\n\n public render(): ILayer {\n if (this.tileLayer !== undefined) {\n // 瓦片图层执行单独的 render 渲染队列\n this.tileLayer.render();\n return this;\n }\n // TODO: this.getEncodedData().length !== 0 这个判断是为了解决在 2.5.x 引入数据纹理后产生的 空数据渲染导致 texture 超出上限问题\n if (this.getEncodedData().length !== 0) {\n this.renderModels();\n }\n return this;\n }\n\n /**\n * renderMultiPass 专门用于渲染支持 multipass 的 layer\n */\n public async renderMultiPass() {\n if (this.getEncodedData().length !== 0) {\n if (this.multiPassRenderer && this.multiPassRenderer.getRenderFlag()) {\n // multi render 开始执行 multiPassRender 的渲染流程\n await this.multiPassRenderer.render();\n } else if (this.multiPassRenderer) {\n // renderPass 触发的渲染\n this.renderModels();\n } else {\n this.renderModels();\n }\n }\n }\n\n public active(options: IActiveOption | boolean) {\n const activeOption: Partial<ILayerConfig> = {};\n activeOption.enableHighlight = isObject(options) ? true : options;\n if (isObject(options)) {\n activeOption.enableHighlight = true;\n if (options.color) {\n activeOption.highlightColor = options.color;\n }\n if (options.mix) {\n activeOption.activeMix = options.mix;\n }\n } else {\n activeOption.enableHighlight = !!options;\n }\n this.updateLayerConfig(activeOption);\n return this;\n }\n public setActive(\n id: number | { x: number; y: number },\n options?: IActiveOption,\n ): void {\n if (isObject(id)) {\n const { x = 0, y = 0 } = id;\n this.updateLayerConfig({\n highlightColor: isObject(options)\n ? options.color\n : this.getLayerConfig().highlightColor,\n activeMix: isObject(options)\n ? options.mix\n : this.getLayerConfig().activeMix,\n });\n this.pick({ x, y });\n } else {\n this.updateLayerConfig({\n pickedFeatureID: id,\n highlightColor: isObject(options)\n ? options.color\n : this.getLayerConfig().highlightColor,\n activeMix: isObject(options)\n ? options.mix\n : this.getLayerConfig().activeMix,\n });\n this.hooks.beforeSelect\n .call(encodePickingColor(id as number) as number[])\n // @ts-ignore\n .then(() => {\n setTimeout(() => {\n this.reRender();\n }, 1);\n });\n }\n }\n\n public select(option: IActiveOption | boolean): ILayer {\n const activeOption: Partial<ILayerConfig> = {};\n activeOption.enableSelect = isObject(option) ? true : option;\n if (isObject(option)) {\n activeOption.enableSelect = true;\n if (option.color) {\n activeOption.selectColor = option.color;\n }\n if (option.mix) {\n activeOption.selectMix = option.mix;\n }\n } else {\n activeOption.enableSelect = !!option;\n }\n this.updateLayerConfig(activeOption);\n return this;\n }\n\n public setSelect(\n id: number | { x: number; y: number },\n options?: IActiveOption,\n ): void {\n if (isObject(id)) {\n const { x = 0, y = 0 } = id;\n this.updateLayerConfig({\n selectColor: isObject(options)\n ? options.color\n : this.getLayerConfig().selectColor,\n selectMix: isObject(options)\n ? options.mix\n : this.getLayerConfig().selectMix,\n });\n this.pick({ x, y });\n } else {\n this.updateLayerConfig({\n pickedFeatureID: id,\n selectColor: isObject(options)\n ? options.color\n : this.getLayerConfig().selectColor,\n selectMix: isObject(options)\n ? options.mix\n : this.getLayerConfig().selectMix,\n });\n this.hooks.beforeSelect\n .call(encodePickingColor(id as number) as number[])\n // @ts-ignore\n .then(() => {\n setTimeout(() => {\n this.reRender();\n }, 1);\n });\n }\n }\n public setBlend(type: keyof typeof BlendType): ILayer {\n this.updateLayerConfig({\n blend: type,\n });\n this.layerModelNeedUpdate = true;\n this.reRender();\n return this;\n }\n public show(): ILayer {\n this.updateLayerConfig({\n visible: true,\n });\n this.reRender();\n return this;\n }\n\n public hide(): ILayer {\n if (this.type === 'CanvasLayer' && this.layerModel.clearCanvas) {\n // 对 canvasLayer 的 hide 操作做特殊处理\n this.layerModel.clearCanvas();\n }\n this.updateLayerConfig({\n visible: false,\n });\n this.reRender();\n return this;\n }\n public setIndex(index: number): ILayer {\n this.zIndex = index;\n this.layerService.updateLayerRenderList();\n this.layerService.renderLayers();\n return this;\n }\n\n public setCurrentPickId(id: number) {\n this.currentPickId = id;\n }\n\n public getCurrentPickId(): number | null {\n return this.currentPickId;\n }\n\n public setCurrentSelectedId(id: number) {\n this.selectedFeatureID = id;\n }\n\n public getCurrentSelectedId(): number | null {\n return this.selectedFeatureID;\n }\n public isVisible(): boolean {\n const zoom = this.mapService.getZoom();\n const {\n visible,\n minZoom = -Infinity,\n maxZoom = Infinity,\n } = this.getLayerConfig();\n return !!visible && zoom >= minZoom && zoom <= maxZoom;\n }\n\n public setMultiPass(\n enableMultiPass: boolean,\n currentPasses?: Array<string | [string, { [key: string]: unknown }]>,\n ) {\n this.updateLayerConfig({\n enableMultiPassRenderer: enableMultiPass,\n });\n if (currentPasses) {\n this.updateLayerConfig({\n passes: currentPasses,\n });\n }\n\n if (enableMultiPass) {\n const { passes = [] } = this.getLayerConfig();\n this.multiPassRenderer = createMultiPassRenderer(\n this,\n passes,\n this.postProcessingPassFactory,\n this.normalPassFactory,\n );\n this.multiPassRenderer.setRenderFlag(true);\n const { width, height } = this.rendererService.getViewportSize();\n this.multiPassRenderer.resize(width, height);\n }\n\n return this;\n }\n\n public setMinZoom(minZoom: number): ILayer {\n this.updateLayerConfig({\n minZoom,\n });\n return this;\n }\n\n public getMinZoom(): number {\n const { minZoom } = this.getLayerConfig();\n return minZoom as number;\n }\n\n public getMaxZoom(): number {\n const { maxZoom } = this.getLayerConfig();\n return maxZoom as number;\n }\n\n public get(name: string) {\n const cfg = this.getLayerConfig();\n // @ts-ignore\n return cfg[name];\n }\n\n public setMaxZoom(maxZoom: number): ILayer {\n this.updateLayerConfig({\n maxZoom,\n });\n return this;\n }\n\n public setAutoFit(autoFit: boolean): ILayer {\n this.updateLayerConfig({\n autoFit,\n });\n return this;\n }\n\n /**\n * zoom to layer Bounds\n */\n public fitBounds(fitBoundsOptions?: unknown): ILayer {\n if (!this.inited) {\n this.updateLayerConfig({\n autoFit: true,\n });\n return this;\n }\n const source = this.getSource();\n const extent = source.extent;\n const isValid = extent.some((v) => Math.abs(v) === Infinity);\n if (isValid) {\n return this;\n }\n this.mapService.fitBounds(\n [\n [extent[0], extent[1]],\n [extent[2], extent[3]],\n ],\n fitBoundsOptions,\n );\n return this;\n }\n\n public destroy() {\n if (this.isDestroied) {\n return;\n }\n\n // remove child layer\n this.layerChildren.map((child: ILayer) => child.destroy());\n this.layerChildren = [];\n\n // remove mask list\n this.masks.map((mask: ILayer) => mask.destroy());\n this.masks = [];\n\n this.hooks.beforeDestroy.call();\n // 清除sources事件\n this.layerSource.off('update', this.sourceEvent);\n\n this.multiPassRenderer.destroy();\n // console.log(this.styleAttributeService.getAttributes())\n // 清除所有属性以及关联的 vao == 销毁所有 => model this.models.forEach((model) => model.destroy());\n this.styleAttributeService.clearAllAttributes();\n\n // 执行每个图层单独的 clearModels 方法 (清除一些额外的 texture、program、buffer 等)\n\n this.hooks.afterDestroy.call();\n\n // TODO: 清除各个图层自定义的 models 资源\n this.layerModel?.clearModels();\n\n this.models = [];\n\n this.layerService.cleanRemove(this);\n\n this.emit('remove', {\n target: this,\n type: 'remove',\n });\n\n this.emit('destroy', {\n target: this,\n type: 'destroy',\n });\n\n this.removeAllListeners();\n // 解绑图层容器中的服务\n // this.container.unbind(TYPES.IStyleAttributeService);\n\n this.isDestroied = true;\n }\n public clear() {\n this.styleAttributeService.clearAllAttributes();\n // 销毁所有 model\n }\n public clearModels() {\n this.models.forEach((model) => model.destroy());\n this.layerModel.clearModels();\n this.models = [];\n }\n\n public isDirty() {\n return !!(\n this.styleAttributeService.getLayerStyleAttributes() || []\n ).filter(\n (attribute) =>\n attribute.needRescale ||\n attribute.needRemapping ||\n attribute.needRegenerateVertices,\n ).length;\n }\n\n public setSource(source: Source) {\n // 清除旧 sources 事件\n if (this.layerSource) {\n this.layerSource.off('update', this.sourceEvent);\n }\n\n this.layerSource = source;\n this.clusterZoom = 0;\n\n // 已 inited 且启用聚合进行更新聚合数据\n if (this.inited && this.layerSource.cluster) {\n const zoom = this.mapService.getZoom();\n this.layerSource.updateClusterData(zoom);\n }\n // source 可能会复用,会在其它layer被修改\n this.layerSource.on('update', this.sourceEvent);\n }\n public getSource() {\n return this.layerSource;\n }\n\n public getScaleOptions() {\n return this.scaleOptions;\n }\n\n public setEncodedData(encodedData: IEncodeFeature[]) {\n this.encodedData = encodedData;\n }\n public getEncodedData() {\n return this.encodedData;\n }\n\n public getScale(name: string): any {\n return this.styleAttributeService.getLayerAttributeScale(name);\n }\n\n public getLegendItems(name: string): LegendItems {\n const scale = this.styleAttributeService.getLayerAttributeScale(name);\n\n // 函数自定义映射,没有 scale 返回为空数组\n if (!scale) {\n return [];\n }\n\n if (scale.invertExtent) {\n // 分段类型 Quantize、Quantile、Threshold\n const items: ILegendSegmentItem[] = scale.range().map((item: number) => {\n return {\n value: scale.invertExtent(item),\n [name]: item,\n };\n });\n\n return items;\n } else if (scale.ticks) {\n // 连续类型 Continuous (Linear, Power, Log, Identity, Time)\n const items: ILegendClassificaItem[] = scale\n .ticks()\n .map((item: string) => {\n return {\n value: item,\n [name]: scale(item),\n };\n });\n\n return items;\n } else if (scale?.domain) {\n // 枚举类型 Cat\n const items: ILegendClassificaItem[] = scale\n .domain()\n .filter((item: string | number | undefined) => !isUndefined(item))\n .map((item: string | number) => {\n return {\n value: item,\n [name]: scale(item) as string,\n };\n });\n\n return items;\n }\n\n return [];\n }\n\n public pick({ x, y }: { x: number; y: number }) {\n this.interactionService.triggerHover({ x, y });\n }\n\n public boxSelect(\n box: [number, number, number, number],\n cb: (...args: any[]) => void,\n ) {\n this.pickingService.boxPickLayer(this, box, cb);\n }\n\n public buildLayerModel(\n options: ILayerModelInitializationOptions &\n Partial<IModelInitializationOptions>,\n ): IModel {\n const {\n moduleName,\n vertexShader,\n fragmentShader,\n triangulation,\n segmentNumber,\n ...rest\n } = options;\n this.shaderModuleService.registerModule(moduleName, {\n vs: vertexShader,\n fs: fragmentShader,\n });\n const { vs, fs, uniforms } = this.shaderModuleService.getModule(moduleName);\n const { createModel } = this.rendererService;\n const {\n attributes,\n elements,\n } = this.styleAttributeService.createAttributesAndIndices(\n this.encodedData,\n triangulation,\n segmentNumber,\n );\n return createModel({\n attributes,\n uniforms,\n fs,\n vs,\n elements,\n blend: BlendTypes[BlendType.normal],\n ...rest,\n });\n }\n\n public createAttrubutes(\n options: ILayerModelInitializationOptions &\n Partial<IModelInitializationOptions>,\n ) {\n const { triangulation } = options;\n // @ts-ignore\n const { attributes } = this.styleAttributeService.createAttributes(\n this.encodedData,\n triangulation,\n );\n return attributes;\n }\n\n public getTime() {\n return this.layerService.clock.getDelta();\n }\n public setAnimateStartTime() {\n this.animateStartTime = this.layerService.clock.getElapsedTime();\n }\n public stopAnimate() {\n if (this.aniamateStatus) {\n this.layerService.stopAnimate();\n this.aniamateStatus = false;\n this.updateLayerConfig({\n animateOption: {\n enable: false,\n },\n });\n }\n }\n public getLayerAnimateTime(): number {\n return this.layerService.clock.getElapsedTime() - this.animateStartTime;\n }\n\n public needPick(type: string): boolean {\n const {\n enableHighlight = true,\n enableSelect = true,\n } = this.getLayerConfig();\n // 判断layer是否监听事件;\n let isPick =\n this.eventNames().indexOf(type) !== -1 ||\n this.eventNames().indexOf('un' + type) !== -1;\n if ((type === 'click' || type === 'dblclick') && enableSelect) {\n isPick = true;\n }\n if (\n type === 'mousemove' &&\n (enableHighlight ||\n this.eventNames().indexOf('mouseenter') !== -1 ||\n this.eventNames().indexOf('unmousemove') !== -1 ||\n this.eventNames().indexOf('mouseout') !== -1)\n ) {\n isPick = true;\n }\n return this.isVisible() && isPick;\n }\n\n public buildModels() {\n throw new Error('Method not implemented.');\n }\n public rebuildModels() {\n throw new Error('Method not implemented.');\n }\n\n public async renderMulPass(multiPassRenderer: IMultiPassRenderer) {\n await multiPassRenderer.render();\n }\n\n public renderModels(isPicking?: boolean) {\n // TODO: this.getEncodedData().length > 0 这个判断是为了解决在 2.5.x 引入数据纹理后产生的 空数据渲染导致 texture 超出上限问题\n if (this.getEncodedData().length > 0) {\n if (this.layerModelNeedUpdate && this.layerModel) {\n this.models = this.layerModel.buildModels();\n this.hooks.beforeRender.call();\n this.layerModelNeedUpdate = false;\n }\n if (this.layerModel.renderUpdate) {\n this.layerModel.renderUpdate();\n }\n this.models.forEach((model) => {\n model.draw(\n {\n uniforms: this.layerModel.getUninforms(),\n },\n isPicking,\n );\n });\n }\n return this;\n }\n\n public updateStyleAttribute(\n type: string,\n field: StyleAttributeField,\n values?: StyleAttributeOption,\n updateOptions?: Partial<IStyleAttributeUpdateOptions>,\n ) {\n if (!this.inited) {\n this.pendingStyleAttributes.push({\n attributeName: type,\n attributeField: field,\n attributeValues: values,\n updateOptions,\n });\n } else {\n this.styleAttributeService.updateStyleAttribute(\n type,\n {\n // @ts-ignore\n scale: {\n field,\n ...this.splitValuesAndCallbackInAttribute(\n // @ts-ignore\n values,\n // @ts-ignore\n this.getLayerConfig()[field],\n ),\n },\n },\n // @ts-ignore\n updateOptions,\n );\n }\n }\n\n public getShaderPickStat() {\n return this.layerService.getShaderPickStat();\n }\n\n /**\n * 继承空方法\n * @param time\n */\n public setEarthTime(time: number) {\n console.warn('empty fn');\n }\n\n protected getConfigSchema() {\n throw new Error('Method not implemented.');\n }\n\n protected getModelType(): unknown {\n throw new Error('Method not implemented.');\n }\n protected getDefaultConfig() {\n return {};\n }\n\n private sourceEvent = () => {\n this.dataState.dataSourceNeedUpdate = true;\n const { autoFit, fitBoundsOptions } = this.getLayerConfig();\n if (autoFit) {\n this.fitBounds(fitBoundsOptions);\n }\n // 对外暴露事件 迁移到 DataMappingPlugin generateMapping,保证在重新重新映射后触发\n // this.emit('dataUpdate');\n this.reRender();\n };\n\n private reRender() {\n if (this.inited) {\n this.layerService.updateLayerRenderList();\n this.layerService.renderLayers();\n }\n }\n private splitValuesAndCallbackInAttribute(\n valuesOrCallback?: unknown[],\n defaultValues?: unknown[],\n ) {\n return {\n values: isFunction(valuesOrCallback)\n ? undefined\n : valuesOrCallback || defaultValues,\n callback: isFunction(valuesOrCallback) ? valuesOrCallback : undefined,\n };\n }\n}\n"],"file":"BaseLayer.js"}
@@ -67,8 +67,10 @@ var BaseModel = (_dec = (0, _l7Core.lazyInject)(_l7Core.TYPES.IGlobalConfigServi
67
67
  (0, _defineProperty2.default)(this, "mapService", void 0);
68
68
  (0, _defineProperty2.default)(this, "cameraService", void 0);
69
69
  (0, _defineProperty2.default)(this, "layerService", void 0);
70
+ (0, _defineProperty2.default)(this, "pickingService", void 0);
70
71
  this.layer = layer;
71
72
  this.rendererService = layer.getContainer().get(_l7Core.TYPES.IRendererService);
73
+ this.pickingService = layer.getContainer().get(_l7Core.TYPES.IPickingService);
72
74
  this.shaderModuleService = layer.getContainer().get(_l7Core.TYPES.IShaderModuleService);
73
75
  this.styleAttributeService = layer.getContainer().get(_l7Core.TYPES.IStyleAttributeService);
74
76
  this.mapService = layer.getContainer().get(_l7Core.TYPES.IMapService);