@antv/l7-layers 2.5.36 → 2.5.37-mini4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/core/BaseLayer.js +4 -1
- package/lib/core/BaseLayer.js.map +1 -1
- package/lib/core/BaseModel.js +1 -1
- package/lib/core/BaseModel.js.map +1 -1
- package/lib/heatmap/models/heatmap.js +12 -17
- package/lib/heatmap/models/heatmap.js.map +1 -1
- package/lib/image/models/image.js +28 -7
- package/lib/image/models/image.js.map +1 -1
- package/lib/imagetile/index.js +95 -0
- package/lib/imagetile/index.js.map +1 -0
- package/lib/imagetile/models/imagetile.js +177 -0
- package/lib/imagetile/models/imagetile.js.map +1 -0
- package/lib/imagetile/models/index.js +17 -0
- package/lib/imagetile/models/index.js.map +1 -0
- package/lib/imagetile/utils/ImageTile.js +99 -0
- package/lib/imagetile/utils/ImageTile.js.map +1 -0
- package/lib/imagetile/utils/Tile.js +324 -0
- package/lib/imagetile/utils/Tile.js.map +1 -0
- package/lib/imagetile/utils/lruCache.js +109 -0
- package/lib/imagetile/utils/lruCache.js.map +1 -0
- package/lib/imagetile/utils/tileCache.js +58 -0
- package/lib/imagetile/utils/tileCache.js.map +1 -0
- package/lib/index.js +8 -0
- package/lib/index.js.map +1 -1
- package/lib/line/index.js +3 -0
- package/lib/line/index.js.map +1 -1
- package/lib/line/models/arc.js +2 -2
- package/lib/line/models/arc_3d.js +2 -2
- package/lib/line/models/arcmini.js +160 -0
- package/lib/line/models/arcmini.js.map +1 -0
- package/lib/line/models/great_circle.js +2 -2
- package/lib/line/models/index.js +3 -0
- package/lib/line/models/index.js.map +1 -1
- package/lib/line/models/line.js +2 -2
- package/lib/plugins/LayerStylePlugin.js.map +1 -1
- package/lib/plugins/ShaderUniformPlugin.js +3 -1
- package/lib/plugins/ShaderUniformPlugin.js.map +1 -1
- package/lib/point/models/image.js.map +1 -1
- package/package.json +6 -5
- package/CHANGELOG.md +0 -492
- package/LICENSE.md +0 -21
- package/es/citybuliding/building.d.ts +0 -17
- package/es/citybuliding/building.js +0 -79
- package/es/citybuliding/building.js.map +0 -1
- package/es/citybuliding/models/build.d.ts +0 -13
- package/es/citybuliding/models/build.js +0 -124
- package/es/citybuliding/models/build.js.map +0 -1
- package/es/core/BaseLayer.d.ts +0 -174
- package/es/core/BaseLayer.js +0 -974
- package/es/core/BaseLayer.js.map +0 -1
- package/es/core/BaseModel.d.ts +0 -135
- package/es/core/BaseModel.js +0 -412
- package/es/core/BaseModel.js.map +0 -1
- package/es/core/interface.d.ts +0 -19
- package/es/core/interface.js +0 -7
- package/es/core/interface.js.map +0 -1
- package/es/core/schema.d.ts +0 -27
- package/es/core/schema.js +0 -23
- package/es/core/schema.js.map +0 -1
- package/es/core/shape/Path.d.ts +0 -39
- package/es/core/shape/Path.js +0 -57
- package/es/core/shape/Path.js.map +0 -1
- package/es/core/shape/extrude.d.ts +0 -17
- package/es/core/shape/extrude.js +0 -143
- package/es/core/shape/extrude.js.map +0 -1
- package/es/core/triangulation.d.ts +0 -109
- package/es/core/triangulation.js +0 -328
- package/es/core/triangulation.js.map +0 -1
- package/es/earth/index.d.ts +0 -17
- package/es/earth/index.js +0 -81
- package/es/earth/index.js.map +0 -1
- package/es/earth/models/atmosphere.d.ts +0 -9
- package/es/earth/models/atmosphere.js +0 -125
- package/es/earth/models/atmosphere.js.map +0 -1
- package/es/earth/models/base.d.ts +0 -16
- package/es/earth/models/base.js +0 -193
- package/es/earth/models/base.js.map +0 -1
- package/es/earth/models/bloomsphere.d.ts +0 -9
- package/es/earth/models/bloomsphere.js +0 -125
- package/es/earth/models/bloomsphere.js.map +0 -1
- package/es/earth/utils.d.ts +0 -26
- package/es/earth/utils.js +0 -81
- package/es/earth/utils.js.map +0 -1
- package/es/glsl.d.js +0 -2
- package/es/glsl.d.js.map +0 -1
- package/es/heatmap/index.d.ts +0 -22
- package/es/heatmap/index.js +0 -123
- package/es/heatmap/index.js.map +0 -1
- package/es/heatmap/models/grid.d.ts +0 -8
- package/es/heatmap/models/grid.js +0 -90
- package/es/heatmap/models/grid.js.map +0 -1
- package/es/heatmap/models/grid3d.d.ts +0 -8
- package/es/heatmap/models/grid3d.js +0 -122
- package/es/heatmap/models/grid3d.js.map +0 -1
- package/es/heatmap/models/heatmap.d.ts +0 -24
- package/es/heatmap/models/heatmap.js +0 -399
- package/es/heatmap/models/heatmap.js.map +0 -1
- package/es/heatmap/models/hexagon.d.ts +0 -8
- package/es/heatmap/models/hexagon.js +0 -90
- package/es/heatmap/models/hexagon.js.map +0 -1
- package/es/heatmap/models/index.d.ts +0 -5
- package/es/heatmap/models/index.js +0 -13
- package/es/heatmap/models/index.js.map +0 -1
- package/es/heatmap/triangulation.d.ts +0 -5
- package/es/heatmap/triangulation.js +0 -38
- package/es/heatmap/triangulation.js.map +0 -1
- package/es/image/index.d.ts +0 -22
- package/es/image/index.js +0 -82
- package/es/image/index.js.map +0 -1
- package/es/image/models/image.d.ts +0 -18
- package/es/image/models/image.js +0 -127
- package/es/image/models/image.js.map +0 -1
- package/es/image/models/index.d.ts +0 -5
- package/es/image/models/index.js +0 -6
- package/es/image/models/index.js.map +0 -1
- package/es/index.d.ts +0 -11
- package/es/index.js +0 -39
- package/es/index.js.map +0 -1
- package/es/line/index.d.ts +0 -25
- package/es/line/index.js +0 -95
- package/es/line/index.js.map +0 -1
- package/es/line/models/arc.d.ts +0 -12
- package/es/line/models/arc.js +0 -281
- package/es/line/models/arc.js.map +0 -1
- package/es/line/models/arc_3d.d.ts +0 -12
- package/es/line/models/arc_3d.js +0 -277
- package/es/line/models/arc_3d.js.map +0 -1
- package/es/line/models/great_circle.d.ts +0 -12
- package/es/line/models/great_circle.js +0 -269
- package/es/line/models/great_circle.js.map +0 -1
- package/es/line/models/index.d.ts +0 -5
- package/es/line/models/index.js +0 -12
- package/es/line/models/index.js.map +0 -1
- package/es/line/models/line.d.ts +0 -13
- package/es/line/models/line.js +0 -342
- package/es/line/models/line.js.map +0 -1
- package/es/plugins/DataMappingPlugin.d.ts +0 -13
- package/es/plugins/DataMappingPlugin.js +0 -199
- package/es/plugins/DataMappingPlugin.js.map +0 -1
- package/es/plugins/DataSourcePlugin.d.ts +0 -7
- package/es/plugins/DataSourcePlugin.js +0 -73
- package/es/plugins/DataSourcePlugin.js.map +0 -1
- package/es/plugins/FeatureScalePlugin.d.ts +0 -26
- package/es/plugins/FeatureScalePlugin.js +0 -270
- package/es/plugins/FeatureScalePlugin.js.map +0 -1
- package/es/plugins/LayerAnimateStylePlugin.d.ts +0 -7
- package/es/plugins/LayerAnimateStylePlugin.js +0 -50
- package/es/plugins/LayerAnimateStylePlugin.js.map +0 -1
- package/es/plugins/LayerModelPlugin.d.ts +0 -8
- package/es/plugins/LayerModelPlugin.js +0 -34
- package/es/plugins/LayerModelPlugin.js.map +0 -1
- package/es/plugins/LayerStylePlugin.d.ts +0 -8
- package/es/plugins/LayerStylePlugin.js +0 -35
- package/es/plugins/LayerStylePlugin.js.map +0 -1
- package/es/plugins/LightingPlugin.d.ts +0 -36
- package/es/plugins/LightingPlugin.js +0 -100
- package/es/plugins/LightingPlugin.js.map +0 -1
- package/es/plugins/MultiPassRendererPlugin.d.ts +0 -37
- package/es/plugins/MultiPassRendererPlugin.js +0 -79
- package/es/plugins/MultiPassRendererPlugin.js.map +0 -1
- package/es/plugins/PixelPickingPlugin.d.ts +0 -8
- package/es/plugins/PixelPickingPlugin.js +0 -112
- package/es/plugins/PixelPickingPlugin.js.map +0 -1
- package/es/plugins/RegisterStyleAttributePlugin.d.ts +0 -11
- package/es/plugins/RegisterStyleAttributePlugin.js +0 -98
- package/es/plugins/RegisterStyleAttributePlugin.js.map +0 -1
- package/es/plugins/ShaderUniformPlugin.d.ts +0 -16
- package/es/plugins/ShaderUniformPlugin.js +0 -78
- package/es/plugins/ShaderUniformPlugin.js.map +0 -1
- package/es/plugins/UpdateModelPlugin.d.ts +0 -8
- package/es/plugins/UpdateModelPlugin.js +0 -27
- package/es/plugins/UpdateModelPlugin.js.map +0 -1
- package/es/plugins/UpdateStyleAttributePlugin.d.ts +0 -12
- package/es/plugins/UpdateStyleAttributePlugin.js +0 -74
- package/es/plugins/UpdateStyleAttributePlugin.js.map +0 -1
- package/es/point/index.d.ts +0 -30
- package/es/point/index.js +0 -130
- package/es/point/index.js.map +0 -1
- package/es/point/models/extrude.d.ts +0 -14
- package/es/point/models/extrude.js +0 -180
- package/es/point/models/extrude.js.map +0 -1
- package/es/point/models/fill.d.ts +0 -17
- package/es/point/models/fill.js +0 -247
- package/es/point/models/fill.js.map +0 -1
- package/es/point/models/icon-font.d.ts +0 -11
- package/es/point/models/icon-font.js +0 -181
- package/es/point/models/icon-font.js.map +0 -1
- package/es/point/models/image.d.ts +0 -11
- package/es/point/models/image.js +0 -207
- package/es/point/models/image.js.map +0 -1
- package/es/point/models/index.d.ts +0 -5
- package/es/point/models/index.js +0 -16
- package/es/point/models/index.js.map +0 -1
- package/es/point/models/normal.d.ts +0 -21
- package/es/point/models/normal.js +0 -155
- package/es/point/models/normal.js.map +0 -1
- package/es/point/models/text.d.ts +0 -56
- package/es/point/models/text.js +0 -522
- package/es/point/models/text.js.map +0 -1
- package/es/point/shape/Path.d.ts +0 -40
- package/es/point/shape/Path.js +0 -57
- package/es/point/shape/Path.js.map +0 -1
- package/es/point/shape/extrude.d.ts +0 -15
- package/es/point/shape/extrude.js +0 -58
- package/es/point/shape/extrude.js.map +0 -1
- package/es/polygon/index.d.ts +0 -22
- package/es/polygon/index.js +0 -124
- package/es/polygon/index.js.map +0 -1
- package/es/polygon/models/extrude.d.ts +0 -13
- package/es/polygon/models/extrude.js +0 -139
- package/es/polygon/models/extrude.js.map +0 -1
- package/es/polygon/models/fill.d.ts +0 -13
- package/es/polygon/models/fill.js +0 -108
- package/es/polygon/models/fill.js.map +0 -1
- package/es/polygon/models/index.d.ts +0 -5
- package/es/polygon/models/index.js +0 -20
- package/es/polygon/models/index.js.map +0 -1
- package/es/raster/buffers/triangulation.d.ts +0 -6
- package/es/raster/buffers/triangulation.js +0 -28
- package/es/raster/buffers/triangulation.js.map +0 -1
- package/es/raster/image.d.ts +0 -0
- package/es/raster/image.js +0 -2
- package/es/raster/image.js.map +0 -1
- package/es/raster/index.d.ts +0 -28
- package/es/raster/index.js +0 -83
- package/es/raster/index.js.map +0 -1
- package/es/raster/models/index.d.ts +0 -5
- package/es/raster/models/index.js +0 -7
- package/es/raster/models/index.js.map +0 -1
- package/es/raster/models/raster.d.ts +0 -19
- package/es/raster/models/raster.js +0 -152
- package/es/raster/models/raster.js.map +0 -1
- package/es/raster/raster.d.ts +0 -30
- package/es/raster/raster.js +0 -178
- package/es/raster/raster.js.map +0 -1
- package/es/raster/raster2d.d.ts +0 -27
- package/es/raster/raster2d.js +0 -158
- package/es/raster/raster2d.js.map +0 -1
- package/es/utils/blend.d.ts +0 -2
- package/es/utils/blend.js +0 -55
- package/es/utils/blend.js.map +0 -1
- package/es/utils/collision-index.d.ts +0 -47
- package/es/utils/collision-index.js +0 -87
- package/es/utils/collision-index.js.map +0 -1
- package/es/utils/dataMappingStyle.d.ts +0 -30
- package/es/utils/dataMappingStyle.js +0 -88
- package/es/utils/dataMappingStyle.js.map +0 -1
- package/es/utils/extrude_polyline.d.ts +0 -48
- package/es/utils/extrude_polyline.js +0 -405
- package/es/utils/extrude_polyline.js.map +0 -1
- package/es/utils/geo.d.ts +0 -3
- package/es/utils/geo.js +0 -24
- package/es/utils/geo.js.map +0 -1
- package/es/utils/grid-index.d.ts +0 -28
- package/es/utils/grid-index.js +0 -193
- package/es/utils/grid-index.js.map +0 -1
- package/es/utils/polylineNormal.d.ts +0 -9
- package/es/utils/polylineNormal.js +0 -171
- package/es/utils/polylineNormal.js.map +0 -1
- package/es/utils/symbol-layout.d.ts +0 -43
- package/es/utils/symbol-layout.js +0 -260
- package/es/utils/symbol-layout.js.map +0 -1
package/lib/core/BaseLayer.js
CHANGED
|
@@ -115,6 +115,8 @@ var BaseLayer = (_dec = (0, _l7Core.lazyInject)(_l7Core.TYPES.IGlobalConfigServi
|
|
|
115
115
|
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "plugins", void 0);
|
|
116
116
|
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "sourceOption", void 0);
|
|
117
117
|
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "layerModel", void 0);
|
|
118
|
+
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "sceneContainer", void 0);
|
|
119
|
+
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "layerChildren", []);
|
|
118
120
|
(0, _initializerDefineProperty2.default)((0, _assertThisInitialized2.default)(_this), "configService", _descriptor, (0, _assertThisInitialized2.default)(_this));
|
|
119
121
|
(0, _initializerDefineProperty2.default)((0, _assertThisInitialized2.default)(_this), "shaderModuleService", _descriptor2, (0, _assertThisInitialized2.default)(_this));
|
|
120
122
|
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "cameraService", void 0);
|
|
@@ -183,8 +185,9 @@ var BaseLayer = (_dec = (0, _l7Core.lazyInject)(_l7Core.TYPES.IGlobalConfigServi
|
|
|
183
185
|
}
|
|
184
186
|
}, {
|
|
185
187
|
key: "setContainer",
|
|
186
|
-
value: function setContainer(container) {
|
|
188
|
+
value: function setContainer(container, sceneContainer) {
|
|
187
189
|
this.container = container;
|
|
190
|
+
this.sceneContainer = sceneContainer;
|
|
188
191
|
}
|
|
189
192
|
}, {
|
|
190
193
|
key: "getContainer",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/core/BaseLayer.ts"],"names":["layerIdCounter","BaseLayer","TYPES","IGlobalConfigService","IShaderModuleService","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","emit","reRender","name","id","zIndex","rawConfig","configService","configToUpdate","inited","needUpdateConfig","sceneId","container","get","SceneID","setLayerConfig","plugin","plugins","push","enableMultiPassRenderer","iconService","IIconService","fontService","IFontService","rendererService","IRendererService","layerService","ILayerService","interactionService","IInteractionService","pickingService","IPickingService","mapService","IMapService","cameraService","ICameraService","coordinateService","ICoordinateSystemService","postProcessingPassFactory","IFactoryPostProcessingPass","normalPassFactory","IFactoryNormalPass","styleAttributeService","IStyleAttributeService","multiPassRenderer","IMultiPassRenderer","setLayer","pendingStyleAttributes","forEach","attributeName","attributeField","attributeValues","updateOptions","updateStyleAttribute","scale","field","splitValuesAndCallbackInAttribute","getAll","ILayerPlugin","apply","hooks","call","target","type","updateLayerConfig","getDefaultConfig","animateOption","startAnimate","aniamateStatus","values","options","rawAnimate","data","setSource","sourceOption","layerSource","setData","on","passes","rest","pass","postProcessingPass","getPostProcessor","getPostProcessingPassByName","styleNeedUpdate","cfg","scaleOptions","rendering","renderLayers","getEncodedData","length","renderModels","activeOption","enableHighlight","color","highlightColor","x","y","pick","pickedFeatureID","then","setTimeout","option","enableSelect","selectColor","blend","layerModelNeedUpdate","visible","index","updateRenderOrder","currentPickId","selectedFeatureID","zoom","getZoom","minZoom","Infinity","maxZoom","source","getSource","extent","isValid","some","v","Math","abs","off","sourceEvent","destroy","clearAllAttributes","removeAllListeners","models","model","layerModel","clearModels","getLayerStyleAttributes","filter","attribute","needRescale","needRemapping","needRegenerateVertices","cluster","updateClusterData","encodedData","getLayerAttributeScale","ticks","items","map","item","value","invertExtent","range","triggerHover","box","cb","boxPickLayer","moduleName","vertexShader","fragmentShader","triangulation","segmentNumber","shaderModuleService","registerModule","vs","fs","getModule","uniforms","createModel","createAttributesAndIndices","attributes","elements","BlendTypes","BlendType","normal","clock","getDelta","animateStartTime","getElapsedTime","stopAnimate","isPick","eventNames","indexOf","isVisible","Error","buildModels","draw","getUninforms","time","console","warn","valuesOrCallback","defaultValues","undefined","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 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 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 lazyInject,\n ScaleAttributeType,\n ScaleTypeName,\n ScaleTypes,\n StyleAttributeField,\n StyleAttributeOption,\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 } from 'lodash';\nimport { normalizePasses } from '../plugins/MultiPassRendererPlugin';\nimport { BlendTypes } from '../utils/blend';\nimport { handleStyleDataMapping } from '../utils/dataMappingStyle';\nimport baseLayerSchema from './schema';\n/**\n * 分配 layer id\n */\nlet layerIdCounter = 0;\n\nexport default class BaseLayer<ChildLayerStyleOptions = {}> extends EventEmitter\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\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 @lazyInject(TYPES.IGlobalConfigService)\n protected readonly configService: IGlobalConfigService;\n\n @lazyInject(TYPES.IShaderModuleService)\n protected readonly shaderModuleService: IShaderModuleService;\n\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 // 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 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) {\n this.container = container;\n }\n\n public getContainer() {\n return this.container;\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\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 this.cameraService = this.container.get<ICameraService>(\n TYPES.ICameraService,\n );\n this.coordinateService = this.container.get<ICoordinateSystemService>(\n TYPES.ICoordinateSystemService,\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 return this;\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 this.updateStyleAttribute('shape', field, values, updateOptions);\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 return this;\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 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 { 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 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 // if (\n // this.needPick() &&\n // this.multiPassRenderer &&\n // this.multiPassRenderer.getRenderFlag()\n // ) {\n // this.multiPassRenderer.render();\n // } else if (this.needPick() && this.multiPassRenderer) {\n // this.renderModels();\n // } else {\n // this.renderModels();\n // }\n // TODO: this.getEncodedData().length !== 0 这个判断是为了解决在 2.5.x 引入数据纹理后产生的 空数据渲染导致 texture 超出上限问题\n if (this.getEncodedData().length !== 0) {\n this.renderModels();\n }\n // this.renderModels();\n\n // this.multiPassRenderer.render();\n // this.renderModels();\n return this;\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 } 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 });\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 });\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 } 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 });\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 });\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): void {\n this.updateLayerConfig({\n blend: type,\n });\n this.layerModelNeedUpdate = true;\n this.reRender();\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 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.updateRenderOrder();\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 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 * 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 this.hooks.beforeDestroy.call();\n // 清除sources事件\n this.layerSource.off('update', this.sourceEvent);\n\n this.multiPassRenderer.destroy();\n\n // 清除所有属性以及关联的 vao\n this.styleAttributeService.clearAllAttributes();\n // 销毁所有 model\n // this.models.forEach((model) => model.destroy());\n\n this.hooks.afterDestroy.call();\n\n this.emit('remove', {\n target: this,\n type: 'remove',\n });\n\n this.removeAllListeners();\n\n // 解绑图层容器中的服务\n // this.container.unbind(TYPES.IStyleAttributeService);\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 }\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\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 public getLegendItems(name: string): any {\n const scale = this.styleAttributeService.getLayerAttributeScale(name);\n if (scale) {\n if (scale.ticks) {\n const items = scale.ticks().map((item: any) => {\n return {\n value: item,\n [name]: scale(item),\n };\n });\n return items;\n } else if (scale.invertExtent) {\n const items = scale.range().map((item: any) => {\n return {\n value: scale.invertExtent(item),\n [name]: item,\n };\n });\n return items;\n }\n } else {\n return [];\n }\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 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 renderModels() {\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 this.models.forEach((model) => {\n model.draw({\n uniforms: this.layerModel.getUninforms(),\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 /**\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\n this.emit('dataUpdate');\n this.reRender();\n };\n\n private reRender() {\n if (this.inited) {\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","IShaderModuleService","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","emit","reRender","name","id","zIndex","rawConfig","configService","configToUpdate","inited","needUpdateConfig","sceneId","container","get","SceneID","setLayerConfig","sceneContainer","plugin","plugins","push","enableMultiPassRenderer","iconService","IIconService","fontService","IFontService","rendererService","IRendererService","layerService","ILayerService","interactionService","IInteractionService","pickingService","IPickingService","mapService","IMapService","cameraService","ICameraService","coordinateService","ICoordinateSystemService","postProcessingPassFactory","IFactoryPostProcessingPass","normalPassFactory","IFactoryNormalPass","styleAttributeService","IStyleAttributeService","multiPassRenderer","IMultiPassRenderer","setLayer","pendingStyleAttributes","forEach","attributeName","attributeField","attributeValues","updateOptions","updateStyleAttribute","scale","field","splitValuesAndCallbackInAttribute","getAll","ILayerPlugin","apply","hooks","call","target","type","updateLayerConfig","getDefaultConfig","animateOption","startAnimate","aniamateStatus","values","options","rawAnimate","data","setSource","sourceOption","layerSource","setData","on","passes","rest","pass","postProcessingPass","getPostProcessor","getPostProcessingPassByName","styleNeedUpdate","cfg","scaleOptions","rendering","renderLayers","getEncodedData","length","renderModels","activeOption","enableHighlight","color","highlightColor","x","y","pick","pickedFeatureID","then","setTimeout","option","enableSelect","selectColor","blend","layerModelNeedUpdate","visible","index","updateRenderOrder","currentPickId","selectedFeatureID","zoom","getZoom","minZoom","Infinity","maxZoom","source","getSource","extent","isValid","some","v","Math","abs","off","sourceEvent","destroy","clearAllAttributes","removeAllListeners","models","model","layerModel","clearModels","getLayerStyleAttributes","filter","attribute","needRescale","needRemapping","needRegenerateVertices","cluster","updateClusterData","encodedData","getLayerAttributeScale","ticks","items","map","item","value","invertExtent","range","triggerHover","box","cb","boxPickLayer","moduleName","vertexShader","fragmentShader","triangulation","segmentNumber","shaderModuleService","registerModule","vs","fs","getModule","uniforms","createModel","createAttributesAndIndices","attributes","elements","BlendTypes","BlendType","normal","clock","getDelta","animateStartTime","getElapsedTime","stopAnimate","isPick","eventNames","indexOf","isVisible","Error","buildModels","draw","getUninforms","time","console","warn","valuesOrCallback","defaultValues","undefined","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 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 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 lazyInject,\n ScaleAttributeType,\n ScaleTypeName,\n ScaleTypes,\n StyleAttributeField,\n StyleAttributeOption,\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 } from 'lodash';\nimport { normalizePasses } from '../plugins/MultiPassRendererPlugin';\nimport { BlendTypes } from '../utils/blend';\nimport { handleStyleDataMapping } from '../utils/dataMappingStyle';\nimport baseLayerSchema from './schema';\n/**\n * 分配 layer id\n */\nlet layerIdCounter = 0;\n\nexport default class BaseLayer<ChildLayerStyleOptions = {}> extends EventEmitter\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\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 // TODO: 记录 sceneContainer 供创建子图层的时候使用 如 imageTileLayer\n public sceneContainer: Container | undefined;\n // TODO: 用于保存子图层对象\n public layerChildren: ILayer[] = [];\n\n @lazyInject(TYPES.IGlobalConfigService)\n protected readonly configService: IGlobalConfigService;\n\n @lazyInject(TYPES.IShaderModuleService)\n protected readonly shaderModuleService: IShaderModuleService;\n\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 // 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 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 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\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 this.cameraService = this.container.get<ICameraService>(\n TYPES.ICameraService,\n );\n this.coordinateService = this.container.get<ICoordinateSystemService>(\n TYPES.ICoordinateSystemService,\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 return this;\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 this.updateStyleAttribute('shape', field, values, updateOptions);\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 return this;\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 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 { 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 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 // if (\n // this.needPick() &&\n // this.multiPassRenderer &&\n // this.multiPassRenderer.getRenderFlag()\n // ) {\n // this.multiPassRenderer.render();\n // } else if (this.needPick() && this.multiPassRenderer) {\n // this.renderModels();\n // } else {\n // this.renderModels();\n // }\n // TODO: this.getEncodedData().length !== 0 这个判断是为了解决在 2.5.x 引入数据纹理后产生的 空数据渲染导致 texture 超出上限问题\n if (this.getEncodedData().length !== 0) {\n this.renderModels();\n }\n // this.renderModels();\n\n // this.multiPassRenderer.render();\n // this.renderModels();\n return this;\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 } 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 });\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 });\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 } 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 });\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 });\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): void {\n this.updateLayerConfig({\n blend: type,\n });\n this.layerModelNeedUpdate = true;\n this.reRender();\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 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.updateRenderOrder();\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 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 * 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 this.hooks.beforeDestroy.call();\n // 清除sources事件\n this.layerSource.off('update', this.sourceEvent);\n\n this.multiPassRenderer.destroy();\n\n // 清除所有属性以及关联的 vao\n this.styleAttributeService.clearAllAttributes();\n // 销毁所有 model\n // this.models.forEach((model) => model.destroy());\n\n this.hooks.afterDestroy.call();\n\n this.emit('remove', {\n target: this,\n type: 'remove',\n });\n\n this.removeAllListeners();\n\n // 解绑图层容器中的服务\n // this.container.unbind(TYPES.IStyleAttributeService);\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 }\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\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 public getLegendItems(name: string): any {\n const scale = this.styleAttributeService.getLayerAttributeScale(name);\n if (scale) {\n if (scale.ticks) {\n const items = scale.ticks().map((item: any) => {\n return {\n value: item,\n [name]: scale(item),\n };\n });\n return items;\n } else if (scale.invertExtent) {\n const items = scale.range().map((item: any) => {\n return {\n value: scale.invertExtent(item),\n [name]: item,\n };\n });\n return items;\n }\n } else {\n return [];\n }\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 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 renderModels() {\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 this.models.forEach((model) => {\n model.draw({\n uniforms: this.layerModel.getUninforms(),\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 /**\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\n this.emit('dataUpdate');\n this.reRender();\n };\n\n private reRender() {\n if (this.inited) {\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"}
|
package/lib/core/BaseModel.js
CHANGED
|
@@ -103,7 +103,7 @@ var BaseModel = (_dec = (0, _l7Core.lazyInject)(_l7Core.TYPES.IGlobalConfigServi
|
|
|
103
103
|
|
|
104
104
|
if (!this.dataTextureTest) {
|
|
105
105
|
this.dataTexture = this.createTexture2D({
|
|
106
|
-
data: new
|
|
106
|
+
data: new Uint8ClampedArray(4),
|
|
107
107
|
mag: _l7Core.gl.NEAREST,
|
|
108
108
|
min: _l7Core.gl.NEAREST,
|
|
109
109
|
width: 1,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/core/BaseModel.ts"],"names":["BaseModel","TYPES","IGlobalConfigService","IShaderModuleService","layer","rendererService","getContainer","get","IRendererService","styleAttributeService","IStyleAttributeService","mapService","IMapService","iconService","IIconService","fontService","IFontService","cameraService","ICameraService","layerService","ILayerService","registerBuiltinAttributes","startModelAnimate","createTexture2D","DATA_TEXTURE_WIDTH","rowCount","cellLength","cellProperties","cacheStyleProperties","opacity","undefined","strokeOpacity","strokeWidth","stroke","offsets","stylePropertyesExist","hasOpacity","hasStrokeOpacity","hasStrokeWidth","hasStroke","hasOffsets","dataTextureTest","getOESTextureFloat","dataTexture","data","ImageData","mag","gl","NEAREST","min","width","height","options","isUpdate","clearLastCalRes","push","attr","count","isStaticColor","isOffsetStatic","strokeColor","length","d","i","cellData","cellPropertiesLayouts","layout","value","patchMod","encodeData","encodeDatalength","Math","ceil","totalLength","patchData","getLayerConfig","blend","BlendTypes","BlendType","Error","option","enable","duration","interval","trailLength","animateOption","setAnimateStartTime"],"mappings":"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","sourcesContent":["import {\n BlendType,\n gl,\n IAnimateOption,\n IAttribute,\n IBlendOptions,\n ICameraService,\n IElements,\n IEncodeFeature,\n IFontService,\n IGlobalConfigService,\n IIconService,\n ILayer,\n ILayerConfig,\n ILayerModel,\n ILayerService,\n IMapService,\n IModel,\n IModelUniform,\n IRendererService,\n IShaderModuleService,\n IStyleAttributeService,\n ITexture2D,\n ITexture2DInitializationOptions,\n lazyInject,\n Triangulation,\n TYPES,\n} from '@antv/l7-core';\nimport { rgb2arr } from '@antv/l7-utils';\nimport { color } from 'd3-color';\nimport { isArray, isEqual, isFunction, isNumber, isString } from 'lodash';\nimport { BlendTypes } from '../utils/blend';\n\nexport type styleSingle =\n | number\n | string\n | [string, (single: any) => number]\n | [string, [number, number]];\nexport type styleOffset =\n | string\n | [number, number]\n | [string, (single: any) => number];\nexport type styleColor =\n | string\n | [string, (single: any) => string]\n | [string, [string, string]];\nexport interface IDataTextureFrame {\n data: number[];\n width: number;\n height: number;\n}\n\nexport interface ICellProperty {\n attr: string;\n count: number;\n}\n\nexport default class BaseModel<ChildLayerStyleOptions = {}>\n implements ILayerModel {\n public triangulation: Triangulation;\n\n // style texture data mapping\n public createTexture2D: (\n options: ITexture2DInitializationOptions,\n ) => ITexture2D;\n\n protected layer: ILayer;\n protected dataTexture: ITexture2D; // 用于数据传递的数据纹理\n protected DATA_TEXTURE_WIDTH: number; // 默认有多少列(宽度)\n protected rowCount: number; // 计算得到的当前数据纹理有多少行(高度)\n protected cacheStyleProperties: {\n // 记录存储上一次样式字段的值\n opacity: styleSingle | undefined;\n strokeOpacity: styleSingle | undefined;\n strokeWidth: styleSingle | undefined;\n stroke: styleColor | undefined;\n offsets: styleOffset | undefined;\n };\n protected cellLength: number; // 单个 cell 的长度\n protected cellProperties: ICellProperty[]; // 需要进行数据映射的属性集合\n protected cellTypeLayout: number[];\n protected stylePropertyesExist: {\n // 记录 style 属性是否存在的中间变量\n hasOpacity: number;\n hasStrokeOpacity: number;\n hasStrokeWidth: number;\n hasStroke: number;\n hasOffsets: number;\n };\n protected dataTextureTest: boolean;\n\n @lazyInject(TYPES.IGlobalConfigService)\n protected readonly configService: IGlobalConfigService;\n\n // @lazyInject(TYPES.IIconService)\n // protected readonly iconService: IIconService;\n\n // @lazyInject(TYPES.IFontService)\n // protected readonly fontService: IFontService;\n\n @lazyInject(TYPES.IShaderModuleService)\n protected readonly shaderModuleService: IShaderModuleService;\n\n protected rendererService: IRendererService;\n protected iconService: IIconService;\n protected fontService: IFontService;\n protected styleAttributeService: IStyleAttributeService;\n protected mapService: IMapService;\n protected cameraService: ICameraService;\n protected layerService: ILayerService;\n\n // style texture data mapping\n\n constructor(layer: ILayer) {\n this.layer = layer;\n this.rendererService = layer\n .getContainer()\n .get<IRendererService>(TYPES.IRendererService);\n this.styleAttributeService = layer\n .getContainer()\n .get<IStyleAttributeService>(TYPES.IStyleAttributeService);\n this.mapService = layer.getContainer().get<IMapService>(TYPES.IMapService);\n this.iconService = layer\n .getContainer()\n .get<IIconService>(TYPES.IIconService);\n this.fontService = layer\n .getContainer()\n .get<IFontService>(TYPES.IFontService);\n this.cameraService = layer\n .getContainer()\n .get<ICameraService>(TYPES.ICameraService);\n this.layerService = layer\n .getContainer()\n .get<ILayerService>(TYPES.ILayerService);\n\n // 注册 Attribute\n this.registerBuiltinAttributes();\n // 开启动画\n this.startModelAnimate();\n\n const { createTexture2D } = this.rendererService;\n this.createTexture2D = createTexture2D;\n this.DATA_TEXTURE_WIDTH = 1024; // 数据纹理固定宽度\n this.rowCount = 1;\n this.cellLength = 0;\n this.cellProperties = [];\n this.cacheStyleProperties = {\n opacity: undefined,\n strokeOpacity: undefined,\n strokeWidth: undefined,\n stroke: undefined,\n offsets: undefined,\n };\n this.stylePropertyesExist = {\n hasOpacity: 0,\n hasStrokeOpacity: 0,\n hasStrokeWidth: 0,\n hasStroke: 0,\n hasOffsets: 0,\n };\n this.dataTextureTest = this.layerService.getOESTextureFloat();\n // 只有在不支持数据纹理的情况下进行赋值\n if (!this.dataTextureTest) {\n this.dataTexture = this.createTexture2D({\n data: new ImageData(1, 1).data,\n mag: gl.NEAREST,\n min: gl.NEAREST,\n width: 1,\n height: 1,\n });\n }\n }\n\n // style datatexture mapping\n\n /**\n * 清除上一次的计算结果 - 全量清除\n */\n public clearLastCalRes() {\n this.cellProperties = []; // 清空上一次计算的需要进行数据映射的属性集合\n this.cellLength = 0; // 清空上一次计算的 cell 的长度\n this.stylePropertyesExist = {\n // 全量清空上一次是否需要对 style 属性进行数据映射的判断\n hasOpacity: 0,\n hasStrokeOpacity: 0,\n hasStrokeWidth: 0,\n hasStroke: 0,\n hasOffsets: 0,\n };\n }\n\n public getCellTypeLayout() {\n if (this.dataTextureTest) {\n return [\n this.rowCount, // 数据纹理有几行\n this.DATA_TEXTURE_WIDTH, // 数据纹理有几列\n 0.0,\n 0.0,\n this.stylePropertyesExist.hasOpacity, // cell 中是否存在 opacity\n this.stylePropertyesExist.hasStrokeOpacity, // cell 中是否存在 strokeOpacity\n this.stylePropertyesExist.hasStrokeWidth, // cell 中是否存在 strokeWidth\n this.stylePropertyesExist.hasStroke, // cell 中是否存在 stroke\n this.stylePropertyesExist.hasOffsets, // cell 中是否存在 offsets\n 0.0,\n 0.0,\n 0.0,\n 0.0,\n 0.0,\n 0.0,\n 1.0,\n ];\n } else {\n return [\n 1.0, // 数据纹理有几行\n 1.0, // 数据纹理有几列\n 0.0,\n 0.0,\n 0.0, // cell 中是否存在 opacity\n 0.0, // cell 中是否存在 strokeOpacity\n 0.0, // cell 中是否存在 strokeWidth\n 0.0, // cell 中是否存在 stroke\n 0.0, // cell 中是否存在 offsets\n 0.0,\n 0.0,\n 0.0,\n 0.0,\n 0.0,\n 0.0,\n -1.0,\n ];\n }\n }\n\n /**\n * 判断数据纹理是否需要重新计算 - 根据传入的值进行判断\n * @param options\n * @returns\n */\n public dataTextureNeedUpdate(options: {\n opacity?: styleSingle;\n strokeOpacity?: styleSingle;\n strokeWidth?: styleSingle;\n stroke?: styleColor;\n offsets?: styleOffset;\n textOffset?: styleOffset;\n }): boolean {\n let isUpdate = false;\n if (!isEqual(options.opacity, this.cacheStyleProperties.opacity)) {\n isUpdate = true;\n this.cacheStyleProperties.opacity = options.opacity;\n }\n if (\n !isEqual(options.strokeOpacity, this.cacheStyleProperties.strokeOpacity)\n ) {\n isUpdate = true;\n this.cacheStyleProperties.strokeOpacity = options.strokeOpacity;\n }\n if (!isEqual(options.strokeWidth, this.cacheStyleProperties.strokeWidth)) {\n isUpdate = true;\n this.cacheStyleProperties.strokeWidth = options.strokeWidth;\n }\n if (!isEqual(options.stroke, this.cacheStyleProperties.stroke)) {\n isUpdate = true;\n this.cacheStyleProperties.stroke = options.stroke;\n }\n if (!isEqual(options.offsets, this.cacheStyleProperties.offsets)) {\n isUpdate = true;\n this.cacheStyleProperties.offsets = options.offsets;\n }\n if (this.dataTexture === undefined) {\n isUpdate = true;\n }\n return isUpdate;\n }\n /**\n * 判断当前的样式中哪些是需要进行数据映射的,哪些是常量,同时计算用于构建数据纹理的一些中间变量\n * @param options\n */\n public judgeStyleAttributes(options: {\n opacity?: styleSingle;\n strokeOpacity?: styleSingle;\n strokeWidth?: styleSingle;\n stroke?: styleColor;\n offsets?: styleOffset;\n }) {\n this.clearLastCalRes(); // 清除上一次的计算结果 - 全量清除\n\n if (options.opacity !== undefined && !isNumber(options.opacity)) {\n // 数据映射\n this.cellProperties.push({ attr: 'opacity', count: 1 });\n this.stylePropertyesExist.hasOpacity = 1;\n this.cellLength += 1;\n }\n\n if (\n options.strokeOpacity !== undefined &&\n !isNumber(options.strokeOpacity)\n ) {\n // 数据映射\n this.cellProperties.push({ attr: 'strokeOpacity', count: 1 });\n this.stylePropertyesExist.hasStrokeOpacity = 1;\n this.cellLength += 1;\n }\n\n if (options.strokeWidth !== undefined && !isNumber(options.strokeWidth)) {\n // 数据映射\n this.cellProperties.push({ attr: 'strokeWidth', count: 1 });\n this.stylePropertyesExist.hasStrokeWidth = 1;\n this.cellLength += 1;\n }\n\n if (options.stroke !== undefined && !this.isStaticColor(options.stroke)) {\n // 数据映射\n this.cellProperties.push({ attr: 'stroke', count: 4 });\n this.stylePropertyesExist.hasStroke = 1;\n this.cellLength += 4;\n }\n\n if (\n options.offsets !== undefined &&\n !this.isOffsetStatic(options.offsets)\n ) {\n // 数据映射\n this.cellProperties.push({ attr: 'offsets', count: 2 });\n this.stylePropertyesExist.hasOffsets = 1;\n this.cellLength += 2;\n }\n // console.log('this.cellLength', this.cellLength)\n }\n\n /**\n * 判断变量 stroke 是否是常量值\n * @param stroke\n * @returns\n */\n public isStaticColor(stroke: styleColor): boolean {\n if (isString(stroke)) {\n if (color(stroke)) {\n return true;\n } else {\n return false;\n }\n }\n return false;\n }\n /**\n * 获取 stroke 颜色并做兼容处理\n * @param stroke\n * @returns\n */\n public getStrokeColor(stroke: styleColor) {\n if (this.isStaticColor(stroke)) {\n const strokeColor = rgb2arr(stroke as string);\n strokeColor[0] = strokeColor[0] ? strokeColor[0] : 0;\n strokeColor[1] = strokeColor[1] ? strokeColor[1] : 0;\n strokeColor[2] = strokeColor[2] ? strokeColor[2] : 0;\n strokeColor[3] = strokeColor[3] ? strokeColor[3] : 0;\n return strokeColor;\n } else {\n return [0, 0, 0, 0];\n }\n }\n\n /**\n * 判断 offsets 是否是常量\n * @param offsets\n * @returns\n */\n public isOffsetStatic(offsets: styleOffset) {\n if (\n isArray(offsets) &&\n offsets.length === 2 &&\n isNumber(offsets[0]) &&\n isNumber(offsets[1])\n ) {\n return true;\n } else {\n return false;\n }\n }\n\n /**\n * 补空位\n * @param d\n * @param count\n */\n public patchMod(d: number[], count: number) {\n for (let i = 0; i < count; i++) {\n d.push(-1);\n }\n }\n\n /**\n * 根据映射的数据字段往推入数据\n * @param d\n * @param cellData\n * @param cellPropertiesLayouts\n */\n public patchData(\n d: number[],\n cellData: IEncodeFeature,\n cellPropertiesLayouts: ICellProperty[],\n ) {\n for (const layout of cellPropertiesLayouts) {\n const { attr, count } = layout;\n\n const value = cellData[attr];\n if (value) {\n // 数据中存在该属性\n if (attr === 'stroke') {\n d.push(...rgb2arr(value));\n } else if (attr === 'offsets') {\n if (this.isOffsetStatic(value)) {\n d.push(-value[0], value[1]);\n } else {\n d.push(0, 0);\n }\n } else {\n d.push(isNumber(value) ? value : 1.0);\n }\n } else {\n // 若不存在时则补位\n this.patchMod(d, count);\n }\n }\n }\n\n /**\n * 计算推入数据纹理的数据\n * @param cellLength\n * @param encodeData\n * @param cellPropertiesLayouts\n * @returns\n */\n public calDataFrame(\n cellLength: number,\n encodeData: IEncodeFeature[],\n cellPropertiesLayouts: ICellProperty[],\n ): IDataTextureFrame {\n const encodeDatalength = encodeData.length;\n const rowCount = Math.ceil(\n (encodeDatalength * cellLength) / this.DATA_TEXTURE_WIDTH,\n ); // 有多少行\n\n const totalLength = rowCount * this.DATA_TEXTURE_WIDTH;\n const d: number[] = [];\n for (let i = 0; i < encodeDatalength; i++) {\n // 根据 encodeData 数据推入数据\n const cellData = encodeData[i];\n this.patchData(d, cellData, cellPropertiesLayouts);\n }\n for (let i = d.length; i < totalLength; i++) {\n // 每行不足的部分用 -1 补足(数据纹理时 width * height 的矩形数据集合)\n d.push(-1);\n }\n // console.log('data', d)\n return { data: d, width: this.DATA_TEXTURE_WIDTH, height: rowCount };\n }\n\n // style datatexture mapping\n\n public getBlend(): IBlendOptions {\n const { blend = 'normal' } = this.layer.getLayerConfig();\n return BlendTypes[BlendType[blend]] as IBlendOptions;\n }\n public getDefaultStyle(): unknown {\n return {};\n }\n public getUninforms(): IModelUniform {\n throw new Error('Method not implemented.');\n }\n\n public getAnimateUniforms(): IModelUniform {\n return {};\n }\n\n public needUpdate(): boolean {\n return false;\n }\n public buildModels(): IModel[] {\n throw new Error('Method not implemented.');\n }\n public initModels(): IModel[] {\n throw new Error('Method not implemented.');\n }\n public clearModels() {\n return;\n }\n public getAttribute(): {\n attributes: {\n [attributeName: string]: IAttribute;\n };\n elements: IElements;\n } {\n throw new Error('Method not implemented.');\n }\n public render() {\n throw new Error('Method not implemented.');\n }\n protected registerBuiltinAttributes() {\n throw new Error('Method not implemented.');\n }\n protected animateOption2Array(option: IAnimateOption): number[] {\n return [\n option.enable ? 0 : 1.0,\n option.duration || 4.0,\n option.interval || 0.2,\n option.trailLength || 0.1,\n ];\n }\n protected startModelAnimate() {\n const { animateOption } = this.layer.getLayerConfig() as ILayerConfig;\n if (animateOption.enable) {\n this.layer.setAnimateStartTime();\n }\n }\n}\n"],"file":"BaseModel.js"}
|
|
1
|
+
{"version":3,"sources":["../../src/core/BaseModel.ts"],"names":["BaseModel","TYPES","IGlobalConfigService","IShaderModuleService","layer","rendererService","getContainer","get","IRendererService","styleAttributeService","IStyleAttributeService","mapService","IMapService","iconService","IIconService","fontService","IFontService","cameraService","ICameraService","layerService","ILayerService","registerBuiltinAttributes","startModelAnimate","createTexture2D","DATA_TEXTURE_WIDTH","rowCount","cellLength","cellProperties","cacheStyleProperties","opacity","undefined","strokeOpacity","strokeWidth","stroke","offsets","stylePropertyesExist","hasOpacity","hasStrokeOpacity","hasStrokeWidth","hasStroke","hasOffsets","dataTextureTest","getOESTextureFloat","dataTexture","data","Uint8ClampedArray","mag","gl","NEAREST","min","width","height","options","isUpdate","clearLastCalRes","push","attr","count","isStaticColor","isOffsetStatic","strokeColor","length","d","i","cellData","cellPropertiesLayouts","layout","value","patchMod","encodeData","encodeDatalength","Math","ceil","totalLength","patchData","getLayerConfig","blend","BlendTypes","BlendType","Error","option","enable","duration","interval","trailLength","animateOption","setAnimateStartTime"],"mappings":"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","sourcesContent":["import {\n BlendType,\n gl,\n IAnimateOption,\n IAttribute,\n IBlendOptions,\n ICameraService,\n IElements,\n IEncodeFeature,\n IFontService,\n IGlobalConfigService,\n IIconService,\n ILayer,\n ILayerConfig,\n ILayerModel,\n ILayerService,\n IMapService,\n IModel,\n IModelUniform,\n IRendererService,\n IShaderModuleService,\n IStyleAttributeService,\n ITexture2D,\n ITexture2DInitializationOptions,\n lazyInject,\n Triangulation,\n TYPES,\n} from '@antv/l7-core';\nimport { rgb2arr } from '@antv/l7-utils';\nimport { color } from 'd3-color';\nimport { isArray, isEqual, isFunction, isNumber, isString } from 'lodash';\nimport { BlendTypes } from '../utils/blend';\n\nexport type styleSingle =\n | number\n | string\n | [string, (single: any) => number]\n | [string, [number, number]];\nexport type styleOffset =\n | string\n | [number, number]\n | [string, (single: any) => number];\nexport type styleColor =\n | string\n | [string, (single: any) => string]\n | [string, [string, string]];\nexport interface IDataTextureFrame {\n data: number[];\n width: number;\n height: number;\n}\n\nexport interface ICellProperty {\n attr: string;\n count: number;\n}\n\nexport default class BaseModel<ChildLayerStyleOptions = {}>\n implements ILayerModel {\n public triangulation: Triangulation;\n\n // style texture data mapping\n public createTexture2D: (\n options: ITexture2DInitializationOptions,\n ) => ITexture2D;\n\n protected layer: ILayer;\n protected dataTexture: ITexture2D; // 用于数据传递的数据纹理\n protected DATA_TEXTURE_WIDTH: number; // 默认有多少列(宽度)\n protected rowCount: number; // 计算得到的当前数据纹理有多少行(高度)\n protected cacheStyleProperties: {\n // 记录存储上一次样式字段的值\n opacity: styleSingle | undefined;\n strokeOpacity: styleSingle | undefined;\n strokeWidth: styleSingle | undefined;\n stroke: styleColor | undefined;\n offsets: styleOffset | undefined;\n };\n protected cellLength: number; // 单个 cell 的长度\n protected cellProperties: ICellProperty[]; // 需要进行数据映射的属性集合\n protected cellTypeLayout: number[];\n protected stylePropertyesExist: {\n // 记录 style 属性是否存在的中间变量\n hasOpacity: number;\n hasStrokeOpacity: number;\n hasStrokeWidth: number;\n hasStroke: number;\n hasOffsets: number;\n };\n protected dataTextureTest: boolean;\n\n @lazyInject(TYPES.IGlobalConfigService)\n protected readonly configService: IGlobalConfigService;\n\n // @lazyInject(TYPES.IIconService)\n // protected readonly iconService: IIconService;\n\n // @lazyInject(TYPES.IFontService)\n // protected readonly fontService: IFontService;\n\n @lazyInject(TYPES.IShaderModuleService)\n protected readonly shaderModuleService: IShaderModuleService;\n\n protected rendererService: IRendererService;\n protected iconService: IIconService;\n protected fontService: IFontService;\n protected styleAttributeService: IStyleAttributeService;\n protected mapService: IMapService;\n protected cameraService: ICameraService;\n protected layerService: ILayerService;\n\n // style texture data mapping\n\n constructor(layer: ILayer) {\n this.layer = layer;\n this.rendererService = layer\n .getContainer()\n .get<IRendererService>(TYPES.IRendererService);\n this.styleAttributeService = layer\n .getContainer()\n .get<IStyleAttributeService>(TYPES.IStyleAttributeService);\n this.mapService = layer.getContainer().get<IMapService>(TYPES.IMapService);\n this.iconService = layer\n .getContainer()\n .get<IIconService>(TYPES.IIconService);\n this.fontService = layer\n .getContainer()\n .get<IFontService>(TYPES.IFontService);\n this.cameraService = layer\n .getContainer()\n .get<ICameraService>(TYPES.ICameraService);\n this.layerService = layer\n .getContainer()\n .get<ILayerService>(TYPES.ILayerService);\n\n // 注册 Attribute\n this.registerBuiltinAttributes();\n // 开启动画\n this.startModelAnimate();\n\n const { createTexture2D } = this.rendererService;\n this.createTexture2D = createTexture2D;\n this.DATA_TEXTURE_WIDTH = 1024; // 数据纹理固定宽度\n this.rowCount = 1;\n this.cellLength = 0;\n this.cellProperties = [];\n this.cacheStyleProperties = {\n opacity: undefined,\n strokeOpacity: undefined,\n strokeWidth: undefined,\n stroke: undefined,\n offsets: undefined,\n };\n this.stylePropertyesExist = {\n hasOpacity: 0,\n hasStrokeOpacity: 0,\n hasStrokeWidth: 0,\n hasStroke: 0,\n hasOffsets: 0,\n };\n this.dataTextureTest = this.layerService.getOESTextureFloat();\n // 只有在不支持数据纹理的情况下进行赋值\n if (!this.dataTextureTest) {\n this.dataTexture = this.createTexture2D({\n data: new Uint8ClampedArray(4),\n mag: gl.NEAREST,\n min: gl.NEAREST,\n width: 1,\n height: 1,\n });\n }\n }\n\n // style datatexture mapping\n\n /**\n * 清除上一次的计算结果 - 全量清除\n */\n public clearLastCalRes() {\n this.cellProperties = []; // 清空上一次计算的需要进行数据映射的属性集合\n this.cellLength = 0; // 清空上一次计算的 cell 的长度\n this.stylePropertyesExist = {\n // 全量清空上一次是否需要对 style 属性进行数据映射的判断\n hasOpacity: 0,\n hasStrokeOpacity: 0,\n hasStrokeWidth: 0,\n hasStroke: 0,\n hasOffsets: 0,\n };\n }\n\n public getCellTypeLayout() {\n if (this.dataTextureTest) {\n return [\n this.rowCount, // 数据纹理有几行\n this.DATA_TEXTURE_WIDTH, // 数据纹理有几列\n 0.0,\n 0.0,\n this.stylePropertyesExist.hasOpacity, // cell 中是否存在 opacity\n this.stylePropertyesExist.hasStrokeOpacity, // cell 中是否存在 strokeOpacity\n this.stylePropertyesExist.hasStrokeWidth, // cell 中是否存在 strokeWidth\n this.stylePropertyesExist.hasStroke, // cell 中是否存在 stroke\n this.stylePropertyesExist.hasOffsets, // cell 中是否存在 offsets\n 0.0,\n 0.0,\n 0.0,\n 0.0,\n 0.0,\n 0.0,\n 1.0,\n ];\n } else {\n return [\n 1.0, // 数据纹理有几行\n 1.0, // 数据纹理有几列\n 0.0,\n 0.0,\n 0.0, // cell 中是否存在 opacity\n 0.0, // cell 中是否存在 strokeOpacity\n 0.0, // cell 中是否存在 strokeWidth\n 0.0, // cell 中是否存在 stroke\n 0.0, // cell 中是否存在 offsets\n 0.0,\n 0.0,\n 0.0,\n 0.0,\n 0.0,\n 0.0,\n -1.0,\n ];\n }\n }\n\n /**\n * 判断数据纹理是否需要重新计算 - 根据传入的值进行判断\n * @param options\n * @returns\n */\n public dataTextureNeedUpdate(options: {\n opacity?: styleSingle;\n strokeOpacity?: styleSingle;\n strokeWidth?: styleSingle;\n stroke?: styleColor;\n offsets?: styleOffset;\n textOffset?: styleOffset;\n }): boolean {\n let isUpdate = false;\n if (!isEqual(options.opacity, this.cacheStyleProperties.opacity)) {\n isUpdate = true;\n this.cacheStyleProperties.opacity = options.opacity;\n }\n if (\n !isEqual(options.strokeOpacity, this.cacheStyleProperties.strokeOpacity)\n ) {\n isUpdate = true;\n this.cacheStyleProperties.strokeOpacity = options.strokeOpacity;\n }\n if (!isEqual(options.strokeWidth, this.cacheStyleProperties.strokeWidth)) {\n isUpdate = true;\n this.cacheStyleProperties.strokeWidth = options.strokeWidth;\n }\n if (!isEqual(options.stroke, this.cacheStyleProperties.stroke)) {\n isUpdate = true;\n this.cacheStyleProperties.stroke = options.stroke;\n }\n if (!isEqual(options.offsets, this.cacheStyleProperties.offsets)) {\n isUpdate = true;\n this.cacheStyleProperties.offsets = options.offsets;\n }\n if (this.dataTexture === undefined) {\n isUpdate = true;\n }\n return isUpdate;\n }\n /**\n * 判断当前的样式中哪些是需要进行数据映射的,哪些是常量,同时计算用于构建数据纹理的一些中间变量\n * @param options\n */\n public judgeStyleAttributes(options: {\n opacity?: styleSingle;\n strokeOpacity?: styleSingle;\n strokeWidth?: styleSingle;\n stroke?: styleColor;\n offsets?: styleOffset;\n }) {\n this.clearLastCalRes(); // 清除上一次的计算结果 - 全量清除\n\n if (options.opacity !== undefined && !isNumber(options.opacity)) {\n // 数据映射\n this.cellProperties.push({ attr: 'opacity', count: 1 });\n this.stylePropertyesExist.hasOpacity = 1;\n this.cellLength += 1;\n }\n\n if (\n options.strokeOpacity !== undefined &&\n !isNumber(options.strokeOpacity)\n ) {\n // 数据映射\n this.cellProperties.push({ attr: 'strokeOpacity', count: 1 });\n this.stylePropertyesExist.hasStrokeOpacity = 1;\n this.cellLength += 1;\n }\n\n if (options.strokeWidth !== undefined && !isNumber(options.strokeWidth)) {\n // 数据映射\n this.cellProperties.push({ attr: 'strokeWidth', count: 1 });\n this.stylePropertyesExist.hasStrokeWidth = 1;\n this.cellLength += 1;\n }\n\n if (options.stroke !== undefined && !this.isStaticColor(options.stroke)) {\n // 数据映射\n this.cellProperties.push({ attr: 'stroke', count: 4 });\n this.stylePropertyesExist.hasStroke = 1;\n this.cellLength += 4;\n }\n\n if (\n options.offsets !== undefined &&\n !this.isOffsetStatic(options.offsets)\n ) {\n // 数据映射\n this.cellProperties.push({ attr: 'offsets', count: 2 });\n this.stylePropertyesExist.hasOffsets = 1;\n this.cellLength += 2;\n }\n // console.log('this.cellLength', this.cellLength)\n }\n\n /**\n * 判断变量 stroke 是否是常量值\n * @param stroke\n * @returns\n */\n public isStaticColor(stroke: styleColor): boolean {\n if (isString(stroke)) {\n if (color(stroke)) {\n return true;\n } else {\n return false;\n }\n }\n return false;\n }\n /**\n * 获取 stroke 颜色并做兼容处理\n * @param stroke\n * @returns\n */\n public getStrokeColor(stroke: styleColor) {\n if (this.isStaticColor(stroke)) {\n const strokeColor = rgb2arr(stroke as string);\n strokeColor[0] = strokeColor[0] ? strokeColor[0] : 0;\n strokeColor[1] = strokeColor[1] ? strokeColor[1] : 0;\n strokeColor[2] = strokeColor[2] ? strokeColor[2] : 0;\n strokeColor[3] = strokeColor[3] ? strokeColor[3] : 0;\n return strokeColor;\n } else {\n return [0, 0, 0, 0];\n }\n }\n\n /**\n * 判断 offsets 是否是常量\n * @param offsets\n * @returns\n */\n public isOffsetStatic(offsets: styleOffset) {\n if (\n isArray(offsets) &&\n offsets.length === 2 &&\n isNumber(offsets[0]) &&\n isNumber(offsets[1])\n ) {\n return true;\n } else {\n return false;\n }\n }\n\n /**\n * 补空位\n * @param d\n * @param count\n */\n public patchMod(d: number[], count: number) {\n for (let i = 0; i < count; i++) {\n d.push(-1);\n }\n }\n\n /**\n * 根据映射的数据字段往推入数据\n * @param d\n * @param cellData\n * @param cellPropertiesLayouts\n */\n public patchData(\n d: number[],\n cellData: IEncodeFeature,\n cellPropertiesLayouts: ICellProperty[],\n ) {\n for (const layout of cellPropertiesLayouts) {\n const { attr, count } = layout;\n\n const value = cellData[attr];\n if (value) {\n // 数据中存在该属性\n if (attr === 'stroke') {\n d.push(...rgb2arr(value));\n } else if (attr === 'offsets') {\n if (this.isOffsetStatic(value)) {\n d.push(-value[0], value[1]);\n } else {\n d.push(0, 0);\n }\n } else {\n d.push(isNumber(value) ? value : 1.0);\n }\n } else {\n // 若不存在时则补位\n this.patchMod(d, count);\n }\n }\n }\n\n /**\n * 计算推入数据纹理的数据\n * @param cellLength\n * @param encodeData\n * @param cellPropertiesLayouts\n * @returns\n */\n public calDataFrame(\n cellLength: number,\n encodeData: IEncodeFeature[],\n cellPropertiesLayouts: ICellProperty[],\n ): IDataTextureFrame {\n const encodeDatalength = encodeData.length;\n const rowCount = Math.ceil(\n (encodeDatalength * cellLength) / this.DATA_TEXTURE_WIDTH,\n ); // 有多少行\n\n const totalLength = rowCount * this.DATA_TEXTURE_WIDTH;\n const d: number[] = [];\n for (let i = 0; i < encodeDatalength; i++) {\n // 根据 encodeData 数据推入数据\n const cellData = encodeData[i];\n this.patchData(d, cellData, cellPropertiesLayouts);\n }\n for (let i = d.length; i < totalLength; i++) {\n // 每行不足的部分用 -1 补足(数据纹理时 width * height 的矩形数据集合)\n d.push(-1);\n }\n // console.log('data', d)\n return { data: d, width: this.DATA_TEXTURE_WIDTH, height: rowCount };\n }\n\n // style datatexture mapping\n\n public getBlend(): IBlendOptions {\n const { blend = 'normal' } = this.layer.getLayerConfig();\n return BlendTypes[BlendType[blend]] as IBlendOptions;\n }\n public getDefaultStyle(): unknown {\n return {};\n }\n public getUninforms(): IModelUniform {\n throw new Error('Method not implemented.');\n }\n\n public getAnimateUniforms(): IModelUniform {\n return {};\n }\n\n public needUpdate(): boolean {\n return false;\n }\n public buildModels(): IModel[] {\n throw new Error('Method not implemented.');\n }\n public initModels(): IModel[] {\n throw new Error('Method not implemented.');\n }\n public clearModels() {\n return;\n }\n public getAttribute(): {\n attributes: {\n [attributeName: string]: IAttribute;\n };\n elements: IElements;\n } {\n throw new Error('Method not implemented.');\n }\n public render() {\n throw new Error('Method not implemented.');\n }\n protected registerBuiltinAttributes() {\n throw new Error('Method not implemented.');\n }\n protected animateOption2Array(option: IAnimateOption): number[] {\n return [\n option.enable ? 0 : 1.0,\n option.duration || 4.0,\n option.interval || 0.2,\n option.trailLength || 0.1,\n ];\n }\n protected startModelAnimate() {\n const { animateOption } = this.layer.getLayerConfig() as ILayerConfig;\n if (animateOption.enable) {\n this.layer.setAnimateStartTime();\n }\n }\n}\n"],"file":"BaseModel.js"}
|
|
@@ -126,11 +126,6 @@ var HeatMapModel = (_dec = (0, _inversify.injectable)(), _dec(_class = function
|
|
|
126
126
|
this.intensityModel = this.buildHeatMapIntensity();
|
|
127
127
|
this.colorModel = shapeType === 'heatmap' ? this.buildHeatmapColor() : this.build3dHeatMap();
|
|
128
128
|
|
|
129
|
-
var _ref = this.layer.getLayerConfig(),
|
|
130
|
-
rampColors = _ref.rampColors;
|
|
131
|
-
|
|
132
|
-
var imageData = (0, _l7Utils.generateColorRamp)(rampColors);
|
|
133
|
-
|
|
134
129
|
var _getViewportSize = getViewportSize(),
|
|
135
130
|
width = _getViewportSize.width,
|
|
136
131
|
height = _getViewportSize.height;
|
|
@@ -267,12 +262,12 @@ var HeatMapModel = (_dec = (0, _inversify.injectable)(), _dec(_class = function
|
|
|
267
262
|
}, {
|
|
268
263
|
key: "drawIntensityMode",
|
|
269
264
|
value: function drawIntensityMode() {
|
|
270
|
-
var
|
|
271
|
-
opacity =
|
|
272
|
-
|
|
273
|
-
intensity =
|
|
274
|
-
|
|
275
|
-
radius =
|
|
265
|
+
var _ref = this.layer.getLayerConfig(),
|
|
266
|
+
opacity = _ref.opacity,
|
|
267
|
+
_ref$intensity = _ref.intensity,
|
|
268
|
+
intensity = _ref$intensity === void 0 ? 10 : _ref$intensity,
|
|
269
|
+
_ref$radius = _ref.radius,
|
|
270
|
+
radius = _ref$radius === void 0 ? 5 : _ref$radius;
|
|
276
271
|
|
|
277
272
|
this.intensityModel.draw({
|
|
278
273
|
uniforms: {
|
|
@@ -285,8 +280,8 @@ var HeatMapModel = (_dec = (0, _inversify.injectable)(), _dec(_class = function
|
|
|
285
280
|
}, {
|
|
286
281
|
key: "drawColorMode",
|
|
287
282
|
value: function drawColorMode() {
|
|
288
|
-
var
|
|
289
|
-
opacity =
|
|
283
|
+
var _ref2 = this.layer.getLayerConfig(),
|
|
284
|
+
opacity = _ref2.opacity;
|
|
290
285
|
|
|
291
286
|
this.colorModel.draw({
|
|
292
287
|
uniforms: {
|
|
@@ -299,8 +294,8 @@ var HeatMapModel = (_dec = (0, _inversify.injectable)(), _dec(_class = function
|
|
|
299
294
|
}, {
|
|
300
295
|
key: "draw3DHeatMap",
|
|
301
296
|
value: function draw3DHeatMap() {
|
|
302
|
-
var
|
|
303
|
-
opacity =
|
|
297
|
+
var _ref3 = this.layer.getLayerConfig(),
|
|
298
|
+
opacity = _ref3.opacity;
|
|
304
299
|
|
|
305
300
|
var invert = _glMatrix.mat4.create();
|
|
306
301
|
|
|
@@ -395,8 +390,8 @@ var HeatMapModel = (_dec = (0, _inversify.injectable)(), _dec(_class = function
|
|
|
395
390
|
this.texture.destroy();
|
|
396
391
|
}
|
|
397
392
|
|
|
398
|
-
var
|
|
399
|
-
rampColors =
|
|
393
|
+
var _ref4 = this.layer.getLayerConfig(),
|
|
394
|
+
rampColors = _ref4.rampColors;
|
|
400
395
|
|
|
401
396
|
var imageData = (0, _l7Utils.generateColorRamp)(rampColors);
|
|
402
397
|
this.colorTexture = createTexture2D({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/heatmap/models/heatmap.ts"],"names":["HeatMapModel","rendererService","clear","useFramebuffer","heatmapFramerBuffer","color","depth","stencil","framebuffer","drawIntensityMode","layer","styleNeedUpdate","updateColorTexture","shapeType","drawColorMode","draw3DHeatMap","Error","createFramebuffer","getViewportSize","createTexture2D","shapeAttr","styleAttributeService","getLayerStyleAttribute","scale","field","intensityModel","buildHeatMapIntensity","colorModel","buildHeatmapColor","build3dHeatMap","getLayerConfig","rampColors","imageData","width","height","Math","floor","wrapS","gl","CLAMP_TO_EDGE","wrapT","min","LINEAR","mag","initModels","registerStyleAttribute","name","type","AttributeType","Attribute","descriptor","buffer","usage","DYNAMIC_DRAW","data","FLOAT","size","update","feature","featureIdx","vertex","attributeIdx","buildLayerModel","moduleName","vertexShader","heatmapVert","fragmentShader","heatmapFrag","triangulation","HeatmapTriangulation","enable","blend","func","srcRGB","ONE","srcAlpha","dstRGB","dstAlpha","shaderModuleService","registerModule","vs","heatmapColorVert","fs","heatmapColorFrag","getModule","uniforms","createAttribute","createElements","createBuffer","createModel","attributes","a_Position","a_Uv","getBlend","count","elements","UNSIGNED_INT","opacity","intensity","radius","draw","u_opacity","u_radius","u_intensity","u_colorTexture","colorTexture","u_texture","invert","mat4","create","cameraService","getViewProjectionMatrixUncentered","u_ViewProjectionMatrixUncentered","u_InverseViewProjectionMatrix","heatmap3DVert","heatmap3DFrag","vertices","uvs","primitive","TRIANGLES","SRC_ALPHA","ONE_MINUS_SRC_ALPHA","indices","length","texture","destroy","Uint8Array","NEAREST","flipY","BaseModel"],"mappings":"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","sourcesContent":["import {\n AttributeType,\n gl,\n IEncodeFeature,\n IFramebuffer,\n IModel,\n IModelUniform,\n ITexture2D,\n} from '@antv/l7-core';\nimport { generateColorRamp, IColorRamp } from '@antv/l7-utils';\nimport { mat4 } from 'gl-matrix';\nimport { inject, injectable } from 'inversify';\nimport 'reflect-metadata';\nimport BaseModel from '../../core/BaseModel';\nimport { HeatmapTriangulation } from '../../core/triangulation';\nimport heatmap3DFrag from '../shaders/heatmap_3d_frag.glsl';\nimport heatmap3DVert from '../shaders/heatmap_3d_vert.glsl';\nimport heatmapColorFrag from '../shaders/heatmap_frag.glsl';\nimport heatmapFrag from '../shaders/heatmap_framebuffer_frag.glsl';\nimport heatmapVert from '../shaders/heatmap_framebuffer_vert.glsl';\nimport heatmapColorVert from '../shaders/heatmap_vert.glsl';\nimport { heatMap3DTriangulation } from '../triangulation';\ninterface IHeatMapLayerStyleOptions {\n opacity: number;\n intensity: number;\n radius: number;\n angle: number;\n rampColors: IColorRamp;\n}\n@injectable()\nexport default class HeatMapModel extends BaseModel {\n protected texture: ITexture2D;\n protected colorTexture: ITexture2D;\n protected heatmapFramerBuffer: IFramebuffer;\n private intensityModel: IModel;\n private colorModel: IModel;\n private shapeType: string;\n\n public render() {\n const { clear, useFramebuffer } = this.rendererService;\n useFramebuffer(this.heatmapFramerBuffer, () => {\n clear({\n color: [0, 0, 0, 0],\n depth: 1,\n stencil: 0,\n framebuffer: this.heatmapFramerBuffer,\n });\n this.drawIntensityMode();\n });\n if (this.layer.styleNeedUpdate) {\n this.updateColorTexture();\n }\n this.shapeType === 'heatmap' ? this.drawColorMode() : this.draw3DHeatMap();\n }\n\n public getUninforms(): IModelUniform {\n throw new Error('Method not implemented.');\n }\n\n public initModels(): IModel[] {\n const {\n createFramebuffer,\n clear,\n getViewportSize,\n createTexture2D,\n useFramebuffer,\n } = this.rendererService;\n const shapeAttr = this.styleAttributeService.getLayerStyleAttribute(\n 'shape',\n );\n const shapeType = shapeAttr?.scale?.field || 'heatmap';\n this.shapeType = shapeType as string;\n // 生成热力图密度图\n this.intensityModel = this.buildHeatMapIntensity();\n // 渲染到屏幕\n this.colorModel =\n shapeType === 'heatmap'\n ? this.buildHeatmapColor() // 2D\n : this.build3dHeatMap(); // 3D\n\n const {\n rampColors,\n } = this.layer.getLayerConfig() as IHeatMapLayerStyleOptions;\n const imageData = generateColorRamp(rampColors as IColorRamp);\n const { width, height } = getViewportSize();\n\n // 初始化密度图纹理\n this.heatmapFramerBuffer = createFramebuffer({\n color: createTexture2D({\n width: Math.floor(width / 4),\n height: Math.floor(height / 4),\n wrapS: gl.CLAMP_TO_EDGE,\n wrapT: gl.CLAMP_TO_EDGE,\n min: gl.LINEAR,\n mag: gl.LINEAR,\n }),\n depth: false,\n });\n\n this.updateColorTexture();\n\n return [this.intensityModel, this.colorModel];\n }\n\n public buildModels(): IModel[] {\n return this.initModels();\n }\n\n protected registerBuiltinAttributes() {\n this.styleAttributeService.registerStyleAttribute({\n name: 'dir',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_Dir',\n buffer: {\n // give the WebGL driver a hint that this buffer may change\n usage: gl.DYNAMIC_DRAW,\n data: [],\n type: gl.FLOAT,\n },\n size: 2,\n update: (\n feature: IEncodeFeature,\n featureIdx: number,\n vertex: number[],\n attributeIdx: number,\n ) => {\n return [vertex[3], vertex[4]];\n },\n },\n });\n\n // point layer size;\n this.styleAttributeService.registerStyleAttribute({\n name: 'size',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_Size',\n buffer: {\n // give the WebGL driver a hint that this buffer may change\n usage: gl.DYNAMIC_DRAW,\n data: [],\n type: gl.FLOAT,\n },\n size: 1,\n update: (\n feature: IEncodeFeature,\n featureIdx: number,\n vertex: number[],\n attributeIdx: number,\n ) => {\n const { size = 1 } = feature;\n return [size as number];\n },\n },\n });\n }\n private buildHeatMapIntensity(): IModel {\n return this.layer.buildLayerModel({\n moduleName: 'heatmapintensity',\n vertexShader: heatmapVert,\n fragmentShader: heatmapFrag,\n triangulation: HeatmapTriangulation,\n depth: {\n enable: false,\n },\n blend: {\n enable: true,\n func: {\n srcRGB: gl.ONE,\n srcAlpha: 1,\n dstRGB: gl.ONE,\n dstAlpha: 1,\n },\n },\n });\n }\n\n private buildHeatmapColor(): IModel {\n this.shaderModuleService.registerModule('heatmapColor', {\n vs: heatmapColorVert,\n fs: heatmapColorFrag,\n });\n\n const { vs, fs, uniforms } = this.shaderModuleService.getModule(\n 'heatmapColor',\n );\n const {\n createAttribute,\n createElements,\n createBuffer,\n createModel,\n } = this.rendererService;\n return createModel({\n vs,\n fs,\n attributes: {\n a_Position: createAttribute({\n buffer: createBuffer({\n data: [-1, 1, 0, 1, 1, 0, -1, -1, 0, 1, -1, 0],\n type: gl.FLOAT,\n }),\n size: 3,\n }),\n a_Uv: createAttribute({\n buffer: createBuffer({\n data: [0, 1, 1, 1, 0, 0, 1, 0],\n type: gl.FLOAT,\n }),\n size: 2,\n }),\n },\n uniforms: {\n ...uniforms,\n },\n depth: {\n enable: false,\n },\n blend: this.getBlend(),\n count: 6,\n elements: createElements({\n data: [0, 2, 1, 2, 3, 1],\n type: gl.UNSIGNED_INT,\n count: 6,\n }),\n });\n }\n\n private drawIntensityMode() {\n const {\n opacity,\n intensity = 10,\n radius = 5,\n } = this.layer.getLayerConfig() as IHeatMapLayerStyleOptions;\n this.intensityModel.draw({\n uniforms: {\n u_opacity: opacity || 1.0,\n u_radius: radius,\n u_intensity: intensity,\n },\n });\n }\n\n private drawColorMode() {\n const {\n opacity,\n } = this.layer.getLayerConfig() as IHeatMapLayerStyleOptions;\n this.colorModel.draw({\n uniforms: {\n u_opacity: opacity || 1.0,\n u_colorTexture: this.colorTexture,\n u_texture: this.heatmapFramerBuffer,\n },\n });\n }\n\n private draw3DHeatMap() {\n const {\n opacity,\n } = this.layer.getLayerConfig() as IHeatMapLayerStyleOptions;\n\n // const invert = mat4.invert(\n // mat4.create(),\n // mat4.fromValues(\n // // @ts-ignore\n // ...this.cameraService.getViewProjectionMatrixUncentered(),\n // ),\n // ) as mat4;\n const invert = mat4.create();\n mat4.invert(\n invert,\n this.cameraService.getViewProjectionMatrixUncentered() as mat4,\n );\n\n this.colorModel.draw({\n uniforms: {\n u_opacity: opacity || 1.0,\n u_colorTexture: this.colorTexture,\n u_texture: this.heatmapFramerBuffer,\n u_ViewProjectionMatrixUncentered: this.cameraService.getViewProjectionMatrixUncentered(),\n u_InverseViewProjectionMatrix: [...invert],\n },\n });\n }\n private build3dHeatMap() {\n const { getViewportSize } = this.rendererService;\n const { width, height } = getViewportSize();\n const triangulation = heatMap3DTriangulation(width / 4.0, height / 4.0);\n this.shaderModuleService.registerModule('heatmap3dColor', {\n vs: heatmap3DVert,\n fs: heatmap3DFrag,\n });\n\n const { vs, fs, uniforms } = this.shaderModuleService.getModule(\n 'heatmap3dColor',\n );\n const {\n createAttribute,\n createElements,\n createBuffer,\n createModel,\n } = this.rendererService;\n return createModel({\n vs,\n fs,\n attributes: {\n a_Position: createAttribute({\n buffer: createBuffer({\n data: triangulation.vertices,\n type: gl.FLOAT,\n }),\n size: 3,\n }),\n a_Uv: createAttribute({\n buffer: createBuffer({\n data: triangulation.uvs,\n type: gl.FLOAT,\n }),\n size: 2,\n }),\n },\n primitive: gl.TRIANGLES,\n uniforms: {\n ...uniforms,\n },\n depth: {\n enable: true,\n },\n blend: {\n enable: true,\n func: {\n srcRGB: gl.SRC_ALPHA,\n srcAlpha: 1,\n dstRGB: gl.ONE_MINUS_SRC_ALPHA,\n dstAlpha: 1,\n },\n },\n elements: createElements({\n data: triangulation.indices,\n type: gl.UNSIGNED_INT,\n count: triangulation.indices.length,\n }),\n });\n }\n private updateStyle() {\n this.updateColorTexture();\n }\n\n private updateColorTexture() {\n const { createTexture2D } = this.rendererService;\n if (this.texture) {\n this.texture.destroy();\n }\n\n const {\n rampColors,\n } = this.layer.getLayerConfig() as IHeatMapLayerStyleOptions;\n const imageData = generateColorRamp(rampColors as IColorRamp);\n this.colorTexture = createTexture2D({\n data: new Uint8Array(imageData.data),\n width: imageData.width,\n height: imageData.height,\n wrapS: gl.CLAMP_TO_EDGE,\n wrapT: gl.CLAMP_TO_EDGE,\n min: gl.NEAREST,\n mag: gl.NEAREST,\n flipY: false,\n });\n }\n}\n"],"file":"heatmap.js"}
|
|
1
|
+
{"version":3,"sources":["../../../src/heatmap/models/heatmap.ts"],"names":["HeatMapModel","rendererService","clear","useFramebuffer","heatmapFramerBuffer","color","depth","stencil","framebuffer","drawIntensityMode","layer","styleNeedUpdate","updateColorTexture","shapeType","drawColorMode","draw3DHeatMap","Error","createFramebuffer","getViewportSize","createTexture2D","shapeAttr","styleAttributeService","getLayerStyleAttribute","scale","field","intensityModel","buildHeatMapIntensity","colorModel","buildHeatmapColor","build3dHeatMap","width","height","Math","floor","wrapS","gl","CLAMP_TO_EDGE","wrapT","min","LINEAR","mag","initModels","registerStyleAttribute","name","type","AttributeType","Attribute","descriptor","buffer","usage","DYNAMIC_DRAW","data","FLOAT","size","update","feature","featureIdx","vertex","attributeIdx","buildLayerModel","moduleName","vertexShader","heatmapVert","fragmentShader","heatmapFrag","triangulation","HeatmapTriangulation","enable","blend","func","srcRGB","ONE","srcAlpha","dstRGB","dstAlpha","shaderModuleService","registerModule","vs","heatmapColorVert","fs","heatmapColorFrag","getModule","uniforms","createAttribute","createElements","createBuffer","createModel","attributes","a_Position","a_Uv","getBlend","count","elements","UNSIGNED_INT","getLayerConfig","opacity","intensity","radius","draw","u_opacity","u_radius","u_intensity","u_colorTexture","colorTexture","u_texture","invert","mat4","create","cameraService","getViewProjectionMatrixUncentered","u_ViewProjectionMatrixUncentered","u_InverseViewProjectionMatrix","heatmap3DVert","heatmap3DFrag","vertices","uvs","primitive","TRIANGLES","SRC_ALPHA","ONE_MINUS_SRC_ALPHA","indices","length","texture","destroy","rampColors","imageData","Uint8Array","NEAREST","flipY","BaseModel"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AASA;;AACA;;AACA;;AACA;;AACA;;AACA;;AAOA;;;;;;;;;;;;;;;;;;IASqBA,Y,WADpB,4B;;;;;;;;;;;;;;;;;;;;;;;;;;WASC,kBAAgB;AAAA;;AACd,kCAAkC,KAAKC,eAAvC;AAAA,UAAQC,KAAR,yBAAQA,KAAR;AAAA,UAAeC,cAAf,yBAAeA,cAAf;AACAA,MAAAA,cAAc,CAAC,KAAKC,mBAAN,EAA2B,YAAM;AAC7CF,QAAAA,KAAK,CAAC;AACJG,UAAAA,KAAK,EAAE,CAAC,CAAD,EAAI,CAAJ,EAAO,CAAP,EAAU,CAAV,CADH;AAEJC,UAAAA,KAAK,EAAE,CAFH;AAGJC,UAAAA,OAAO,EAAE,CAHL;AAIJC,UAAAA,WAAW,EAAE,MAAI,CAACJ;AAJd,SAAD,CAAL;;AAMA,QAAA,MAAI,CAACK,iBAAL;AACD,OARa,CAAd;;AASA,UAAI,KAAKC,KAAL,CAAWC,eAAf,EAAgC;AAC9B,aAAKC,kBAAL;AACD;;AACD,WAAKC,SAAL,KAAmB,SAAnB,GAA+B,KAAKC,aAAL,EAA/B,GAAsD,KAAKC,aAAL,EAAtD;AACD;;;WAED,wBAAqC;AACnC,YAAM,IAAIC,KAAJ,CAAU,yBAAV,CAAN;AACD;;;WAED,sBAA8B;AAAA;;AAC5B,mCAMI,KAAKf,eANT;AAAA,UACEgB,iBADF,0BACEA,iBADF;AAAA,UAEEf,KAFF,0BAEEA,KAFF;AAAA,UAGEgB,eAHF,0BAGEA,eAHF;AAAA,UAIEC,eAJF,0BAIEA,eAJF;AAAA,UAKEhB,cALF,0BAKEA,cALF;AAOA,UAAMiB,SAAS,GAAG,KAAKC,qBAAL,CAA2BC,sBAA3B,CAChB,OADgB,CAAlB;AAGA,UAAMT,SAAS,GAAG,CAAAO,SAAS,SAAT,IAAAA,SAAS,WAAT,gCAAAA,SAAS,CAAEG,KAAX,sEAAkBC,KAAlB,KAA2B,SAA7C;AACA,WAAKX,SAAL,GAAiBA,SAAjB;AAEA,WAAKY,cAAL,GAAsB,KAAKC,qBAAL,EAAtB;AAEA,WAAKC,UAAL,GACEd,SAAS,KAAK,SAAd,GACI,KAAKe,iBAAL,EADJ,GAEI,KAAKC,cAAL,EAHN;;AAKA,6BAA0BX,eAAe,EAAzC;AAAA,UAAQY,KAAR,oBAAQA,KAAR;AAAA,UAAeC,MAAf,oBAAeA,MAAf;;AAGA,WAAK3B,mBAAL,GAA2Ba,iBAAiB,CAAC;AAC3CZ,QAAAA,KAAK,EAAEc,eAAe,CAAC;AACrBW,UAAAA,KAAK,EAAEE,IAAI,CAACC,KAAL,CAAWH,KAAK,GAAG,CAAnB,CADc;AAErBC,UAAAA,MAAM,EAAEC,IAAI,CAACC,KAAL,CAAWF,MAAM,GAAG,CAApB,CAFa;AAGrBG,UAAAA,KAAK,EAAEC,WAAGC,aAHW;AAIrBC,UAAAA,KAAK,EAAEF,WAAGC,aAJW;AAKrBE,UAAAA,GAAG,EAAEH,WAAGI,MALa;AAMrBC,UAAAA,GAAG,EAAEL,WAAGI;AANa,SAAD,CADqB;AAS3CjC,QAAAA,KAAK,EAAE;AAToC,OAAD,CAA5C;AAYA,WAAKM,kBAAL;AAEA,aAAO,CAAC,KAAKa,cAAN,EAAsB,KAAKE,UAA3B,CAAP;AACD;;;WAED,uBAA+B;AAC7B,aAAO,KAAKc,UAAL,EAAP;AACD;;;WAED,qCAAsC;AACpC,WAAKpB,qBAAL,CAA2BqB,sBAA3B,CAAkD;AAChDC,QAAAA,IAAI,EAAE,KAD0C;AAEhDC,QAAAA,IAAI,EAAEC,sBAAcC,SAF4B;AAGhDC,QAAAA,UAAU,EAAE;AACVJ,UAAAA,IAAI,EAAE,OADI;AAEVK,UAAAA,MAAM,EAAE;AAENC,YAAAA,KAAK,EAAEd,WAAGe,YAFJ;AAGNC,YAAAA,IAAI,EAAE,EAHA;AAINP,YAAAA,IAAI,EAAET,WAAGiB;AAJH,WAFE;AAQVC,UAAAA,IAAI,EAAE,CARI;AASVC,UAAAA,MAAM,EAAE,gBACNC,OADM,EAENC,UAFM,EAGNC,MAHM,EAINC,YAJM,EAKH;AACH,mBAAO,CAACD,MAAM,CAAC,CAAD,CAAP,EAAYA,MAAM,CAAC,CAAD,CAAlB,CAAP;AACD;AAhBS;AAHoC,OAAlD;AAwBA,WAAKpC,qBAAL,CAA2BqB,sBAA3B,CAAkD;AAChDC,QAAAA,IAAI,EAAE,MAD0C;AAEhDC,QAAAA,IAAI,EAAEC,sBAAcC,SAF4B;AAGhDC,QAAAA,UAAU,EAAE;AACVJ,UAAAA,IAAI,EAAE,QADI;AAEVK,UAAAA,MAAM,EAAE;AAENC,YAAAA,KAAK,EAAEd,WAAGe,YAFJ;AAGNC,YAAAA,IAAI,EAAE,EAHA;AAINP,YAAAA,IAAI,EAAET,WAAGiB;AAJH,WAFE;AAQVC,UAAAA,IAAI,EAAE,CARI;AASVC,UAAAA,MAAM,EAAE,gBACNC,OADM,EAENC,UAFM,EAGNC,MAHM,EAINC,YAJM,EAKH;AACH,gCAAqBH,OAArB,CAAQF,IAAR;AAAA,gBAAQA,IAAR,8BAAe,CAAf;AACA,mBAAO,CAACA,IAAD,CAAP;AACD;AAjBS;AAHoC,OAAlD;AAuBD;;;WACD,iCAAwC;AACtC,aAAO,KAAK3C,KAAL,CAAWiD,eAAX,CAA2B;AAChCC,QAAAA,UAAU,EAAE,kBADoB;AAEhCC,QAAAA,YAAY,EAAEC,WAFkB;AAGhCC,QAAAA,cAAc,EAAEC,WAHgB;AAIhCC,QAAAA,aAAa,EAAEC,mCAJiB;AAKhC5D,QAAAA,KAAK,EAAE;AACL6D,UAAAA,MAAM,EAAE;AADH,SALyB;AAQhCC,QAAAA,KAAK,EAAE;AACLD,UAAAA,MAAM,EAAE,IADH;AAELE,UAAAA,IAAI,EAAE;AACJC,YAAAA,MAAM,EAAEnC,WAAGoC,GADP;AAEJC,YAAAA,QAAQ,EAAE,CAFN;AAGJC,YAAAA,MAAM,EAAEtC,WAAGoC,GAHP;AAIJG,YAAAA,QAAQ,EAAE;AAJN;AAFD;AARyB,OAA3B,CAAP;AAkBD;;;WAED,6BAAoC;AAClC,WAAKC,mBAAL,CAAyBC,cAAzB,CAAwC,cAAxC,EAAwD;AACtDC,QAAAA,EAAE,EAAEC,gBADkD;AAEtDC,QAAAA,EAAE,EAAEC;AAFkD,OAAxD;;AAKA,kCAA6B,KAAKL,mBAAL,CAAyBM,SAAzB,CAC3B,cAD2B,CAA7B;AAAA,UAAQJ,EAAR,yBAAQA,EAAR;AAAA,UAAYE,EAAZ,yBAAYA,EAAZ;AAAA,UAAgBG,QAAhB,yBAAgBA,QAAhB;;AAGA,mCAKI,KAAKjF,eALT;AAAA,UACEkF,eADF,0BACEA,eADF;AAAA,UAEEC,cAFF,0BAEEA,cAFF;AAAA,UAGEC,YAHF,0BAGEA,YAHF;AAAA,UAIEC,WAJF,0BAIEA,WAJF;AAMA,aAAOA,WAAW,CAAC;AACjBT,QAAAA,EAAE,EAAFA,EADiB;AAEjBE,QAAAA,EAAE,EAAFA,EAFiB;AAGjBQ,QAAAA,UAAU,EAAE;AACVC,UAAAA,UAAU,EAAEL,eAAe,CAAC;AAC1BnC,YAAAA,MAAM,EAAEqC,YAAY,CAAC;AACnBlC,cAAAA,IAAI,EAAE,CAAC,CAAC,CAAF,EAAK,CAAL,EAAQ,CAAR,EAAW,CAAX,EAAc,CAAd,EAAiB,CAAjB,EAAoB,CAAC,CAArB,EAAwB,CAAC,CAAzB,EAA4B,CAA5B,EAA+B,CAA/B,EAAkC,CAAC,CAAnC,EAAsC,CAAtC,CADa;AAEnBP,cAAAA,IAAI,EAAET,WAAGiB;AAFU,aAAD,CADM;AAK1BC,YAAAA,IAAI,EAAE;AALoB,WAAD,CADjB;AAQVoC,UAAAA,IAAI,EAAEN,eAAe,CAAC;AACpBnC,YAAAA,MAAM,EAAEqC,YAAY,CAAC;AACnBlC,cAAAA,IAAI,EAAE,CAAC,CAAD,EAAI,CAAJ,EAAO,CAAP,EAAU,CAAV,EAAa,CAAb,EAAgB,CAAhB,EAAmB,CAAnB,EAAsB,CAAtB,CADa;AAEnBP,cAAAA,IAAI,EAAET,WAAGiB;AAFU,aAAD,CADA;AAKpBC,YAAAA,IAAI,EAAE;AALc,WAAD;AARX,SAHK;AAmBjB6B,QAAAA,QAAQ,oBACHA,QADG,CAnBS;AAsBjB5E,QAAAA,KAAK,EAAE;AACL6D,UAAAA,MAAM,EAAE;AADH,SAtBU;AAyBjBC,QAAAA,KAAK,EAAE,KAAKsB,QAAL,EAzBU;AA0BjBC,QAAAA,KAAK,EAAE,CA1BU;AA2BjBC,QAAAA,QAAQ,EAAER,cAAc,CAAC;AACvBjC,UAAAA,IAAI,EAAE,CAAC,CAAD,EAAI,CAAJ,EAAO,CAAP,EAAU,CAAV,EAAa,CAAb,EAAgB,CAAhB,CADiB;AAEvBP,UAAAA,IAAI,EAAET,WAAG0D,YAFc;AAGvBF,UAAAA,KAAK,EAAE;AAHgB,SAAD;AA3BP,OAAD,CAAlB;AAiCD;;;WAED,6BAA4B;AAC1B,iBAII,KAAKjF,KAAL,CAAWoF,cAAX,EAJJ;AAAA,UACEC,OADF,QACEA,OADF;AAAA,gCAEEC,SAFF;AAAA,UAEEA,SAFF,+BAEc,EAFd;AAAA,6BAGEC,MAHF;AAAA,UAGEA,MAHF,4BAGW,CAHX;;AAKA,WAAKxE,cAAL,CAAoByE,IAApB,CAAyB;AACvBhB,QAAAA,QAAQ,EAAE;AACRiB,UAAAA,SAAS,EAAEJ,OAAO,IAAI,GADd;AAERK,UAAAA,QAAQ,EAAEH,MAFF;AAGRI,UAAAA,WAAW,EAAEL;AAHL;AADa,OAAzB;AAOD;;;WAED,yBAAwB;AACtB,kBAEI,KAAKtF,KAAL,CAAWoF,cAAX,EAFJ;AAAA,UACEC,OADF,SACEA,OADF;;AAGA,WAAKpE,UAAL,CAAgBuE,IAAhB,CAAqB;AACnBhB,QAAAA,QAAQ,EAAE;AACRiB,UAAAA,SAAS,EAAEJ,OAAO,IAAI,GADd;AAERO,UAAAA,cAAc,EAAE,KAAKC,YAFb;AAGRC,UAAAA,SAAS,EAAE,KAAKpG;AAHR;AADS,OAArB;AAOD;;;WAED,yBAAwB;AACtB,kBAEI,KAAKM,KAAL,CAAWoF,cAAX,EAFJ;AAAA,UACEC,OADF,SACEA,OADF;;AAWA,UAAMU,MAAM,GAAGC,eAAKC,MAAL,EAAf;;AACAD,qBAAKD,MAAL,CACEA,MADF,EAEE,KAAKG,aAAL,CAAmBC,iCAAnB,EAFF;;AAKA,WAAKlF,UAAL,CAAgBuE,IAAhB,CAAqB;AACnBhB,QAAAA,QAAQ,EAAE;AACRiB,UAAAA,SAAS,EAAEJ,OAAO,IAAI,GADd;AAERO,UAAAA,cAAc,EAAE,KAAKC,YAFb;AAGRC,UAAAA,SAAS,EAAE,KAAKpG,mBAHR;AAIR0G,UAAAA,gCAAgC,EAAE,KAAKF,aAAL,CAAmBC,iCAAnB,EAJ1B;AAKRE,UAAAA,6BAA6B,mCAAMN,MAAN;AALrB;AADS,OAArB;AASD;;;WACD,0BAAyB;AACvB,UAAQvF,eAAR,GAA4B,KAAKjB,eAAjC,CAAQiB,eAAR;;AACA,8BAA0BA,eAAe,EAAzC;AAAA,UAAQY,KAAR,qBAAQA,KAAR;AAAA,UAAeC,MAAf,qBAAeA,MAAf;;AACA,UAAMkC,aAAa,GAAG,4CAAuBnC,KAAK,GAAG,GAA/B,EAAoCC,MAAM,GAAG,GAA7C,CAAtB;AACA,WAAK4C,mBAAL,CAAyBC,cAAzB,CAAwC,gBAAxC,EAA0D;AACxDC,QAAAA,EAAE,EAAEmC,aADoD;AAExDjC,QAAAA,EAAE,EAAEkC;AAFoD,OAA1D;;AAKA,mCAA6B,KAAKtC,mBAAL,CAAyBM,SAAzB,CAC3B,gBAD2B,CAA7B;AAAA,UAAQJ,EAAR,0BAAQA,EAAR;AAAA,UAAYE,EAAZ,0BAAYA,EAAZ;AAAA,UAAgBG,QAAhB,0BAAgBA,QAAhB;;AAGA,mCAKI,KAAKjF,eALT;AAAA,UACEkF,eADF,0BACEA,eADF;AAAA,UAEEC,cAFF,0BAEEA,cAFF;AAAA,UAGEC,YAHF,0BAGEA,YAHF;AAAA,UAIEC,WAJF,0BAIEA,WAJF;AAMA,aAAOA,WAAW,CAAC;AACjBT,QAAAA,EAAE,EAAFA,EADiB;AAEjBE,QAAAA,EAAE,EAAFA,EAFiB;AAGjBQ,QAAAA,UAAU,EAAE;AACVC,UAAAA,UAAU,EAAEL,eAAe,CAAC;AAC1BnC,YAAAA,MAAM,EAAEqC,YAAY,CAAC;AACnBlC,cAAAA,IAAI,EAAEc,aAAa,CAACiD,QADD;AAEnBtE,cAAAA,IAAI,EAAET,WAAGiB;AAFU,aAAD,CADM;AAK1BC,YAAAA,IAAI,EAAE;AALoB,WAAD,CADjB;AAQVoC,UAAAA,IAAI,EAAEN,eAAe,CAAC;AACpBnC,YAAAA,MAAM,EAAEqC,YAAY,CAAC;AACnBlC,cAAAA,IAAI,EAAEc,aAAa,CAACkD,GADD;AAEnBvE,cAAAA,IAAI,EAAET,WAAGiB;AAFU,aAAD,CADA;AAKpBC,YAAAA,IAAI,EAAE;AALc,WAAD;AARX,SAHK;AAmBjB+D,QAAAA,SAAS,EAAEjF,WAAGkF,SAnBG;AAoBjBnC,QAAAA,QAAQ,oBACHA,QADG,CApBS;AAuBjB5E,QAAAA,KAAK,EAAE;AACL6D,UAAAA,MAAM,EAAE;AADH,SAvBU;AA0BjBC,QAAAA,KAAK,EAAE;AACLD,UAAAA,MAAM,EAAE,IADH;AAELE,UAAAA,IAAI,EAAE;AACJC,YAAAA,MAAM,EAAEnC,WAAGmF,SADP;AAEJ9C,YAAAA,QAAQ,EAAE,CAFN;AAGJC,YAAAA,MAAM,EAAEtC,WAAGoF,mBAHP;AAIJ7C,YAAAA,QAAQ,EAAE;AAJN;AAFD,SA1BU;AAmCjBkB,QAAAA,QAAQ,EAAER,cAAc,CAAC;AACvBjC,UAAAA,IAAI,EAAEc,aAAa,CAACuD,OADG;AAEvB5E,UAAAA,IAAI,EAAET,WAAG0D,YAFc;AAGvBF,UAAAA,KAAK,EAAE1B,aAAa,CAACuD,OAAd,CAAsBC;AAHN,SAAD;AAnCP,OAAD,CAAlB;AAyCD;;;WACD,uBAAsB;AACpB,WAAK7G,kBAAL;AACD;;;WAED,8BAA6B;AAC3B,UAAQO,eAAR,GAA4B,KAAKlB,eAAjC,CAAQkB,eAAR;;AACA,UAAI,KAAKuG,OAAT,EAAkB;AAChB,aAAKA,OAAL,CAAaC,OAAb;AACD;;AAED,kBAEI,KAAKjH,KAAL,CAAWoF,cAAX,EAFJ;AAAA,UACE8B,UADF,SACEA,UADF;;AAGA,UAAMC,SAAS,GAAG,gCAAkBD,UAAlB,CAAlB;AACA,WAAKrB,YAAL,GAAoBpF,eAAe,CAAC;AAClCgC,QAAAA,IAAI,EAAE,IAAI2E,UAAJ,CAAeD,SAAS,CAAC1E,IAAzB,CAD4B;AAElCrB,QAAAA,KAAK,EAAE+F,SAAS,CAAC/F,KAFiB;AAGlCC,QAAAA,MAAM,EAAE8F,SAAS,CAAC9F,MAHgB;AAIlCG,QAAAA,KAAK,EAAEC,WAAGC,aAJwB;AAKlCC,QAAAA,KAAK,EAAEF,WAAGC,aALwB;AAMlCE,QAAAA,GAAG,EAAEH,WAAG4F,OAN0B;AAOlCvF,QAAAA,GAAG,EAAEL,WAAG4F,OAP0B;AAQlCC,QAAAA,KAAK,EAAE;AAR2B,OAAD,CAAnC;AAUD;;;EA9UuCC,mB","sourcesContent":["import {\n AttributeType,\n gl,\n IEncodeFeature,\n IFramebuffer,\n IModel,\n IModelUniform,\n ITexture2D,\n} from '@antv/l7-core';\nimport { generateColorRamp, IColorRamp } from '@antv/l7-utils';\nimport { mat4 } from 'gl-matrix';\nimport { inject, injectable } from 'inversify';\nimport 'reflect-metadata';\nimport BaseModel from '../../core/BaseModel';\nimport { HeatmapTriangulation } from '../../core/triangulation';\nimport heatmap3DFrag from '../shaders/heatmap_3d_frag.glsl';\nimport heatmap3DVert from '../shaders/heatmap_3d_vert.glsl';\nimport heatmapColorFrag from '../shaders/heatmap_frag.glsl';\nimport heatmapFrag from '../shaders/heatmap_framebuffer_frag.glsl';\nimport heatmapVert from '../shaders/heatmap_framebuffer_vert.glsl';\nimport heatmapColorVert from '../shaders/heatmap_vert.glsl';\nimport { heatMap3DTriangulation } from '../triangulation';\ninterface IHeatMapLayerStyleOptions {\n opacity: number;\n intensity: number;\n radius: number;\n angle: number;\n rampColors: IColorRamp;\n}\n@injectable()\nexport default class HeatMapModel extends BaseModel {\n protected texture: ITexture2D;\n protected colorTexture: ITexture2D;\n protected heatmapFramerBuffer: IFramebuffer;\n private intensityModel: IModel;\n private colorModel: IModel;\n private shapeType: string;\n\n public render() {\n const { clear, useFramebuffer } = this.rendererService;\n useFramebuffer(this.heatmapFramerBuffer, () => {\n clear({\n color: [0, 0, 0, 0],\n depth: 1,\n stencil: 0,\n framebuffer: this.heatmapFramerBuffer,\n });\n this.drawIntensityMode();\n });\n if (this.layer.styleNeedUpdate) {\n this.updateColorTexture();\n }\n this.shapeType === 'heatmap' ? this.drawColorMode() : this.draw3DHeatMap();\n }\n\n public getUninforms(): IModelUniform {\n throw new Error('Method not implemented.');\n }\n\n public initModels(): IModel[] {\n const {\n createFramebuffer,\n clear,\n getViewportSize,\n createTexture2D,\n useFramebuffer,\n } = this.rendererService;\n const shapeAttr = this.styleAttributeService.getLayerStyleAttribute(\n 'shape',\n );\n const shapeType = shapeAttr?.scale?.field || 'heatmap';\n this.shapeType = shapeType as string;\n // 生成热力图密度图\n this.intensityModel = this.buildHeatMapIntensity();\n // 渲染到屏幕\n this.colorModel =\n shapeType === 'heatmap'\n ? this.buildHeatmapColor() // 2D\n : this.build3dHeatMap(); // 3D\n\n const { width, height } = getViewportSize();\n\n // 初始化密度图纹理\n this.heatmapFramerBuffer = createFramebuffer({\n color: createTexture2D({\n width: Math.floor(width / 4),\n height: Math.floor(height / 4),\n wrapS: gl.CLAMP_TO_EDGE,\n wrapT: gl.CLAMP_TO_EDGE,\n min: gl.LINEAR,\n mag: gl.LINEAR,\n }),\n depth: false,\n });\n\n this.updateColorTexture();\n\n return [this.intensityModel, this.colorModel];\n }\n\n public buildModels(): IModel[] {\n return this.initModels();\n }\n\n protected registerBuiltinAttributes() {\n this.styleAttributeService.registerStyleAttribute({\n name: 'dir',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_Dir',\n buffer: {\n // give the WebGL driver a hint that this buffer may change\n usage: gl.DYNAMIC_DRAW,\n data: [],\n type: gl.FLOAT,\n },\n size: 2,\n update: (\n feature: IEncodeFeature,\n featureIdx: number,\n vertex: number[],\n attributeIdx: number,\n ) => {\n return [vertex[3], vertex[4]];\n },\n },\n });\n\n // point layer size;\n this.styleAttributeService.registerStyleAttribute({\n name: 'size',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_Size',\n buffer: {\n // give the WebGL driver a hint that this buffer may change\n usage: gl.DYNAMIC_DRAW,\n data: [],\n type: gl.FLOAT,\n },\n size: 1,\n update: (\n feature: IEncodeFeature,\n featureIdx: number,\n vertex: number[],\n attributeIdx: number,\n ) => {\n const { size = 1 } = feature;\n return [size as number];\n },\n },\n });\n }\n private buildHeatMapIntensity(): IModel {\n return this.layer.buildLayerModel({\n moduleName: 'heatmapintensity',\n vertexShader: heatmapVert,\n fragmentShader: heatmapFrag,\n triangulation: HeatmapTriangulation,\n depth: {\n enable: false,\n },\n blend: {\n enable: true,\n func: {\n srcRGB: gl.ONE,\n srcAlpha: 1,\n dstRGB: gl.ONE,\n dstAlpha: 1,\n },\n },\n });\n }\n\n private buildHeatmapColor(): IModel {\n this.shaderModuleService.registerModule('heatmapColor', {\n vs: heatmapColorVert,\n fs: heatmapColorFrag,\n });\n\n const { vs, fs, uniforms } = this.shaderModuleService.getModule(\n 'heatmapColor',\n );\n const {\n createAttribute,\n createElements,\n createBuffer,\n createModel,\n } = this.rendererService;\n return createModel({\n vs,\n fs,\n attributes: {\n a_Position: createAttribute({\n buffer: createBuffer({\n data: [-1, 1, 0, 1, 1, 0, -1, -1, 0, 1, -1, 0],\n type: gl.FLOAT,\n }),\n size: 3,\n }),\n a_Uv: createAttribute({\n buffer: createBuffer({\n data: [0, 1, 1, 1, 0, 0, 1, 0],\n type: gl.FLOAT,\n }),\n size: 2,\n }),\n },\n uniforms: {\n ...uniforms,\n },\n depth: {\n enable: false,\n },\n blend: this.getBlend(),\n count: 6,\n elements: createElements({\n data: [0, 2, 1, 2, 3, 1],\n type: gl.UNSIGNED_INT,\n count: 6,\n }),\n });\n }\n\n private drawIntensityMode() {\n const {\n opacity,\n intensity = 10,\n radius = 5,\n } = this.layer.getLayerConfig() as IHeatMapLayerStyleOptions;\n this.intensityModel.draw({\n uniforms: {\n u_opacity: opacity || 1.0,\n u_radius: radius,\n u_intensity: intensity,\n },\n });\n }\n\n private drawColorMode() {\n const {\n opacity,\n } = this.layer.getLayerConfig() as IHeatMapLayerStyleOptions;\n this.colorModel.draw({\n uniforms: {\n u_opacity: opacity || 1.0,\n u_colorTexture: this.colorTexture,\n u_texture: this.heatmapFramerBuffer,\n },\n });\n }\n\n private draw3DHeatMap() {\n const {\n opacity,\n } = this.layer.getLayerConfig() as IHeatMapLayerStyleOptions;\n\n // const invert = mat4.invert(\n // mat4.create(),\n // mat4.fromValues(\n // // @ts-ignore\n // ...this.cameraService.getViewProjectionMatrixUncentered(),\n // ),\n // ) as mat4;\n const invert = mat4.create();\n mat4.invert(\n invert,\n this.cameraService.getViewProjectionMatrixUncentered() as mat4,\n );\n\n this.colorModel.draw({\n uniforms: {\n u_opacity: opacity || 1.0,\n u_colorTexture: this.colorTexture,\n u_texture: this.heatmapFramerBuffer,\n u_ViewProjectionMatrixUncentered: this.cameraService.getViewProjectionMatrixUncentered(),\n u_InverseViewProjectionMatrix: [...invert],\n },\n });\n }\n private build3dHeatMap() {\n const { getViewportSize } = this.rendererService;\n const { width, height } = getViewportSize();\n const triangulation = heatMap3DTriangulation(width / 4.0, height / 4.0);\n this.shaderModuleService.registerModule('heatmap3dColor', {\n vs: heatmap3DVert,\n fs: heatmap3DFrag,\n });\n\n const { vs, fs, uniforms } = this.shaderModuleService.getModule(\n 'heatmap3dColor',\n );\n const {\n createAttribute,\n createElements,\n createBuffer,\n createModel,\n } = this.rendererService;\n return createModel({\n vs,\n fs,\n attributes: {\n a_Position: createAttribute({\n buffer: createBuffer({\n data: triangulation.vertices,\n type: gl.FLOAT,\n }),\n size: 3,\n }),\n a_Uv: createAttribute({\n buffer: createBuffer({\n data: triangulation.uvs,\n type: gl.FLOAT,\n }),\n size: 2,\n }),\n },\n primitive: gl.TRIANGLES,\n uniforms: {\n ...uniforms,\n },\n depth: {\n enable: true,\n },\n blend: {\n enable: true,\n func: {\n srcRGB: gl.SRC_ALPHA,\n srcAlpha: 1,\n dstRGB: gl.ONE_MINUS_SRC_ALPHA,\n dstAlpha: 1,\n },\n },\n elements: createElements({\n data: triangulation.indices,\n type: gl.UNSIGNED_INT,\n count: triangulation.indices.length,\n }),\n });\n }\n private updateStyle() {\n this.updateColorTexture();\n }\n\n private updateColorTexture() {\n const { createTexture2D } = this.rendererService;\n if (this.texture) {\n this.texture.destroy();\n }\n\n const {\n rampColors,\n } = this.layer.getLayerConfig() as IHeatMapLayerStyleOptions;\n const imageData = generateColorRamp(rampColors as IColorRamp);\n this.colorTexture = createTexture2D({\n data: new Uint8Array(imageData.data),\n width: imageData.width,\n height: imageData.height,\n wrapS: gl.CLAMP_TO_EDGE,\n wrapT: gl.CLAMP_TO_EDGE,\n min: gl.NEAREST,\n mag: gl.NEAREST,\n flipY: false,\n });\n }\n}\n"],"file":"heatmap.js"}
|