@antv/l7-layers 2.9.17-alpha.0 → 2.9.19
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/es/core/BaseLayer.js +10 -6
- package/es/core/BaseLayer.js.map +1 -1
- package/es/core/interface.d.ts +13 -0
- package/es/core/interface.js.map +1 -1
- package/es/core/triangulation.d.ts +0 -1
- package/es/core/triangulation.js +9 -36
- package/es/core/triangulation.js.map +1 -1
- package/es/image/index.d.ts +1 -1
- package/es/image/index.js +14 -2
- package/es/image/index.js.map +1 -1
- package/es/image/models/dataImage.d.ts +22 -0
- package/es/image/models/dataImage.js +235 -0
- package/es/image/models/dataImage.js.map +1 -0
- package/es/image/models/image.d.ts +1 -0
- package/es/image/models/image.js +8 -1
- package/es/image/models/image.js.map +1 -1
- package/es/image/models/index.d.ts +1 -1
- package/es/image/models/index.js +3 -1
- package/es/image/models/index.js.map +1 -1
- package/es/line/models/arc.js +2 -2
- package/es/line/models/arc.js.map +1 -1
- package/es/line/models/great_circle.js +2 -2
- package/es/line/models/line.js +1 -1
- package/es/line/models/simpleLine.d.ts +0 -1
- package/es/line/models/simpleLine.js +10 -53
- package/es/line/models/simpleLine.js.map +1 -1
- package/es/plugins/LayerModelPlugin.js +2 -0
- package/es/plugins/LayerModelPlugin.js.map +1 -1
- package/es/point/index.js +11 -7
- package/es/point/index.js.map +1 -1
- package/es/point/models/text.js +2 -0
- package/es/point/models/text.js.map +1 -1
- package/es/tile/manager/tileLayerManager.js +22 -2
- package/es/tile/manager/tileLayerManager.js.map +1 -1
- package/es/utils/extrude_polyline.d.ts +0 -15
- package/es/utils/extrude_polyline.js +6 -138
- package/es/utils/extrude_polyline.js.map +1 -1
- package/es/utils/simpleLine.d.ts +23 -0
- package/es/utils/simpleLine.js +105 -0
- package/es/utils/simpleLine.js.map +1 -0
- package/es/wind/models/wind.d.ts +2 -0
- package/es/wind/models/wind.js +62 -33
- package/es/wind/models/wind.js.map +1 -1
- package/es/wind/models/windRender.js +1 -1
- package/es/wind/models/windRender.js.map +1 -1
- package/lib/core/BaseLayer.js +10 -6
- package/lib/core/BaseLayer.js.map +1 -1
- package/lib/core/interface.js.map +1 -1
- package/lib/core/triangulation.js +10 -36
- package/lib/core/triangulation.js.map +1 -1
- package/lib/image/index.js +14 -2
- package/lib/image/index.js.map +1 -1
- package/lib/image/models/dataImage.js +250 -0
- package/lib/image/models/dataImage.js.map +1 -0
- package/lib/image/models/image.js +8 -1
- package/lib/image/models/image.js.map +1 -1
- package/lib/image/models/index.js +4 -1
- package/lib/image/models/index.js.map +1 -1
- package/lib/line/models/arc.js +2 -2
- package/lib/line/models/arc.js.map +1 -1
- package/lib/line/models/great_circle.js +2 -2
- package/lib/line/models/line.js +1 -1
- package/lib/line/models/simpleLine.js +10 -53
- package/lib/line/models/simpleLine.js.map +1 -1
- package/lib/plugins/LayerModelPlugin.js +2 -0
- package/lib/plugins/LayerModelPlugin.js.map +1 -1
- package/lib/point/index.js +11 -7
- package/lib/point/index.js.map +1 -1
- package/lib/point/models/text.js +2 -0
- package/lib/point/models/text.js.map +1 -1
- package/lib/tile/manager/tileLayerManager.js +22 -2
- package/lib/tile/manager/tileLayerManager.js.map +1 -1
- package/lib/utils/extrude_polyline.js +6 -140
- package/lib/utils/extrude_polyline.js.map +1 -1
- package/lib/utils/simpleLine.js +117 -0
- package/lib/utils/simpleLine.js.map +1 -0
- package/lib/wind/models/wind.js +61 -33
- package/lib/wind/models/wind.js.map +1 -1
- package/lib/wind/models/windRender.js +1 -1
- package/lib/wind/models/windRender.js.map +1 -1
- package/package.json +5 -5
package/es/core/BaseLayer.js
CHANGED
|
@@ -381,7 +381,9 @@ var BaseLayer = (_dec = lazyInject(TYPES.IGlobalConfigService), (_class = functi
|
|
|
381
381
|
}, {
|
|
382
382
|
key: "createModelData",
|
|
383
383
|
value: function createModelData(data, option) {
|
|
384
|
-
|
|
384
|
+
var _this$layerModel;
|
|
385
|
+
|
|
386
|
+
if ((_this$layerModel = this.layerModel) !== null && _this$layerModel !== void 0 && _this$layerModel.createModelData) {
|
|
385
387
|
return this.layerModel.createModelData(option);
|
|
386
388
|
}
|
|
387
389
|
|
|
@@ -934,7 +936,7 @@ var BaseLayer = (_dec = lazyInject(TYPES.IGlobalConfigService), (_class = functi
|
|
|
934
936
|
}, {
|
|
935
937
|
key: "destroy",
|
|
936
938
|
value: function destroy() {
|
|
937
|
-
var _this$
|
|
939
|
+
var _this$layerModel2;
|
|
938
940
|
|
|
939
941
|
var refresh = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
|
|
940
942
|
|
|
@@ -955,7 +957,7 @@ var BaseLayer = (_dec = lazyInject(TYPES.IGlobalConfigService), (_class = functi
|
|
|
955
957
|
this.multiPassRenderer.destroy();
|
|
956
958
|
this.styleAttributeService.clearAllAttributes();
|
|
957
959
|
this.hooks.afterDestroy.call();
|
|
958
|
-
(_this$
|
|
960
|
+
(_this$layerModel2 = this.layerModel) === null || _this$layerModel2 === void 0 ? void 0 : _this$layerModel2.clearModels();
|
|
959
961
|
this.models = [];
|
|
960
962
|
this.layerService.cleanRemove(this, refresh);
|
|
961
963
|
this.emit('remove', {
|
|
@@ -977,12 +979,12 @@ var BaseLayer = (_dec = lazyInject(TYPES.IGlobalConfigService), (_class = functi
|
|
|
977
979
|
}, {
|
|
978
980
|
key: "clearModels",
|
|
979
981
|
value: function clearModels() {
|
|
980
|
-
var _this$
|
|
982
|
+
var _this$layerModel3;
|
|
981
983
|
|
|
982
984
|
this.models.forEach(function (model) {
|
|
983
985
|
return model.destroy();
|
|
984
986
|
});
|
|
985
|
-
(_this$
|
|
987
|
+
(_this$layerModel3 = this.layerModel) === null || _this$layerModel3 === void 0 ? void 0 : _this$layerModel3.clearModels();
|
|
986
988
|
this.models = [];
|
|
987
989
|
}
|
|
988
990
|
}, {
|
|
@@ -1255,6 +1257,8 @@ var BaseLayer = (_dec = lazyInject(TYPES.IGlobalConfigService), (_class = functi
|
|
|
1255
1257
|
var _this10 = this;
|
|
1256
1258
|
|
|
1257
1259
|
if (this.getEncodedData() && this.getEncodedData().length > 0) {
|
|
1260
|
+
var _this$layerModel4;
|
|
1261
|
+
|
|
1258
1262
|
if (this.layerModelNeedUpdate && this.layerModel) {
|
|
1259
1263
|
this.layerModel.buildModels(function (models) {
|
|
1260
1264
|
_this10.models = models;
|
|
@@ -1265,7 +1269,7 @@ var BaseLayer = (_dec = lazyInject(TYPES.IGlobalConfigService), (_class = functi
|
|
|
1265
1269
|
});
|
|
1266
1270
|
}
|
|
1267
1271
|
|
|
1268
|
-
if (this.layerModel.renderUpdate) {
|
|
1272
|
+
if (this !== null && this !== void 0 && (_this$layerModel4 = this.layerModel) !== null && _this$layerModel4 !== void 0 && _this$layerModel4.renderUpdate) {
|
|
1269
1273
|
this.layerModel.renderUpdate();
|
|
1270
1274
|
}
|
|
1271
1275
|
|
package/es/core/BaseLayer.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/core/BaseLayer.ts"],"names":["SyncBailHook","SyncHook","SyncWaterfallHook","BlendType","lazyInject","TYPES","Source","encodePickingColor","WorkerSourceMap","EventEmitter","BlendTypes","handleStyleDataMapping","calculateData","createMultiPassRenderer","normalizePasses","updateShape","layerIdCounter","BaseLayer","IGlobalConfigService","config","dataSourceNeedUpdate","dataMappingNeedUpdate","filterNeedUpdate","featureScaleNeedUpdate","StyleAttrNeedUpdate","init","afterInit","beforeRender","beforeRenderData","afterRender","beforePickingEncode","afterPickingEncode","beforeHighlight","afterHighlight","beforeSelect","afterSelect","beforeDestroy","afterDestroy","enable","dataState","layerConfig","getLayerConfig","autoFit","fitBounds","fitBoundsOptions","reRender","name","id","zIndex","rawConfig","maskLayer","masks","push","layerIndex","indexOf","splice","destroy","styleAttributeService","getLayerStyleAttribute","configService","configToUpdate","Object","keys","map","key","inited","needUpdateConfig","sceneId","container","get","SceneID","setLayerConfig","sceneContainer","color","bottomColor","plugin","plugins","layerType","iconService","IIconService","fontService","IFontService","rendererService","IRendererService","layerService","ILayerService","interactionService","IInteractionService","pickingService","IPickingService","mapService","IMapService","enableMultiPassRenderer","passes","length","on","renderLayers","cameraService","ICameraService","coordinateService","ICoordinateSystemService","shaderModuleService","IShaderModuleService","postProcessingPassFactory","IFactoryPostProcessingPass","normalPassFactory","IFactoryNormalPass","IStyleAttributeService","multiPassRenderer","IMultiPassRenderer","setLayer","pendingStyleAttributes","forEach","attributeName","attributeField","attributeValues","updateOptions","updateStyleAttribute","scale","field","splitValuesAndCallbackInAttribute","getAll","ILayerPlugin","apply","hooks","call","emit","target","type","data","attributes","elements","models","m","updateAttributesAndElements","console","warn","option","layerModel","createModelData","calEncodeData","calculateEncodeData","triangulation","createAttributesAndIndices","undefined","updateLayerConfig","getDefaultConfig","animateOption","startAnimate","aniamateStatus","values","lastShape","currentShape","shapeOption","tileLayer","options","rawAnimate","setSource","sourceOption","clusterZoom","layerSource","setData","currentSource","getSource","source","sourceEvent","lastConfig","rest","pass","postProcessingPass","getPostProcessor","getPostProcessingPassByName","styleNeedUpdate","mask","clearModels","buildModels","cfg","scaleOptions","rendering","render","getEncodedData","renderModels","getRenderFlag","activeOption","enableHighlight","highlightColor","mix","activeMix","x","y","pick","pickedFeatureID","then","setTimeout","enableSelect","selectColor","selectMix","blend","layerModelNeedUpdate","visible","clearCanvas","index","updateLayerRenderList","currentPickId","selectedFeatureID","zoom","getZoom","minZoom","Infinity","maxZoom","enableMultiPass","currentPasses","setRenderFlag","getViewportSize","width","height","resize","extent","isValid","some","v","Math","abs","refresh","isDestroied","layerChildren","child","off","clearAllAttributes","cleanRemove","removeAllListeners","model","getLayerStyleAttributes","filter","attribute","needRescale","needRemapping","needRegenerateVertices","cluster","updateClusterData","encodedData","getLayerAttributeScale","invertExtent","items","range","item","value","ticks","domain","triggerHover","box","cb","boxPickLayer","moduleName","vertexShader","fragmentShader","segmentNumber","workerEnabled","workerOptions","registerModule","vs","fs","getModule","uniforms","createModel","Promise","resolve","reject","modelType","createAttributesAndIndicesAscy","normal","catch","err","createAttributes","clock","getDelta","animateStartTime","getElapsedTime","stopAnimate","isPick","eventNames","isVisible","Error","isPicking","renderUpdate","draw","getUninforms","getShaderPickStat","time","valuesOrCallback","defaultValues","callback"],"mappings":"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","sourcesContent":["// @ts-ignore\nimport { SyncBailHook, SyncHook, SyncWaterfallHook } from '@antv/async-hook';\nimport {\n BlendType,\n gl,\n IActiveOption,\n IAnimateOption,\n IAttrubuteAndElements,\n ICameraService,\n ICoordinateSystemService,\n IDataState,\n IEncodeFeature,\n IFontService,\n IGlobalConfigService,\n IIconService,\n IInteractionService,\n ILayer,\n ILayerConfig,\n ILayerModel,\n ILayerModelInitializationOptions,\n ILayerPlugin,\n ILayerService,\n ILegendClassificaItem,\n ILegendSegmentItem,\n IMapService,\n IModel,\n IModelInitializationOptions,\n IMultiPassRenderer,\n IPass,\n IPickingService,\n IPostProcessingPass,\n IRendererService,\n IScale,\n IScaleOptions,\n IShaderModuleService,\n ISource,\n ISourceCFG,\n IStyleAttributeInitializationOptions,\n IStyleAttributeService,\n IStyleAttributeUpdateOptions,\n LayerEventType,\n lazyInject,\n LegendItems,\n ScaleAttributeType,\n ScaleTypeName,\n ScaleTypes,\n StyleAttributeField,\n StyleAttributeOption,\n Triangulation,\n TYPES,\n} from '@antv/l7-core';\nimport Source from '@antv/l7-source';\nimport { encodePickingColor, WorkerSourceMap } from '@antv/l7-utils';\nimport { EventEmitter } from 'eventemitter3';\nimport { Container } from 'inversify';\nimport { isFunction, isObject, isUndefined } from 'lodash';\nimport { BlendTypes } from '../utils/blend';\nimport { handleStyleDataMapping } from '../utils/dataMappingStyle';\nimport { calculateData } from '../utils/layerData';\nimport {\n createMultiPassRenderer,\n normalizePasses,\n} from '../utils/multiPassRender';\nimport { updateShape } from '../utils/updateShape';\n/**\n * 分配 layer id\n */\nlet layerIdCounter = 0;\n\nexport default class BaseLayer<ChildLayerStyleOptions = {}>\n extends EventEmitter<LayerEventType>\n implements ILayer {\n public id: string = `${layerIdCounter++}`;\n public name: string = `${layerIdCounter}`;\n public type: string;\n public visible: boolean = true;\n public zIndex: number = 0;\n public minZoom: number;\n public maxZoom: number;\n public inited: boolean = false;\n public layerModelNeedUpdate: boolean = false;\n public pickedFeatureID: number | null = null;\n public selectedFeatureID: number | null = null;\n public styleNeedUpdate: boolean = false;\n public rendering: boolean;\n public clusterZoom: number = 0; // 聚合等级标记\n public layerType?: string | undefined;\n public triangulation?: Triangulation | undefined;\n\n public dataState: IDataState = {\n dataSourceNeedUpdate: false,\n dataMappingNeedUpdate: false,\n filterNeedUpdate: false,\n featureScaleNeedUpdate: false,\n StyleAttrNeedUpdate: false,\n };\n // 生命周期钩子\n public hooks = {\n init: new SyncBailHook(),\n afterInit: new SyncBailHook(),\n beforeRender: new SyncBailHook(),\n beforeRenderData: new SyncWaterfallHook(),\n afterRender: new SyncHook(),\n beforePickingEncode: new SyncHook(),\n afterPickingEncode: new SyncHook(),\n beforeHighlight: new SyncHook(['pickedColor']),\n afterHighlight: new SyncHook(),\n beforeSelect: new SyncHook(['pickedColor']),\n afterSelect: new SyncHook(),\n beforeDestroy: new SyncHook(),\n afterDestroy: new SyncHook(),\n };\n\n // 待渲染 model 列表\n public models: IModel[] = [];\n\n // 每个 Layer 都有一个\n public multiPassRenderer: IMultiPassRenderer;\n\n // 注入插件集\n public plugins: ILayerPlugin[];\n\n public sourceOption: {\n data: any;\n options?: ISourceCFG;\n };\n\n public layerModel: ILayerModel;\n\n public shapeOption: {\n field: any;\n values: any;\n };\n\n // TODO: 记录 sceneContainer 供创建子图层的时候使用 如 imageTileLayer\n public sceneContainer: Container | undefined;\n public tileLayer: any | undefined;\n // TODO: 用于保存子图层对象\n public layerChildren: ILayer[] = [];\n public masks: ILayer[] = [];\n // Tip: 用于标识矢量图层\n public isVector: boolean = false;\n\n @lazyInject(TYPES.IGlobalConfigService)\n protected readonly configService: IGlobalConfigService;\n\n // @lazyInject(TYPES.IShaderModuleService)\n // protected readonly shaderModuleService: IShaderModuleService;\n\n protected shaderModuleService: IShaderModuleService;\n protected cameraService: ICameraService;\n\n protected coordinateService: ICoordinateSystemService;\n\n protected iconService: IIconService;\n\n protected fontService: IFontService;\n\n protected pickingService: IPickingService;\n\n protected rendererService: IRendererService;\n\n protected layerService: ILayerService;\n\n protected interactionService: IInteractionService;\n\n protected mapService: IMapService;\n\n protected styleAttributeService: IStyleAttributeService;\n\n protected layerSource: Source;\n\n protected postProcessingPassFactory: (\n name: string,\n ) => IPostProcessingPass<unknown>;\n protected normalPassFactory: (name: string) => IPass<unknown>;\n\n protected animateOptions: IAnimateOption = { enable: false };\n\n /**\n * 图层容器\n */\n private container: Container;\n\n private encodedData: IEncodeFeature[];\n\n private configSchema: object;\n\n private currentPickId: number | null = null;\n\n private rawConfig: Partial<ILayerConfig & ChildLayerStyleOptions>;\n\n private needUpdateConfig: Partial<ILayerConfig & ChildLayerStyleOptions>;\n\n /**\n * 待更新样式属性,在初始化阶段完成注册\n */\n private pendingStyleAttributes: Array<{\n attributeName: string;\n attributeField: StyleAttributeField;\n attributeValues?: StyleAttributeOption;\n defaultName?: string;\n updateOptions?: Partial<IStyleAttributeUpdateOptions>;\n }> = [];\n\n private scaleOptions: IScaleOptions = {};\n\n private animateStartTime: number;\n\n private aniamateStatus: boolean = false;\n\n // TODO: layer 保底颜色\n private bottomColor = 'rgba(0, 0, 0, 0)';\n\n private isDestroied: boolean = false;\n\n // private pickingPassRender: IPass<'pixelPicking'>;\n\n constructor(config: Partial<ILayerConfig & ChildLayerStyleOptions> = {}) {\n super();\n this.name = config.name || this.id;\n this.zIndex = config.zIndex || 0;\n this.rawConfig = config;\n }\n\n public addMaskLayer(maskLayer: ILayer) {\n this.masks.push(maskLayer);\n }\n\n public removeMaskLayer(maskLayer: ILayer) {\n const layerIndex = this.masks.indexOf(maskLayer);\n if (layerIndex > -1) {\n this.masks.splice(layerIndex, 1);\n }\n maskLayer.destroy();\n }\n\n public getAttribute(name: string) {\n return this.styleAttributeService.getLayerStyleAttribute(name);\n }\n\n public getLayerConfig() {\n return this.configService.getLayerConfig<ChildLayerStyleOptions>(this.id);\n }\n\n public updateLayerConfig(\n configToUpdate: Partial<ILayerConfig | ChildLayerStyleOptions>,\n ) {\n // 同步 rawConfig\n Object.keys(configToUpdate).map((key) => {\n if (key in this.rawConfig) {\n // @ts-ignore\n this.rawConfig[key] = configToUpdate[key];\n }\n });\n if (!this.inited) {\n this.needUpdateConfig = {\n ...this.needUpdateConfig,\n ...configToUpdate,\n };\n } else {\n const sceneId = this.container.get<string>(TYPES.SceneID);\n\n // @ts-ignore\n handleStyleDataMapping(configToUpdate, this); // 处理 style 中进行数据映射的属性字段\n\n this.configService.setLayerConfig(sceneId, this.id, {\n ...this.configService.getLayerConfig(this.id),\n ...this.needUpdateConfig,\n ...configToUpdate,\n });\n this.needUpdateConfig = {};\n }\n }\n\n /**\n * 注入图层容器,父容器为场景容器\n * RootContainer 1\n * -> SceneContainer 1.*\n * -> LayerContainer 1.*\n */\n public setContainer(container: Container, sceneContainer: Container) {\n this.container = container;\n this.sceneContainer = sceneContainer;\n }\n\n public getContainer() {\n return this.container;\n }\n\n public setBottomColor(color: string) {\n this.bottomColor = color;\n }\n\n public getBottomColor() {\n return this.bottomColor;\n }\n\n public addPlugin(plugin: ILayerPlugin): ILayer {\n // TODO: 控制插件注册顺序\n // @example:\n // pointLayer.addPlugin(new MyCustomPlugin(), {\n // before: 'L7BuiltinPlugin'\n // });\n this.plugins.push(plugin);\n return this;\n }\n\n public init() {\n // 设置配置项\n const sceneId = this.container.get<string>(TYPES.SceneID);\n // 初始化图层配置项\n // const { enableMultiPassRenderer = false } = this.rawConfig;\n // this.configService.setLayerConfig(sceneId, this.id, {\n // enableMultiPassRenderer,\n // });\n this.configService.setLayerConfig(sceneId, this.id, this.rawConfig);\n this.layerType = this.rawConfig.layerType;\n\n // 全局容器服务\n\n // 场景容器服务\n this.iconService = this.container.get<IIconService>(TYPES.IIconService);\n this.fontService = this.container.get<IFontService>(TYPES.IFontService);\n\n this.rendererService = this.container.get<IRendererService>(\n TYPES.IRendererService,\n );\n this.layerService = this.container.get<ILayerService>(TYPES.ILayerService);\n this.interactionService = this.container.get<IInteractionService>(\n TYPES.IInteractionService,\n );\n\n this.pickingService = this.container.get<IPickingService>(\n TYPES.IPickingService,\n );\n this.mapService = this.container.get<IMapService>(TYPES.IMapService);\n const { enableMultiPassRenderer, passes } = this.getLayerConfig();\n if (enableMultiPassRenderer && passes?.length && passes.length > 0) {\n // Tip: 兼容 multiPassRender 在 amap1 时存在的图层不同步问题 zoom\n this.mapService.on('mapAfterFrameChange', () => {\n this.renderLayers();\n });\n }\n\n this.cameraService = this.container.get<ICameraService>(\n TYPES.ICameraService,\n );\n this.coordinateService = this.container.get<ICoordinateSystemService>(\n TYPES.ICoordinateSystemService,\n );\n this.shaderModuleService = this.container.get<IShaderModuleService>(\n TYPES.IShaderModuleService,\n );\n this.postProcessingPassFactory = this.container.get(\n TYPES.IFactoryPostProcessingPass,\n );\n this.normalPassFactory = this.container.get(TYPES.IFactoryNormalPass);\n\n // 图层容器服务\n this.styleAttributeService = this.container.get<IStyleAttributeService>(\n TYPES.IStyleAttributeService,\n );\n this.multiPassRenderer = this.container.get<IMultiPassRenderer>(\n TYPES.IMultiPassRenderer,\n );\n this.multiPassRenderer.setLayer(this);\n\n // 完成样式服务注册完成前添加的属性\n this.pendingStyleAttributes.forEach(\n ({ attributeName, attributeField, attributeValues, updateOptions }) => {\n this.styleAttributeService.updateStyleAttribute(\n attributeName,\n {\n // @ts-ignore\n scale: {\n field: attributeField,\n ...this.splitValuesAndCallbackInAttribute(\n // @ts-ignore\n attributeValues,\n // @ts-ignore\n this.getLayerConfig()[attributeName],\n ),\n },\n },\n // @ts-ignore\n updateOptions,\n );\n },\n );\n this.pendingStyleAttributes = [];\n\n // 获取插件集\n this.plugins = this.container.getAll<ILayerPlugin>(TYPES.ILayerPlugin);\n // 完成插件注册,传入场景和图层容器内的服务\n for (const plugin of this.plugins) {\n plugin.apply(this, {\n rendererService: this.rendererService,\n mapService: this.mapService,\n styleAttributeService: this.styleAttributeService,\n normalPassFactory: this.normalPassFactory,\n postProcessingPassFactory: this.postProcessingPassFactory,\n });\n }\n\n // 触发 init 生命周期插件\n this.hooks.init.call();\n // this.pickingPassRender = this.normalPassFactory('pixelPicking');\n // this.pickingPassRender.init(this);\n this.hooks.afterInit.call();\n // 触发初始化完成事件;\n this.emit('inited', {\n target: this,\n type: 'inited',\n });\n this.emit('add', {\n target: this,\n type: 'add',\n });\n\n return this;\n }\n\n public updateModelData(data: IAttrubuteAndElements) {\n if (data.attributes && data.elements) {\n this.models.map((m) => {\n m.updateAttributesAndElements(data.attributes, data.elements);\n });\n } else {\n console.warn('data error');\n }\n }\n\n public createModelData(data: any, option?: ISourceCFG) {\n if (this.layerModel.createModelData) {\n // 在某些特殊图层中单独构建 attribute & elements\n return this.layerModel.createModelData(option);\n }\n const calEncodeData = this.calculateEncodeData(data, option);\n const triangulation = this.triangulation;\n\n if (calEncodeData && triangulation) {\n return this.styleAttributeService.createAttributesAndIndices(\n calEncodeData,\n triangulation,\n );\n } else {\n return {\n attributes: undefined,\n elements: undefined,\n };\n }\n }\n\n public calculateEncodeData(data: any, option?: ISourceCFG) {\n if (this.inited) {\n return calculateData(\n this,\n this.fontService,\n this.mapService,\n this.styleAttributeService,\n data,\n option,\n );\n } else {\n console.warn('layer not inited!');\n return null;\n }\n }\n /**\n * Model初始化前需要更新Model样式\n */\n public prepareBuildModel() {\n this.inited = true;\n this.updateLayerConfig({\n ...(this.getDefaultConfig() as object),\n ...this.rawConfig,\n });\n\n // 启动动画\n const { animateOption } = this.getLayerConfig();\n if (animateOption?.enable) {\n this.layerService.startAnimate();\n this.aniamateStatus = true;\n }\n }\n public color(\n field: StyleAttributeField,\n values?: StyleAttributeOption,\n updateOptions?: Partial<IStyleAttributeUpdateOptions>,\n ) {\n // 设置 color、size、shape、style 时由于场景服务尚未完成(并没有调用 scene.addLayer),因此暂时加入待更新属性列表\n this.updateStyleAttribute('color', field, values, updateOptions);\n\n // this.pendingStyleAttributes.push({\n // attributeName: 'color',\n // attributeField: field,\n // attributeValues: values,\n // defaultName: 'colors',\n // updateOptions,\n // });\n return this;\n }\n\n // 为对应的图层传入纹理的编号名称(point/image 在 shape 方法中传入纹理名称的方法并不通用)\n public texture(\n field: StyleAttributeField,\n values?: StyleAttributeOption,\n updateOptions?: Partial<IStyleAttributeUpdateOptions>,\n ) {\n this.updateStyleAttribute('texture', field, values, updateOptions);\n return this;\n }\n\n public rotate(\n field: StyleAttributeField,\n values?: StyleAttributeOption,\n updateOptions?: Partial<IStyleAttributeUpdateOptions>,\n ) {\n this.updateStyleAttribute('rotate', field, values, updateOptions);\n return this;\n }\n public size(\n field: StyleAttributeField,\n values?: StyleAttributeOption,\n updateOptions?: Partial<IStyleAttributeUpdateOptions>,\n ) {\n this.updateStyleAttribute('size', field, values, updateOptions);\n return this;\n }\n // 对mapping后的数据过滤,scale保持不变\n public filter(\n field: StyleAttributeField,\n values?: StyleAttributeOption,\n updateOptions?: Partial<IStyleAttributeUpdateOptions>,\n ) {\n this.updateStyleAttribute('filter', field, values, updateOptions);\n return this;\n }\n\n public shape(\n field: StyleAttributeField,\n values?: StyleAttributeOption,\n updateOptions?: Partial<IStyleAttributeUpdateOptions>,\n ) {\n const lastShape = this.styleAttributeService?.getLayerStyleAttribute(\n 'shape',\n )?.scale?.field;\n const currentShape = field;\n this.shapeOption = {\n field,\n values,\n };\n this.updateStyleAttribute('shape', field, values, updateOptions);\n // TODO: 根据 shape 判断是否需要更新 model\n if (!this.tileLayer) {\n updateShape(this, lastShape, currentShape);\n }\n return this;\n }\n public label(\n field: StyleAttributeField,\n values?: StyleAttributeOption,\n updateOptions?: Partial<IStyleAttributeUpdateOptions>,\n ) {\n this.pendingStyleAttributes.push({\n attributeName: 'label',\n attributeField: field,\n attributeValues: values,\n updateOptions,\n });\n return this;\n }\n public animate(options: IAnimateOption | boolean) {\n let rawAnimate: Partial<IAnimateOption> = {};\n if (isObject(options)) {\n rawAnimate.enable = true;\n rawAnimate = {\n ...rawAnimate,\n ...options,\n };\n } else {\n rawAnimate.enable = options;\n }\n this.updateLayerConfig({\n animateOption: rawAnimate,\n });\n // this.animateOptions = options;\n return this;\n }\n\n public source(data: any, options?: ISourceCFG): ILayer {\n if (data?.data) {\n // 判断是否为source\n this.setSource(data);\n return this;\n }\n this.sourceOption = {\n data,\n options,\n };\n this.clusterZoom = 0;\n return this;\n }\n\n public setData(data: any, options?: ISourceCFG) {\n if (this.inited) {\n this.layerSource.setData(data, options);\n } else {\n this.on('inited', () => {\n const currentSource = this.getSource();\n if (!currentSource) {\n // 执行 setData 的时候 source 还不存在(还未执行 addLayer)\n this.source(new Source(data, options));\n this.sourceEvent();\n } else {\n this.layerSource.setData(data, options);\n }\n // this.layerSource.setData(data, options);\n });\n }\n\n return this;\n }\n public style(\n options: Partial<ChildLayerStyleOptions> & Partial<ILayerConfig>,\n ): ILayer {\n const lastConfig = this.getLayerConfig();\n const { passes, ...rest } = options;\n\n // passes 特殊处理\n if (passes) {\n normalizePasses(passes).forEach(\n (pass: [string, { [key: string]: unknown }]) => {\n const postProcessingPass = this.multiPassRenderer\n .getPostProcessor()\n .getPostProcessingPassByName(pass[0]);\n if (postProcessingPass) {\n postProcessingPass.updateOptions(pass[1]);\n }\n },\n );\n }\n\n this.rawConfig = {\n ...this.rawConfig,\n ...rest,\n };\n if (this.container) {\n this.updateLayerConfig(this.rawConfig);\n this.styleNeedUpdate = true;\n }\n\n // @ts-ignore\n if (lastConfig && lastConfig.mask === true && options.mask === false) {\n this.clearModels();\n this.layerModel.buildModels((models) => {\n this.models = models;\n });\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 (this.tileLayer !== undefined) {\n // 瓦片图层执行单独的 render 渲染队列\n this.tileLayer.render();\n return this;\n }\n // TODO: this.getEncodedData().length !== 0 这个判断是为了解决在 2.5.x 引入数据纹理后产生的 空数据渲染导致 texture 超出上限问题\n if (this.getEncodedData() && this.getEncodedData().length !== 0) {\n this.renderModels();\n }\n return this;\n }\n\n /**\n * renderMultiPass 专门用于渲染支持 multipass 的 layer\n */\n public async renderMultiPass() {\n if (this.getEncodedData() && this.getEncodedData().length !== 0) {\n if (this.multiPassRenderer && this.multiPassRenderer.getRenderFlag()) {\n // multi render 开始执行 multiPassRender 的渲染流程\n await this.multiPassRenderer.render();\n } else if (this.multiPassRenderer) {\n // renderPass 触发的渲染\n this.renderModels();\n } else {\n this.renderModels();\n }\n }\n }\n\n public active(options: IActiveOption | boolean) {\n const activeOption: Partial<ILayerConfig> = {};\n activeOption.enableHighlight = isObject(options) ? true : options;\n if (isObject(options)) {\n activeOption.enableHighlight = true;\n if (options.color) {\n activeOption.highlightColor = options.color;\n }\n if (options.mix) {\n activeOption.activeMix = options.mix;\n }\n } else {\n activeOption.enableHighlight = !!options;\n }\n this.updateLayerConfig(activeOption);\n return this;\n }\n public setActive(\n id: number | { x: number; y: number },\n options?: IActiveOption,\n ): void {\n if (isObject(id)) {\n const { x = 0, y = 0 } = id;\n this.updateLayerConfig({\n highlightColor: isObject(options)\n ? options.color\n : this.getLayerConfig().highlightColor,\n activeMix: isObject(options)\n ? options.mix\n : this.getLayerConfig().activeMix,\n });\n this.pick({ x, y });\n } else {\n this.updateLayerConfig({\n pickedFeatureID: id,\n highlightColor: isObject(options)\n ? options.color\n : this.getLayerConfig().highlightColor,\n activeMix: isObject(options)\n ? options.mix\n : this.getLayerConfig().activeMix,\n });\n this.hooks.beforeSelect\n .call(encodePickingColor(id as number) as number[])\n // @ts-ignore\n .then(() => {\n setTimeout(() => {\n this.reRender();\n }, 1);\n });\n }\n }\n\n public select(option: IActiveOption | boolean): ILayer {\n const activeOption: Partial<ILayerConfig> = {};\n activeOption.enableSelect = isObject(option) ? true : option;\n if (isObject(option)) {\n activeOption.enableSelect = true;\n if (option.color) {\n activeOption.selectColor = option.color;\n }\n if (option.mix) {\n activeOption.selectMix = option.mix;\n }\n } else {\n activeOption.enableSelect = !!option;\n }\n this.updateLayerConfig(activeOption);\n return this;\n }\n\n public setSelect(\n id: number | { x: number; y: number },\n options?: IActiveOption,\n ): void {\n if (isObject(id)) {\n const { x = 0, y = 0 } = id;\n this.updateLayerConfig({\n selectColor: isObject(options)\n ? options.color\n : this.getLayerConfig().selectColor,\n selectMix: isObject(options)\n ? options.mix\n : this.getLayerConfig().selectMix,\n });\n this.pick({ x, y });\n } else {\n this.updateLayerConfig({\n pickedFeatureID: id,\n selectColor: isObject(options)\n ? options.color\n : this.getLayerConfig().selectColor,\n selectMix: isObject(options)\n ? options.mix\n : this.getLayerConfig().selectMix,\n });\n this.hooks.beforeSelect\n .call(encodePickingColor(id as number) as number[])\n // @ts-ignore\n .then(() => {\n setTimeout(() => {\n this.reRender();\n }, 1);\n });\n }\n }\n public setBlend(type: keyof typeof BlendType): ILayer {\n this.updateLayerConfig({\n blend: type,\n });\n this.layerModelNeedUpdate = true;\n this.reRender();\n return this;\n }\n public show(): ILayer {\n this.updateLayerConfig({\n visible: true,\n });\n this.reRender();\n return this;\n }\n\n public hide(): ILayer {\n if (this.type === 'CanvasLayer' && this.layerModel.clearCanvas) {\n // 对 canvasLayer 的 hide 操作做特殊处理\n this.layerModel.clearCanvas();\n }\n this.updateLayerConfig({\n visible: false,\n });\n this.reRender();\n return this;\n }\n public setIndex(index: number): ILayer {\n this.zIndex = index;\n this.layerService.updateLayerRenderList();\n this.layerService.renderLayers();\n return this;\n }\n\n public setCurrentPickId(id: number) {\n this.currentPickId = id;\n }\n\n public getCurrentPickId(): number | null {\n return this.currentPickId;\n }\n\n public setCurrentSelectedId(id: number) {\n this.selectedFeatureID = id;\n }\n\n public getCurrentSelectedId(): number | null {\n return this.selectedFeatureID;\n }\n public isVisible(): boolean {\n const zoom = this.mapService.getZoom();\n const {\n visible,\n minZoom = -Infinity,\n maxZoom = Infinity,\n } = this.getLayerConfig();\n return !!visible && zoom >= minZoom && zoom <= maxZoom;\n }\n\n public setMultiPass(\n enableMultiPass: boolean,\n currentPasses?: Array<string | [string, { [key: string]: unknown }]>,\n ) {\n this.updateLayerConfig({\n enableMultiPassRenderer: enableMultiPass,\n });\n if (currentPasses) {\n this.updateLayerConfig({\n passes: currentPasses,\n });\n }\n\n if (enableMultiPass) {\n const { passes = [] } = this.getLayerConfig();\n this.multiPassRenderer = createMultiPassRenderer(\n this,\n passes,\n this.postProcessingPassFactory,\n this.normalPassFactory,\n );\n this.multiPassRenderer.setRenderFlag(true);\n const { width, height } = this.rendererService.getViewportSize();\n this.multiPassRenderer.resize(width, height);\n }\n\n return this;\n }\n\n public setMinZoom(minZoom: number): ILayer {\n this.updateLayerConfig({\n minZoom,\n });\n return this;\n }\n\n public getMinZoom(): number {\n const { minZoom } = this.getLayerConfig();\n return minZoom as number;\n }\n\n public getMaxZoom(): number {\n const { maxZoom } = this.getLayerConfig();\n return maxZoom as number;\n }\n\n public get(name: string) {\n const cfg = this.getLayerConfig();\n // @ts-ignore\n return cfg[name];\n }\n\n public setMaxZoom(maxZoom: number): ILayer {\n this.updateLayerConfig({\n maxZoom,\n });\n return this;\n }\n\n public setAutoFit(autoFit: boolean): ILayer {\n this.updateLayerConfig({\n autoFit,\n });\n return this;\n }\n\n /**\n * zoom to layer Bounds\n */\n public fitBounds(fitBoundsOptions?: unknown): ILayer {\n if (!this.inited) {\n this.updateLayerConfig({\n autoFit: true,\n });\n return this;\n }\n const source = this.getSource();\n const extent = source.extent;\n const isValid = extent.some((v) => Math.abs(v) === Infinity);\n if (isValid) {\n return this;\n }\n this.mapService.fitBounds(\n [\n [extent[0], extent[1]],\n [extent[2], extent[3]],\n ],\n fitBoundsOptions,\n );\n return this;\n }\n\n public destroy(refresh = true) {\n if (this.isDestroied) {\n return;\n }\n\n // remove child layer\n this.layerChildren.map((child: ILayer) => child.destroy());\n this.layerChildren = [];\n\n // remove mask list\n this.masks.map((mask: ILayer) => mask.destroy());\n this.masks = [];\n\n this.hooks.beforeDestroy.call();\n // 清除sources事件\n this.layerSource.off('sourceUpdate', this.sourceEvent);\n\n this.multiPassRenderer.destroy();\n // console.log(this.styleAttributeService.getAttributes())\n // 清除所有属性以及关联的 vao == 销毁所有 => model this.models.forEach((model) => model.destroy());\n this.styleAttributeService.clearAllAttributes();\n\n // 执行每个图层单独的 clearModels 方法 (清除一些额外的 texture、program、buffer 等)\n\n this.hooks.afterDestroy.call();\n\n // TODO: 清除各个图层自定义的 models 资源\n this.layerModel?.clearModels();\n\n this.models = [];\n\n this.layerService.cleanRemove(this, refresh);\n\n this.emit('remove', {\n target: this,\n type: 'remove',\n });\n\n this.emit('destroy', {\n target: this,\n type: 'destroy',\n });\n\n this.removeAllListeners();\n // 解绑图层容器中的服务\n // this.container.unbind(TYPES.IStyleAttributeService);\n\n this.isDestroied = true;\n }\n public clear() {\n this.styleAttributeService.clearAllAttributes();\n // 销毁所有 model\n }\n public clearModels() {\n this.models.forEach((model) => model.destroy());\n this.layerModel?.clearModels();\n this.models = [];\n }\n\n public isDirty() {\n return !!(\n this.styleAttributeService.getLayerStyleAttributes() || []\n ).filter(\n (attribute) =>\n attribute.needRescale ||\n attribute.needRemapping ||\n attribute.needRegenerateVertices,\n ).length;\n }\n\n public setSource(source: Source) {\n // 清除旧 sources 事件\n if (this.layerSource) {\n this.layerSource.off('sourceUpdate', this.sourceEvent);\n }\n\n this.layerSource = source;\n this.clusterZoom = 0;\n\n // 已 inited 且启用聚合进行更新聚合数据\n if (this.inited && this.layerSource.cluster) {\n const zoom = this.mapService.getZoom();\n this.layerSource.updateClusterData(zoom);\n }\n // source 可能会复用,会在其它layer被修改\n if (this.layerSource.inited) {\n this.sourceEvent();\n }\n // this.layerSource.inited 为 true 后,sourceUpdate 事件不会再触发\n this.layerSource.on('sourceUpdate', () => {\n this.sourceEvent();\n });\n }\n public getSource() {\n return this.layerSource;\n }\n\n public getScaleOptions() {\n return this.scaleOptions;\n }\n\n public setEncodedData(encodedData: IEncodeFeature[]) {\n this.encodedData = encodedData;\n }\n public getEncodedData() {\n return this.encodedData;\n }\n\n public getScale(name: string): any {\n return this.styleAttributeService.getLayerAttributeScale(name);\n }\n\n public getLegendItems(name: string): LegendItems {\n const scale = this.styleAttributeService.getLayerAttributeScale(name);\n\n // 函数自定义映射,没有 scale 返回为空数组\n if (!scale) {\n return [];\n }\n\n if (scale.invertExtent) {\n // 分段类型 Quantize、Quantile、Threshold\n const items: ILegendSegmentItem[] = scale.range().map((item: number) => {\n return {\n value: scale.invertExtent(item),\n [name]: item,\n };\n });\n\n return items;\n } else if (scale.ticks) {\n // 连续类型 Continuous (Linear, Power, Log, Identity, Time)\n const items: ILegendClassificaItem[] = scale\n .ticks()\n .map((item: string) => {\n return {\n value: item,\n [name]: scale(item),\n };\n });\n\n return items;\n } else if (scale?.domain) {\n // 枚举类型 Cat\n const items: ILegendClassificaItem[] = scale\n .domain()\n .filter((item: string | number | undefined) => !isUndefined(item))\n .map((item: string | number) => {\n return {\n value: item,\n [name]: scale(item) as string,\n };\n });\n\n return items;\n }\n\n return [];\n }\n\n public pick({ x, y }: { x: number; y: number }) {\n this.interactionService.triggerHover({ x, y });\n }\n\n public boxSelect(\n box: [number, number, number, number],\n cb: (...args: any[]) => void,\n ) {\n this.pickingService.boxPickLayer(this, box, cb);\n }\n\n public buildLayerModel(\n options: ILayerModelInitializationOptions &\n Partial<IModelInitializationOptions>,\n ): Promise<IModel> {\n const {\n moduleName,\n vertexShader,\n fragmentShader,\n triangulation,\n segmentNumber,\n workerEnabled = false,\n workerOptions,\n ...rest\n } = options;\n\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 return new Promise((resolve, reject) => {\n // filter supported worker & worker enabled layer\n if (\n workerOptions &&\n workerOptions.modelType in WorkerSourceMap &&\n workerEnabled\n ) {\n this.styleAttributeService\n .createAttributesAndIndicesAscy(\n this.encodedData,\n segmentNumber,\n workerOptions,\n )\n .then(({ attributes, elements }) => {\n const m = createModel({\n attributes,\n uniforms,\n fs,\n vs,\n elements,\n blend: BlendTypes[BlendType.normal],\n ...rest,\n });\n resolve(m);\n })\n .catch((err) => reject(err));\n } else {\n const {\n attributes,\n elements,\n } = this.styleAttributeService.createAttributesAndIndices(\n this.encodedData,\n triangulation,\n segmentNumber,\n );\n const m = createModel({\n attributes,\n uniforms,\n fs,\n vs,\n elements,\n blend: BlendTypes[BlendType.normal],\n ...rest,\n });\n resolve(m);\n }\n });\n }\n\n public createAttrubutes(\n options: ILayerModelInitializationOptions &\n Partial<IModelInitializationOptions>,\n ) {\n const { triangulation } = options;\n // @ts-ignore\n const { attributes } = this.styleAttributeService.createAttributes(\n this.encodedData,\n triangulation,\n );\n return attributes;\n }\n\n public getTime() {\n return this.layerService.clock.getDelta();\n }\n public setAnimateStartTime() {\n this.animateStartTime = this.layerService.clock.getElapsedTime();\n }\n public stopAnimate() {\n if (this.aniamateStatus) {\n this.layerService.stopAnimate();\n this.aniamateStatus = false;\n this.updateLayerConfig({\n animateOption: {\n enable: false,\n },\n });\n }\n }\n public getLayerAnimateTime(): number {\n return this.layerService.clock.getElapsedTime() - this.animateStartTime;\n }\n\n public needPick(type: string): boolean {\n const {\n enableHighlight = true,\n enableSelect = true,\n } = this.getLayerConfig();\n // 判断layer是否监听事件;\n let isPick =\n this.eventNames().indexOf(type) !== -1 ||\n this.eventNames().indexOf('un' + type) !== -1;\n if ((type === 'click' || type === 'dblclick') && enableSelect) {\n isPick = true;\n }\n if (\n type === 'mousemove' &&\n (enableHighlight ||\n this.eventNames().indexOf('mouseenter') !== -1 ||\n this.eventNames().indexOf('unmousemove') !== -1 ||\n this.eventNames().indexOf('mouseout') !== -1)\n ) {\n isPick = true;\n }\n return this.isVisible() && isPick;\n }\n\n public buildModels() {\n throw new Error('Method not implemented.');\n }\n public rebuildModels() {\n throw new Error('Method not implemented.');\n }\n\n public async renderMulPass(multiPassRenderer: IMultiPassRenderer) {\n await multiPassRenderer.render();\n }\n\n public renderModels(isPicking?: boolean) {\n // TODO: this.getEncodedData().length > 0 这个判断是为了解决在 2.5.x 引入数据纹理后产生的 空数据渲染导致 texture 超出上限问题\n if (this.getEncodedData() && this.getEncodedData().length > 0) {\n if (this.layerModelNeedUpdate && this.layerModel) {\n this.layerModel.buildModels((models: IModel[]) => {\n this.models = models;\n this.hooks.beforeRender.call();\n this.layerModelNeedUpdate = false;\n });\n }\n if (this.layerModel.renderUpdate) {\n this.layerModel.renderUpdate();\n }\n\n this.models.forEach((model) => {\n model.draw(\n {\n uniforms: this.layerModel.getUninforms(),\n },\n isPicking,\n );\n });\n }\n return this;\n }\n\n public updateStyleAttribute(\n type: string,\n field: StyleAttributeField,\n values?: StyleAttributeOption,\n updateOptions?: Partial<IStyleAttributeUpdateOptions>,\n ) {\n if (!this.inited) {\n this.pendingStyleAttributes.push({\n attributeName: type,\n attributeField: field,\n attributeValues: values,\n updateOptions,\n });\n } else {\n this.styleAttributeService.updateStyleAttribute(\n type,\n {\n // @ts-ignore\n scale: {\n field,\n ...this.splitValuesAndCallbackInAttribute(\n // @ts-ignore\n values,\n // @ts-ignore\n this.getLayerConfig()[field],\n ),\n },\n },\n // @ts-ignore\n updateOptions,\n );\n }\n }\n\n public getShaderPickStat() {\n return this.layerService.getShaderPickStat();\n }\n\n /**\n * 继承空方法\n * @param time\n */\n public setEarthTime(time: number) {\n console.warn('empty fn');\n }\n\n protected getConfigSchema() {\n throw new Error('Method not implemented.');\n }\n\n protected getModelType(): unknown {\n throw new Error('Method not implemented.');\n }\n protected getDefaultConfig() {\n return {};\n }\n\n private sourceEvent = () => {\n this.dataState.dataSourceNeedUpdate = true;\n const layerConfig = this.getLayerConfig();\n if (layerConfig && layerConfig.autoFit) {\n this.fitBounds(layerConfig.fitBoundsOptions);\n }\n // 对外暴露事件 迁移到 DataMappingPlugin generateMapping,保证在重新重新映射后触发\n // this.emit('dataUpdate');\n this.reRender();\n };\n\n private reRender() {\n if (this.inited) {\n this.layerService.updateLayerRenderList();\n this.layerService.renderLayers();\n }\n }\n private splitValuesAndCallbackInAttribute(\n valuesOrCallback?: unknown[],\n defaultValues?: unknown[],\n ) {\n return {\n values: isFunction(valuesOrCallback)\n ? undefined\n : valuesOrCallback || defaultValues,\n callback: isFunction(valuesOrCallback) ? valuesOrCallback : undefined,\n };\n }\n}\n"],"file":"BaseLayer.js"}
|
|
1
|
+
{"version":3,"sources":["../../src/core/BaseLayer.ts"],"names":["SyncBailHook","SyncHook","SyncWaterfallHook","BlendType","lazyInject","TYPES","Source","encodePickingColor","WorkerSourceMap","EventEmitter","BlendTypes","handleStyleDataMapping","calculateData","createMultiPassRenderer","normalizePasses","updateShape","layerIdCounter","BaseLayer","IGlobalConfigService","config","dataSourceNeedUpdate","dataMappingNeedUpdate","filterNeedUpdate","featureScaleNeedUpdate","StyleAttrNeedUpdate","init","afterInit","beforeRender","beforeRenderData","afterRender","beforePickingEncode","afterPickingEncode","beforeHighlight","afterHighlight","beforeSelect","afterSelect","beforeDestroy","afterDestroy","enable","dataState","layerConfig","getLayerConfig","autoFit","fitBounds","fitBoundsOptions","reRender","name","id","zIndex","rawConfig","maskLayer","masks","push","layerIndex","indexOf","splice","destroy","styleAttributeService","getLayerStyleAttribute","configService","configToUpdate","Object","keys","map","key","inited","needUpdateConfig","sceneId","container","get","SceneID","setLayerConfig","sceneContainer","color","bottomColor","plugin","plugins","layerType","iconService","IIconService","fontService","IFontService","rendererService","IRendererService","layerService","ILayerService","interactionService","IInteractionService","pickingService","IPickingService","mapService","IMapService","enableMultiPassRenderer","passes","length","on","renderLayers","cameraService","ICameraService","coordinateService","ICoordinateSystemService","shaderModuleService","IShaderModuleService","postProcessingPassFactory","IFactoryPostProcessingPass","normalPassFactory","IFactoryNormalPass","IStyleAttributeService","multiPassRenderer","IMultiPassRenderer","setLayer","pendingStyleAttributes","forEach","attributeName","attributeField","attributeValues","updateOptions","updateStyleAttribute","scale","field","splitValuesAndCallbackInAttribute","getAll","ILayerPlugin","apply","hooks","call","emit","target","type","data","attributes","elements","models","m","updateAttributesAndElements","console","warn","option","layerModel","createModelData","calEncodeData","calculateEncodeData","triangulation","createAttributesAndIndices","undefined","updateLayerConfig","getDefaultConfig","animateOption","startAnimate","aniamateStatus","values","lastShape","currentShape","shapeOption","tileLayer","options","rawAnimate","setSource","sourceOption","clusterZoom","layerSource","setData","currentSource","getSource","source","sourceEvent","lastConfig","rest","pass","postProcessingPass","getPostProcessor","getPostProcessingPassByName","styleNeedUpdate","mask","clearModels","buildModels","cfg","scaleOptions","rendering","render","getEncodedData","renderModels","getRenderFlag","activeOption","enableHighlight","highlightColor","mix","activeMix","x","y","pick","pickedFeatureID","then","setTimeout","enableSelect","selectColor","selectMix","blend","layerModelNeedUpdate","visible","clearCanvas","index","updateLayerRenderList","currentPickId","selectedFeatureID","zoom","getZoom","minZoom","Infinity","maxZoom","enableMultiPass","currentPasses","setRenderFlag","getViewportSize","width","height","resize","extent","isValid","some","v","Math","abs","refresh","isDestroied","layerChildren","child","off","clearAllAttributes","cleanRemove","removeAllListeners","model","getLayerStyleAttributes","filter","attribute","needRescale","needRemapping","needRegenerateVertices","cluster","updateClusterData","encodedData","getLayerAttributeScale","invertExtent","items","range","item","value","ticks","domain","triggerHover","box","cb","boxPickLayer","moduleName","vertexShader","fragmentShader","segmentNumber","workerEnabled","workerOptions","registerModule","vs","fs","getModule","uniforms","createModel","Promise","resolve","reject","modelType","createAttributesAndIndicesAscy","normal","catch","err","createAttributes","clock","getDelta","animateStartTime","getElapsedTime","stopAnimate","isPick","eventNames","isVisible","Error","isPicking","renderUpdate","draw","getUninforms","getShaderPickStat","time","valuesOrCallback","defaultValues","callback"],"mappings":"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","sourcesContent":["// @ts-ignore\nimport { SyncBailHook, SyncHook, SyncWaterfallHook } from '@antv/async-hook';\nimport {\n BlendType,\n gl,\n IActiveOption,\n IAnimateOption,\n IAttrubuteAndElements,\n ICameraService,\n ICoordinateSystemService,\n IDataState,\n IEncodeFeature,\n IFontService,\n IGlobalConfigService,\n IIconService,\n IInteractionService,\n ILayer,\n ILayerConfig,\n ILayerModel,\n ILayerModelInitializationOptions,\n ILayerPlugin,\n ILayerService,\n ILegendClassificaItem,\n ILegendSegmentItem,\n IMapService,\n IModel,\n IModelInitializationOptions,\n IMultiPassRenderer,\n IPass,\n IPickingService,\n IPostProcessingPass,\n IRendererService,\n IScale,\n IScaleOptions,\n IShaderModuleService,\n ISource,\n ISourceCFG,\n IStyleAttributeInitializationOptions,\n IStyleAttributeService,\n IStyleAttributeUpdateOptions,\n LayerEventType,\n lazyInject,\n LegendItems,\n ScaleAttributeType,\n ScaleTypeName,\n ScaleTypes,\n StyleAttributeField,\n StyleAttributeOption,\n Triangulation,\n TYPES,\n} from '@antv/l7-core';\nimport Source from '@antv/l7-source';\nimport { encodePickingColor, WorkerSourceMap } from '@antv/l7-utils';\nimport { EventEmitter } from 'eventemitter3';\nimport { Container } from 'inversify';\nimport { isFunction, isObject, isUndefined } from 'lodash';\nimport { BlendTypes } from '../utils/blend';\nimport { handleStyleDataMapping } from '../utils/dataMappingStyle';\nimport { calculateData } from '../utils/layerData';\nimport {\n createMultiPassRenderer,\n normalizePasses,\n} from '../utils/multiPassRender';\nimport { updateShape } from '../utils/updateShape';\n/**\n * 分配 layer id\n */\nlet layerIdCounter = 0;\n\nexport default class BaseLayer<ChildLayerStyleOptions = {}>\n extends EventEmitter<LayerEventType>\n implements ILayer {\n public id: string = `${layerIdCounter++}`;\n public name: string = `${layerIdCounter}`;\n public type: string;\n public visible: boolean = true;\n public zIndex: number = 0;\n public minZoom: number;\n public maxZoom: number;\n public inited: boolean = false;\n public layerModelNeedUpdate: boolean = false;\n public pickedFeatureID: number | null = null;\n public selectedFeatureID: number | null = null;\n public styleNeedUpdate: boolean = false;\n public rendering: boolean;\n public clusterZoom: number = 0; // 聚合等级标记\n public layerType?: string | undefined;\n public triangulation?: Triangulation | undefined;\n\n public dataState: IDataState = {\n dataSourceNeedUpdate: false,\n dataMappingNeedUpdate: false,\n filterNeedUpdate: false,\n featureScaleNeedUpdate: false,\n StyleAttrNeedUpdate: false,\n };\n // 生命周期钩子\n public hooks = {\n init: new SyncBailHook(),\n afterInit: new SyncBailHook(),\n beforeRender: new SyncBailHook(),\n beforeRenderData: new SyncWaterfallHook(),\n afterRender: new SyncHook(),\n beforePickingEncode: new SyncHook(),\n afterPickingEncode: new SyncHook(),\n beforeHighlight: new SyncHook(['pickedColor']),\n afterHighlight: new SyncHook(),\n beforeSelect: new SyncHook(['pickedColor']),\n afterSelect: new SyncHook(),\n beforeDestroy: new SyncHook(),\n afterDestroy: new SyncHook(),\n };\n\n // 待渲染 model 列表\n public models: IModel[] = [];\n\n // 每个 Layer 都有一个\n public multiPassRenderer: IMultiPassRenderer;\n\n // 注入插件集\n public plugins: ILayerPlugin[];\n\n public sourceOption: {\n data: any;\n options?: ISourceCFG;\n };\n\n public layerModel: ILayerModel;\n\n public shapeOption: {\n field: any;\n values: any;\n };\n\n // TODO: 记录 sceneContainer 供创建子图层的时候使用 如 imageTileLayer\n public sceneContainer: Container | undefined;\n public tileLayer: any | undefined;\n // TODO: 用于保存子图层对象\n public layerChildren: ILayer[] = [];\n public masks: ILayer[] = [];\n // Tip: 用于标识矢量图层\n public isVector: boolean = false;\n\n @lazyInject(TYPES.IGlobalConfigService)\n protected readonly configService: IGlobalConfigService;\n\n // @lazyInject(TYPES.IShaderModuleService)\n // protected readonly shaderModuleService: IShaderModuleService;\n\n protected shaderModuleService: IShaderModuleService;\n protected cameraService: ICameraService;\n\n protected coordinateService: ICoordinateSystemService;\n\n protected iconService: IIconService;\n\n protected fontService: IFontService;\n\n protected pickingService: IPickingService;\n\n protected rendererService: IRendererService;\n\n protected layerService: ILayerService;\n\n protected interactionService: IInteractionService;\n\n protected mapService: IMapService;\n\n protected styleAttributeService: IStyleAttributeService;\n\n protected layerSource: Source;\n\n protected postProcessingPassFactory: (\n name: string,\n ) => IPostProcessingPass<unknown>;\n protected normalPassFactory: (name: string) => IPass<unknown>;\n\n protected animateOptions: IAnimateOption = { enable: false };\n\n /**\n * 图层容器\n */\n private container: Container;\n\n private encodedData: IEncodeFeature[];\n\n private configSchema: object;\n\n private currentPickId: number | null = null;\n\n private rawConfig: Partial<ILayerConfig & ChildLayerStyleOptions>;\n\n private needUpdateConfig: Partial<ILayerConfig & ChildLayerStyleOptions>;\n\n /**\n * 待更新样式属性,在初始化阶段完成注册\n */\n private pendingStyleAttributes: Array<{\n attributeName: string;\n attributeField: StyleAttributeField;\n attributeValues?: StyleAttributeOption;\n defaultName?: string;\n updateOptions?: Partial<IStyleAttributeUpdateOptions>;\n }> = [];\n\n private scaleOptions: IScaleOptions = {};\n\n private animateStartTime: number;\n\n private aniamateStatus: boolean = false;\n\n // TODO: layer 保底颜色\n private bottomColor = 'rgba(0, 0, 0, 0)';\n\n private isDestroied: boolean = false;\n\n // private pickingPassRender: IPass<'pixelPicking'>;\n\n constructor(config: Partial<ILayerConfig & ChildLayerStyleOptions> = {}) {\n super();\n this.name = config.name || this.id;\n this.zIndex = config.zIndex || 0;\n this.rawConfig = config;\n }\n\n public addMaskLayer(maskLayer: ILayer) {\n this.masks.push(maskLayer);\n }\n\n public removeMaskLayer(maskLayer: ILayer) {\n const layerIndex = this.masks.indexOf(maskLayer);\n if (layerIndex > -1) {\n this.masks.splice(layerIndex, 1);\n }\n maskLayer.destroy();\n }\n\n public getAttribute(name: string) {\n return this.styleAttributeService.getLayerStyleAttribute(name);\n }\n\n public getLayerConfig() {\n return this.configService.getLayerConfig<ChildLayerStyleOptions>(this.id);\n }\n\n public updateLayerConfig(\n configToUpdate: Partial<ILayerConfig | ChildLayerStyleOptions>,\n ) {\n // 同步 rawConfig\n Object.keys(configToUpdate).map((key) => {\n if (key in this.rawConfig) {\n // @ts-ignore\n this.rawConfig[key] = configToUpdate[key];\n }\n });\n if (!this.inited) {\n this.needUpdateConfig = {\n ...this.needUpdateConfig,\n ...configToUpdate,\n };\n } else {\n const sceneId = this.container.get<string>(TYPES.SceneID);\n\n // @ts-ignore\n handleStyleDataMapping(configToUpdate, this); // 处理 style 中进行数据映射的属性字段\n\n this.configService.setLayerConfig(sceneId, this.id, {\n ...this.configService.getLayerConfig(this.id),\n ...this.needUpdateConfig,\n ...configToUpdate,\n });\n this.needUpdateConfig = {};\n }\n }\n\n /**\n * 注入图层容器,父容器为场景容器\n * RootContainer 1\n * -> SceneContainer 1.*\n * -> LayerContainer 1.*\n */\n public setContainer(container: Container, sceneContainer: Container) {\n this.container = container;\n this.sceneContainer = sceneContainer;\n }\n\n public getContainer() {\n return this.container;\n }\n\n public setBottomColor(color: string) {\n this.bottomColor = color;\n }\n\n public getBottomColor() {\n return this.bottomColor;\n }\n\n public addPlugin(plugin: ILayerPlugin): ILayer {\n // TODO: 控制插件注册顺序\n // @example:\n // pointLayer.addPlugin(new MyCustomPlugin(), {\n // before: 'L7BuiltinPlugin'\n // });\n this.plugins.push(plugin);\n return this;\n }\n\n public init() {\n // 设置配置项\n const sceneId = this.container.get<string>(TYPES.SceneID);\n // 初始化图层配置项\n // const { enableMultiPassRenderer = false } = this.rawConfig;\n // this.configService.setLayerConfig(sceneId, this.id, {\n // enableMultiPassRenderer,\n // });\n this.configService.setLayerConfig(sceneId, this.id, this.rawConfig);\n this.layerType = this.rawConfig.layerType;\n\n // 全局容器服务\n\n // 场景容器服务\n this.iconService = this.container.get<IIconService>(TYPES.IIconService);\n this.fontService = this.container.get<IFontService>(TYPES.IFontService);\n\n this.rendererService = this.container.get<IRendererService>(\n TYPES.IRendererService,\n );\n this.layerService = this.container.get<ILayerService>(TYPES.ILayerService);\n this.interactionService = this.container.get<IInteractionService>(\n TYPES.IInteractionService,\n );\n\n this.pickingService = this.container.get<IPickingService>(\n TYPES.IPickingService,\n );\n this.mapService = this.container.get<IMapService>(TYPES.IMapService);\n const { enableMultiPassRenderer, passes } = this.getLayerConfig();\n if (enableMultiPassRenderer && passes?.length && passes.length > 0) {\n // Tip: 兼容 multiPassRender 在 amap1 时存在的图层不同步问题 zoom\n this.mapService.on('mapAfterFrameChange', () => {\n this.renderLayers();\n });\n }\n\n this.cameraService = this.container.get<ICameraService>(\n TYPES.ICameraService,\n );\n this.coordinateService = this.container.get<ICoordinateSystemService>(\n TYPES.ICoordinateSystemService,\n );\n this.shaderModuleService = this.container.get<IShaderModuleService>(\n TYPES.IShaderModuleService,\n );\n this.postProcessingPassFactory = this.container.get(\n TYPES.IFactoryPostProcessingPass,\n );\n this.normalPassFactory = this.container.get(TYPES.IFactoryNormalPass);\n\n // 图层容器服务\n this.styleAttributeService = this.container.get<IStyleAttributeService>(\n TYPES.IStyleAttributeService,\n );\n this.multiPassRenderer = this.container.get<IMultiPassRenderer>(\n TYPES.IMultiPassRenderer,\n );\n this.multiPassRenderer.setLayer(this);\n\n // 完成样式服务注册完成前添加的属性\n this.pendingStyleAttributes.forEach(\n ({ attributeName, attributeField, attributeValues, updateOptions }) => {\n this.styleAttributeService.updateStyleAttribute(\n attributeName,\n {\n // @ts-ignore\n scale: {\n field: attributeField,\n ...this.splitValuesAndCallbackInAttribute(\n // @ts-ignore\n attributeValues,\n // @ts-ignore\n this.getLayerConfig()[attributeName],\n ),\n },\n },\n // @ts-ignore\n updateOptions,\n );\n },\n );\n this.pendingStyleAttributes = [];\n\n // 获取插件集\n this.plugins = this.container.getAll<ILayerPlugin>(TYPES.ILayerPlugin);\n // 完成插件注册,传入场景和图层容器内的服务\n for (const plugin of this.plugins) {\n plugin.apply(this, {\n rendererService: this.rendererService,\n mapService: this.mapService,\n styleAttributeService: this.styleAttributeService,\n normalPassFactory: this.normalPassFactory,\n postProcessingPassFactory: this.postProcessingPassFactory,\n });\n }\n\n // 触发 init 生命周期插件\n this.hooks.init.call();\n // this.pickingPassRender = this.normalPassFactory('pixelPicking');\n // this.pickingPassRender.init(this);\n this.hooks.afterInit.call();\n // 触发初始化完成事件;\n this.emit('inited', {\n target: this,\n type: 'inited',\n });\n this.emit('add', {\n target: this,\n type: 'add',\n });\n\n return this;\n }\n\n public updateModelData(data: IAttrubuteAndElements) {\n if (data.attributes && data.elements) {\n this.models.map((m) => {\n m.updateAttributesAndElements(data.attributes, data.elements);\n });\n } else {\n console.warn('data error');\n }\n }\n\n public createModelData(data: any, option?: ISourceCFG) {\n if (this.layerModel?.createModelData) {\n // 在某些特殊图层中单独构建 attribute & elements\n return this.layerModel.createModelData(option);\n }\n const calEncodeData = this.calculateEncodeData(data, option);\n const triangulation = this.triangulation;\n\n if (calEncodeData && triangulation) {\n return this.styleAttributeService.createAttributesAndIndices(\n calEncodeData,\n triangulation,\n );\n } else {\n return {\n attributes: undefined,\n elements: undefined,\n };\n }\n }\n\n public calculateEncodeData(data: any, option?: ISourceCFG) {\n if (this.inited) {\n return calculateData(\n this,\n this.fontService,\n this.mapService,\n this.styleAttributeService,\n data,\n option,\n );\n } else {\n console.warn('layer not inited!');\n return null;\n }\n }\n /**\n * Model初始化前需要更新Model样式\n */\n public prepareBuildModel() {\n this.inited = true;\n this.updateLayerConfig({\n ...(this.getDefaultConfig() as object),\n ...this.rawConfig,\n });\n\n // 启动动画\n const { animateOption } = this.getLayerConfig();\n if (animateOption?.enable) {\n this.layerService.startAnimate();\n this.aniamateStatus = true;\n }\n }\n public color(\n field: StyleAttributeField,\n values?: StyleAttributeOption,\n updateOptions?: Partial<IStyleAttributeUpdateOptions>,\n ) {\n // 设置 color、size、shape、style 时由于场景服务尚未完成(并没有调用 scene.addLayer),因此暂时加入待更新属性列表\n this.updateStyleAttribute('color', field, values, updateOptions);\n\n // this.pendingStyleAttributes.push({\n // attributeName: 'color',\n // attributeField: field,\n // attributeValues: values,\n // defaultName: 'colors',\n // updateOptions,\n // });\n return this;\n }\n\n // 为对应的图层传入纹理的编号名称(point/image 在 shape 方法中传入纹理名称的方法并不通用)\n public texture(\n field: StyleAttributeField,\n values?: StyleAttributeOption,\n updateOptions?: Partial<IStyleAttributeUpdateOptions>,\n ) {\n this.updateStyleAttribute('texture', field, values, updateOptions);\n return this;\n }\n\n public rotate(\n field: StyleAttributeField,\n values?: StyleAttributeOption,\n updateOptions?: Partial<IStyleAttributeUpdateOptions>,\n ) {\n this.updateStyleAttribute('rotate', field, values, updateOptions);\n return this;\n }\n public size(\n field: StyleAttributeField,\n values?: StyleAttributeOption,\n updateOptions?: Partial<IStyleAttributeUpdateOptions>,\n ) {\n this.updateStyleAttribute('size', field, values, updateOptions);\n return this;\n }\n // 对mapping后的数据过滤,scale保持不变\n public filter(\n field: StyleAttributeField,\n values?: StyleAttributeOption,\n updateOptions?: Partial<IStyleAttributeUpdateOptions>,\n ) {\n this.updateStyleAttribute('filter', field, values, updateOptions);\n return this;\n }\n\n public shape(\n field: StyleAttributeField,\n values?: StyleAttributeOption,\n updateOptions?: Partial<IStyleAttributeUpdateOptions>,\n ) {\n const lastShape = this.styleAttributeService?.getLayerStyleAttribute(\n 'shape',\n )?.scale?.field;\n const currentShape = field;\n this.shapeOption = {\n field,\n values,\n };\n this.updateStyleAttribute('shape', field, values, updateOptions);\n // TODO: 根据 shape 判断是否需要更新 model\n if (!this.tileLayer) {\n updateShape(this, lastShape, currentShape);\n }\n return this;\n }\n public label(\n field: StyleAttributeField,\n values?: StyleAttributeOption,\n updateOptions?: Partial<IStyleAttributeUpdateOptions>,\n ) {\n this.pendingStyleAttributes.push({\n attributeName: 'label',\n attributeField: field,\n attributeValues: values,\n updateOptions,\n });\n return this;\n }\n public animate(options: IAnimateOption | boolean) {\n let rawAnimate: Partial<IAnimateOption> = {};\n if (isObject(options)) {\n rawAnimate.enable = true;\n rawAnimate = {\n ...rawAnimate,\n ...options,\n };\n } else {\n rawAnimate.enable = options;\n }\n this.updateLayerConfig({\n animateOption: rawAnimate,\n });\n // this.animateOptions = options;\n return this;\n }\n\n public source(data: any, options?: ISourceCFG): ILayer {\n if (data?.data) {\n // 判断是否为source\n this.setSource(data);\n return this;\n }\n this.sourceOption = {\n data,\n options,\n };\n this.clusterZoom = 0;\n return this;\n }\n\n public setData(data: any, options?: ISourceCFG) {\n if (this.inited) {\n this.layerSource.setData(data, options);\n } else {\n this.on('inited', () => {\n const currentSource = this.getSource();\n if (!currentSource) {\n // 执行 setData 的时候 source 还不存在(还未执行 addLayer)\n this.source(new Source(data, options));\n this.sourceEvent();\n } else {\n this.layerSource.setData(data, options);\n }\n // this.layerSource.setData(data, options);\n });\n }\n\n return this;\n }\n public style(\n options: Partial<ChildLayerStyleOptions> & Partial<ILayerConfig>,\n ): ILayer {\n const lastConfig = this.getLayerConfig();\n const { passes, ...rest } = options;\n\n // passes 特殊处理\n if (passes) {\n normalizePasses(passes).forEach(\n (pass: [string, { [key: string]: unknown }]) => {\n const postProcessingPass = this.multiPassRenderer\n .getPostProcessor()\n .getPostProcessingPassByName(pass[0]);\n if (postProcessingPass) {\n postProcessingPass.updateOptions(pass[1]);\n }\n },\n );\n }\n\n this.rawConfig = {\n ...this.rawConfig,\n ...rest,\n };\n if (this.container) {\n this.updateLayerConfig(this.rawConfig);\n this.styleNeedUpdate = true;\n }\n\n // @ts-ignore\n if (lastConfig && lastConfig.mask === true && options.mask === false) {\n this.clearModels();\n this.layerModel.buildModels((models) => {\n this.models = models;\n });\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 (this.tileLayer !== undefined) {\n // 瓦片图层执行单独的 render 渲染队列\n this.tileLayer.render();\n return this;\n }\n // TODO: this.getEncodedData().length !== 0 这个判断是为了解决在 2.5.x 引入数据纹理后产生的 空数据渲染导致 texture 超出上限问题\n if (this.getEncodedData() && this.getEncodedData().length !== 0) {\n this.renderModels();\n }\n return this;\n }\n\n /**\n * renderMultiPass 专门用于渲染支持 multipass 的 layer\n */\n public async renderMultiPass() {\n if (this.getEncodedData() && this.getEncodedData().length !== 0) {\n if (this.multiPassRenderer && this.multiPassRenderer.getRenderFlag()) {\n // multi render 开始执行 multiPassRender 的渲染流程\n await this.multiPassRenderer.render();\n } else if (this.multiPassRenderer) {\n // renderPass 触发的渲染\n this.renderModels();\n } else {\n this.renderModels();\n }\n }\n }\n\n public active(options: IActiveOption | boolean) {\n const activeOption: Partial<ILayerConfig> = {};\n activeOption.enableHighlight = isObject(options) ? true : options;\n if (isObject(options)) {\n activeOption.enableHighlight = true;\n if (options.color) {\n activeOption.highlightColor = options.color;\n }\n if (options.mix) {\n activeOption.activeMix = options.mix;\n }\n } else {\n activeOption.enableHighlight = !!options;\n }\n this.updateLayerConfig(activeOption);\n return this;\n }\n public setActive(\n id: number | { x: number; y: number },\n options?: IActiveOption,\n ): void {\n if (isObject(id)) {\n const { x = 0, y = 0 } = id;\n this.updateLayerConfig({\n highlightColor: isObject(options)\n ? options.color\n : this.getLayerConfig().highlightColor,\n activeMix: isObject(options)\n ? options.mix\n : this.getLayerConfig().activeMix,\n });\n this.pick({ x, y });\n } else {\n this.updateLayerConfig({\n pickedFeatureID: id,\n highlightColor: isObject(options)\n ? options.color\n : this.getLayerConfig().highlightColor,\n activeMix: isObject(options)\n ? options.mix\n : this.getLayerConfig().activeMix,\n });\n this.hooks.beforeSelect\n .call(encodePickingColor(id as number) as number[])\n // @ts-ignore\n .then(() => {\n setTimeout(() => {\n this.reRender();\n }, 1);\n });\n }\n }\n\n public select(option: IActiveOption | boolean): ILayer {\n const activeOption: Partial<ILayerConfig> = {};\n activeOption.enableSelect = isObject(option) ? true : option;\n if (isObject(option)) {\n activeOption.enableSelect = true;\n if (option.color) {\n activeOption.selectColor = option.color;\n }\n if (option.mix) {\n activeOption.selectMix = option.mix;\n }\n } else {\n activeOption.enableSelect = !!option;\n }\n this.updateLayerConfig(activeOption);\n return this;\n }\n\n public setSelect(\n id: number | { x: number; y: number },\n options?: IActiveOption,\n ): void {\n if (isObject(id)) {\n const { x = 0, y = 0 } = id;\n this.updateLayerConfig({\n selectColor: isObject(options)\n ? options.color\n : this.getLayerConfig().selectColor,\n selectMix: isObject(options)\n ? options.mix\n : this.getLayerConfig().selectMix,\n });\n this.pick({ x, y });\n } else {\n this.updateLayerConfig({\n pickedFeatureID: id,\n selectColor: isObject(options)\n ? options.color\n : this.getLayerConfig().selectColor,\n selectMix: isObject(options)\n ? options.mix\n : this.getLayerConfig().selectMix,\n });\n this.hooks.beforeSelect\n .call(encodePickingColor(id as number) as number[])\n // @ts-ignore\n .then(() => {\n setTimeout(() => {\n this.reRender();\n }, 1);\n });\n }\n }\n public setBlend(type: keyof typeof BlendType): ILayer {\n this.updateLayerConfig({\n blend: type,\n });\n this.layerModelNeedUpdate = true;\n this.reRender();\n return this;\n }\n public show(): ILayer {\n this.updateLayerConfig({\n visible: true,\n });\n this.reRender();\n return this;\n }\n\n public hide(): ILayer {\n if (this.type === 'CanvasLayer' && this.layerModel.clearCanvas) {\n // 对 canvasLayer 的 hide 操作做特殊处理\n this.layerModel.clearCanvas();\n }\n this.updateLayerConfig({\n visible: false,\n });\n this.reRender();\n return this;\n }\n public setIndex(index: number): ILayer {\n this.zIndex = index;\n this.layerService.updateLayerRenderList();\n this.layerService.renderLayers();\n return this;\n }\n\n public setCurrentPickId(id: number) {\n this.currentPickId = id;\n }\n\n public getCurrentPickId(): number | null {\n return this.currentPickId;\n }\n\n public setCurrentSelectedId(id: number) {\n this.selectedFeatureID = id;\n }\n\n public getCurrentSelectedId(): number | null {\n return this.selectedFeatureID;\n }\n public isVisible(): boolean {\n const zoom = this.mapService.getZoom();\n const {\n visible,\n minZoom = -Infinity,\n maxZoom = Infinity,\n } = this.getLayerConfig();\n return !!visible && zoom >= minZoom && zoom <= maxZoom;\n }\n\n public setMultiPass(\n enableMultiPass: boolean,\n currentPasses?: Array<string | [string, { [key: string]: unknown }]>,\n ) {\n this.updateLayerConfig({\n enableMultiPassRenderer: enableMultiPass,\n });\n if (currentPasses) {\n this.updateLayerConfig({\n passes: currentPasses,\n });\n }\n\n if (enableMultiPass) {\n const { passes = [] } = this.getLayerConfig();\n this.multiPassRenderer = createMultiPassRenderer(\n this,\n passes,\n this.postProcessingPassFactory,\n this.normalPassFactory,\n );\n this.multiPassRenderer.setRenderFlag(true);\n const { width, height } = this.rendererService.getViewportSize();\n this.multiPassRenderer.resize(width, height);\n }\n\n return this;\n }\n\n public setMinZoom(minZoom: number): ILayer {\n this.updateLayerConfig({\n minZoom,\n });\n return this;\n }\n\n public getMinZoom(): number {\n const { minZoom } = this.getLayerConfig();\n return minZoom as number;\n }\n\n public getMaxZoom(): number {\n const { maxZoom } = this.getLayerConfig();\n return maxZoom as number;\n }\n\n public get(name: string) {\n const cfg = this.getLayerConfig();\n // @ts-ignore\n return cfg[name];\n }\n\n public setMaxZoom(maxZoom: number): ILayer {\n this.updateLayerConfig({\n maxZoom,\n });\n return this;\n }\n\n public setAutoFit(autoFit: boolean): ILayer {\n this.updateLayerConfig({\n autoFit,\n });\n return this;\n }\n\n /**\n * zoom to layer Bounds\n */\n public fitBounds(fitBoundsOptions?: unknown): ILayer {\n if (!this.inited) {\n this.updateLayerConfig({\n autoFit: true,\n });\n return this;\n }\n const source = this.getSource();\n const extent = source.extent;\n const isValid = extent.some((v) => Math.abs(v) === Infinity);\n if (isValid) {\n return this;\n }\n this.mapService.fitBounds(\n [\n [extent[0], extent[1]],\n [extent[2], extent[3]],\n ],\n fitBoundsOptions,\n );\n return this;\n }\n\n public destroy(refresh = true) {\n if (this.isDestroied) {\n return;\n }\n\n // remove child layer\n this.layerChildren.map((child: ILayer) => child.destroy());\n this.layerChildren = [];\n\n // remove mask list\n this.masks.map((mask: ILayer) => mask.destroy());\n this.masks = [];\n\n this.hooks.beforeDestroy.call();\n // 清除sources事件\n this.layerSource.off('sourceUpdate', this.sourceEvent);\n\n this.multiPassRenderer.destroy();\n // console.log(this.styleAttributeService.getAttributes())\n // 清除所有属性以及关联的 vao == 销毁所有 => model this.models.forEach((model) => model.destroy());\n this.styleAttributeService.clearAllAttributes();\n\n // 执行每个图层单独的 clearModels 方法 (清除一些额外的 texture、program、buffer 等)\n\n this.hooks.afterDestroy.call();\n\n // TODO: 清除各个图层自定义的 models 资源\n this.layerModel?.clearModels();\n\n this.models = [];\n\n this.layerService.cleanRemove(this, refresh);\n\n this.emit('remove', {\n target: this,\n type: 'remove',\n });\n\n this.emit('destroy', {\n target: this,\n type: 'destroy',\n });\n\n this.removeAllListeners();\n // 解绑图层容器中的服务\n // this.container.unbind(TYPES.IStyleAttributeService);\n\n this.isDestroied = true;\n }\n public clear() {\n this.styleAttributeService.clearAllAttributes();\n // 销毁所有 model\n }\n public clearModels() {\n this.models.forEach((model) => model.destroy());\n this.layerModel?.clearModels();\n this.models = [];\n }\n\n public isDirty() {\n return !!(\n this.styleAttributeService.getLayerStyleAttributes() || []\n ).filter(\n (attribute) =>\n attribute.needRescale ||\n attribute.needRemapping ||\n attribute.needRegenerateVertices,\n ).length;\n }\n\n public setSource(source: Source) {\n // 清除旧 sources 事件\n if (this.layerSource) {\n this.layerSource.off('sourceUpdate', this.sourceEvent);\n }\n\n this.layerSource = source;\n this.clusterZoom = 0;\n\n // 已 inited 且启用聚合进行更新聚合数据\n if (this.inited && this.layerSource.cluster) {\n const zoom = this.mapService.getZoom();\n this.layerSource.updateClusterData(zoom);\n }\n // source 可能会复用,会在其它layer被修改\n if (this.layerSource.inited) {\n this.sourceEvent();\n }\n // this.layerSource.inited 为 true 后,sourceUpdate 事件不会再触发\n this.layerSource.on('sourceUpdate', () => {\n this.sourceEvent();\n });\n }\n public getSource() {\n return this.layerSource;\n }\n\n public getScaleOptions() {\n return this.scaleOptions;\n }\n\n public setEncodedData(encodedData: IEncodeFeature[]) {\n this.encodedData = encodedData;\n }\n public getEncodedData() {\n return this.encodedData;\n }\n\n public getScale(name: string): any {\n return this.styleAttributeService.getLayerAttributeScale(name);\n }\n\n public getLegendItems(name: string): LegendItems {\n const scale = this.styleAttributeService.getLayerAttributeScale(name);\n\n // 函数自定义映射,没有 scale 返回为空数组\n if (!scale) {\n return [];\n }\n\n if (scale.invertExtent) {\n // 分段类型 Quantize、Quantile、Threshold\n const items: ILegendSegmentItem[] = scale.range().map((item: number) => {\n return {\n value: scale.invertExtent(item),\n [name]: item,\n };\n });\n\n return items;\n } else if (scale.ticks) {\n // 连续类型 Continuous (Linear, Power, Log, Identity, Time)\n const items: ILegendClassificaItem[] = scale\n .ticks()\n .map((item: string) => {\n return {\n value: item,\n [name]: scale(item),\n };\n });\n\n return items;\n } else if (scale?.domain) {\n // 枚举类型 Cat\n const items: ILegendClassificaItem[] = scale\n .domain()\n .filter((item: string | number | undefined) => !isUndefined(item))\n .map((item: string | number) => {\n return {\n value: item,\n [name]: scale(item) as string,\n };\n });\n\n return items;\n }\n\n return [];\n }\n\n public pick({ x, y }: { x: number; y: number }) {\n this.interactionService.triggerHover({ x, y });\n }\n\n public boxSelect(\n box: [number, number, number, number],\n cb: (...args: any[]) => void,\n ) {\n this.pickingService.boxPickLayer(this, box, cb);\n }\n\n public buildLayerModel(\n options: ILayerModelInitializationOptions &\n Partial<IModelInitializationOptions>,\n ): Promise<IModel> {\n const {\n moduleName,\n vertexShader,\n fragmentShader,\n triangulation,\n segmentNumber,\n workerEnabled = false,\n workerOptions,\n ...rest\n } = options;\n\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 return new Promise((resolve, reject) => {\n // filter supported worker & worker enabled layer\n if (\n workerOptions &&\n workerOptions.modelType in WorkerSourceMap &&\n workerEnabled\n ) {\n this.styleAttributeService\n .createAttributesAndIndicesAscy(\n this.encodedData,\n segmentNumber,\n workerOptions,\n )\n .then(({ attributes, elements }) => {\n const m = createModel({\n attributes,\n uniforms,\n fs,\n vs,\n elements,\n blend: BlendTypes[BlendType.normal],\n ...rest,\n });\n resolve(m);\n })\n .catch((err) => reject(err));\n } else {\n const {\n attributes,\n elements,\n } = this.styleAttributeService.createAttributesAndIndices(\n this.encodedData,\n triangulation,\n segmentNumber,\n );\n const m = createModel({\n attributes,\n uniforms,\n fs,\n vs,\n elements,\n blend: BlendTypes[BlendType.normal],\n ...rest,\n });\n resolve(m);\n }\n });\n }\n\n public createAttrubutes(\n options: ILayerModelInitializationOptions &\n Partial<IModelInitializationOptions>,\n ) {\n const { triangulation } = options;\n // @ts-ignore\n const { attributes } = this.styleAttributeService.createAttributes(\n this.encodedData,\n triangulation,\n );\n return attributes;\n }\n\n public getTime() {\n return this.layerService.clock.getDelta();\n }\n public setAnimateStartTime() {\n this.animateStartTime = this.layerService.clock.getElapsedTime();\n }\n public stopAnimate() {\n if (this.aniamateStatus) {\n this.layerService.stopAnimate();\n this.aniamateStatus = false;\n this.updateLayerConfig({\n animateOption: {\n enable: false,\n },\n });\n }\n }\n public getLayerAnimateTime(): number {\n return this.layerService.clock.getElapsedTime() - this.animateStartTime;\n }\n\n public needPick(type: string): boolean {\n const {\n enableHighlight = true,\n enableSelect = true,\n } = this.getLayerConfig();\n // 判断layer是否监听事件;\n let isPick =\n this.eventNames().indexOf(type) !== -1 ||\n this.eventNames().indexOf('un' + type) !== -1;\n if ((type === 'click' || type === 'dblclick') && enableSelect) {\n isPick = true;\n }\n if (\n type === 'mousemove' &&\n (enableHighlight ||\n this.eventNames().indexOf('mouseenter') !== -1 ||\n this.eventNames().indexOf('unmousemove') !== -1 ||\n this.eventNames().indexOf('mouseout') !== -1)\n ) {\n isPick = true;\n }\n return this.isVisible() && isPick;\n }\n\n public buildModels() {\n throw new Error('Method not implemented.');\n }\n public rebuildModels() {\n throw new Error('Method not implemented.');\n }\n\n public async renderMulPass(multiPassRenderer: IMultiPassRenderer) {\n await multiPassRenderer.render();\n }\n\n public renderModels(isPicking?: boolean) {\n // TODO: this.getEncodedData().length > 0 这个判断是为了解决在 2.5.x 引入数据纹理后产生的 空数据渲染导致 texture 超出上限问题\n if (this.getEncodedData() && this.getEncodedData().length > 0) {\n if (this.layerModelNeedUpdate && this.layerModel) {\n this.layerModel.buildModels((models: IModel[]) => {\n this.models = models;\n this.hooks.beforeRender.call();\n this.layerModelNeedUpdate = false;\n });\n }\n if (this?.layerModel?.renderUpdate) {\n this.layerModel.renderUpdate();\n }\n\n this.models.forEach((model) => {\n model.draw(\n {\n uniforms: this.layerModel.getUninforms(),\n },\n isPicking,\n );\n });\n }\n return this;\n }\n\n public updateStyleAttribute(\n type: string,\n field: StyleAttributeField,\n values?: StyleAttributeOption,\n updateOptions?: Partial<IStyleAttributeUpdateOptions>,\n ) {\n if (!this.inited) {\n this.pendingStyleAttributes.push({\n attributeName: type,\n attributeField: field,\n attributeValues: values,\n updateOptions,\n });\n } else {\n this.styleAttributeService.updateStyleAttribute(\n type,\n {\n // @ts-ignore\n scale: {\n field,\n ...this.splitValuesAndCallbackInAttribute(\n // @ts-ignore\n values,\n // @ts-ignore\n this.getLayerConfig()[field],\n ),\n },\n },\n // @ts-ignore\n updateOptions,\n );\n }\n }\n\n public getShaderPickStat() {\n return this.layerService.getShaderPickStat();\n }\n\n /**\n * 继承空方法\n * @param time\n */\n public setEarthTime(time: number) {\n console.warn('empty fn');\n }\n\n protected getConfigSchema() {\n throw new Error('Method not implemented.');\n }\n\n protected getModelType(): unknown {\n throw new Error('Method not implemented.');\n }\n protected getDefaultConfig() {\n return {};\n }\n\n private sourceEvent = () => {\n this.dataState.dataSourceNeedUpdate = true;\n const layerConfig = this.getLayerConfig();\n if (layerConfig && layerConfig.autoFit) {\n this.fitBounds(layerConfig.fitBoundsOptions);\n }\n // 对外暴露事件 迁移到 DataMappingPlugin generateMapping,保证在重新重新映射后触发\n // this.emit('dataUpdate');\n this.reRender();\n };\n\n private reRender() {\n if (this.inited) {\n this.layerService.updateLayerRenderList();\n this.layerService.renderLayers();\n }\n }\n private splitValuesAndCallbackInAttribute(\n valuesOrCallback?: unknown[],\n defaultValues?: unknown[],\n ) {\n return {\n values: isFunction(valuesOrCallback)\n ? undefined\n : valuesOrCallback || defaultValues,\n callback: isFunction(valuesOrCallback) ? valuesOrCallback : undefined,\n };\n }\n}\n"],"file":"BaseLayer.js"}
|
package/es/core/interface.d.ts
CHANGED
|
@@ -128,11 +128,24 @@ export interface IWindLayerStyleOptions {
|
|
|
128
128
|
[key: number]: string;
|
|
129
129
|
};
|
|
130
130
|
sizeScale?: number;
|
|
131
|
+
mask?: boolean;
|
|
132
|
+
maskInside?: boolean;
|
|
131
133
|
}
|
|
132
134
|
export interface IImageLayerStyleOptions {
|
|
133
135
|
opacity: number;
|
|
134
136
|
mask?: boolean;
|
|
135
137
|
maskInside?: boolean;
|
|
138
|
+
domain?: [number, number];
|
|
139
|
+
noDataValue?: number;
|
|
140
|
+
clampLow?: boolean;
|
|
141
|
+
clampHigh?: boolean;
|
|
142
|
+
rampColors?: IColorRamp;
|
|
143
|
+
rampColorsData?: ImageData | IImagedata;
|
|
144
|
+
pixelConstant?: number;
|
|
145
|
+
pixelConstantR?: number;
|
|
146
|
+
pixelConstantG?: number;
|
|
147
|
+
pixelConstantB?: number;
|
|
148
|
+
pixelConstantRGB?: number;
|
|
136
149
|
}
|
|
137
150
|
export interface IGeometryLayerStyleOptions {
|
|
138
151
|
opacity: number;
|
package/es/core/interface.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/core/interface.ts"],"names":["lineStyleType","CanvasUpdateType"],"mappings":"AAIA,WAAYA,aAAZ;;WAAYA,a;AAAAA,EAAAA,a,CAAAA,a;AAAAA,EAAAA,a,CAAAA,a;GAAAA,a,KAAAA,a;;
|
|
1
|
+
{"version":3,"sources":["../../src/core/interface.ts"],"names":["lineStyleType","CanvasUpdateType"],"mappings":"AAIA,WAAYA,aAAZ;;WAAYA,a;AAAAA,EAAAA,a,CAAAA,a;AAAAA,EAAAA,a,CAAAA,a;GAAAA,a,KAAAA,a;;AA2NZ,WAAYC,gBAAZ;;WAAYA,gB;AAAAA,EAAAA,gB;AAAAA,EAAAA,gB;GAAAA,gB,KAAAA,gB","sourcesContent":["import { IAnimateOption, IMapService } from '@antv/l7-core';\nimport { IColorRamp, IImagedata } from '@antv/l7-utils';\nimport { styleOffset, styleSingle } from '../core/BaseModel';\nimport { anchorType } from '../utils/symbol-layout';\nexport enum lineStyleType {\n 'solid' = 0.0,\n 'dash' = 1.0,\n}\n\ninterface ILineArrow {\n enable: boolean;\n arrowWidth: number;\n arrowHeight: number;\n tailWidth: number;\n}\n\nexport interface ILineLayerStyleOptions {\n tileOrigin?: number[];\n coord?: string;\n\n opacity: styleSingle;\n lineType?: keyof typeof lineStyleType; // 可选参数、线类型(all - dash/solid)\n dashArray?: [number, number]; // 可选参数、虚线间隔\n segmentNumber?: number;\n\n depth?: boolean;\n forward?: boolean; // 可选参数、是否反向(arcLine)\n lineTexture?: boolean; // 可选参数、是否开启纹理贴图功能(all)\n iconStep?: number; // 可选参数、纹理贴图步长(all)\n iconStepCount?: number; // 可选参数、纹理贴图间隔\n textureBlend?: string; // 可选参数、供给纹理贴图使用(all)\n sourceColor?: string; // 可选参数、设置渐变色的起始颜色(all)\n targetColor?: string; // 可选参数、设置渐变色的终点颜色(all)\n thetaOffset?: number; // 可选参数、设置弧线的偏移量\n\n globalArcHeight?: number; // 可选参数、地球模式下 3D 弧线的高度\n vertexHeightScale?: number; // 可选参数、lineLayer vertex height scale\n\n borderWidth?: number; // 可选参数 线边框宽度\n borderColor?: string; // 可选参数 线边框颜色\n\n heightfixed?: boolean; // 可选参数 高度是否固定\n raisingHeight?: number; // 线图层抬升高度\n\n mask?: boolean; // 可选参数 时候允许蒙层\n maskInside?: boolean; // 可选参数 控制图层是否显示在蒙层的内部\n\n arrow?: ILineArrow;\n\n rampColors?: IColorRamp;\n featureId?: string;\n sourceLayer?: string;\n enablePicking?: boolean;\n workerEnabled?: boolean;\n}\n\nexport interface IPointLayerStyleOptions {\n tileOrigin?: number[];\n coord?: string;\n opacity: number;\n strokeOpacity: number;\n strokeWidth: number;\n stroke: string;\n\n blur?: number;\n\n // text\n textOffset?: [number, number];\n textAnchor?: anchorType;\n spacing?: number;\n padding?: [number, number];\n halo?: number;\n gamma?: number;\n fontWeight?: string;\n fontFamily?: string;\n textAllowOverlap?: boolean;\n\n raisingHeight?: number; // 线图层抬升高度\n\n // cylinder\n pickLight?: boolean;\n depth?: boolean;\n sourceColor?: string; // 可选参数、设置渐变色的起始颜色(all)\n targetColor?: string; // 可选参数、设置渐变色的终点颜色(all)\n opacityLinear?: {\n enable: boolean;\n dir: string;\n };\n lightEnable: boolean;\n heightfixed?: boolean; // 圆柱体高度是否固定(不随 zoom 发生变化)\n\n offsets?: styleOffset;\n blend?: string;\n unit?: string;\n mask?: boolean;\n maskInside?: boolean;\n\n rotation?: number; // angle\n speed?: number;\n featureId?: string;\n sourceLayer?: string;\n}\n\nexport interface IPolygonLayerStyleOptions {\n tileOrigin?: number[];\n coord?: string;\n opacity?: number;\n\n opacityLinear?: {\n enable: boolean;\n dir: string;\n };\n\n topsurface?: boolean;\n sidesurface?: boolean;\n\n mapTexture?: string; // 挤出几何体顶面贴图\n raisingHeight?: number; // 挤出几何体抬升高度\n sourceColor?: string; // 可选参数、设置渐变色的起始颜色(all)\n targetColor?: string; // 可选参数、设置渐变色的终点颜色(all)\n heightfixed?: boolean; // 挤出几何体高度是否固定(不随 zoom 发生变化)\n\n pickLight: boolean;\n mask?: boolean;\n maskInside?: boolean;\n\n // water\n waterTexture?: string;\n speed?: number;\n // ocean\n watercolor?: string;\n watercolor2?: string;\n\n featureId?: string;\n sourceLayer?: string;\n}\n\n// 栅格瓦片图层\nexport interface IRasterTileLayerStyleOptions {\n // TODO: define\n zIndex?: number;\n opacity?: number;\n}\nexport interface IMaskLayerStyleOptions {\n opacity: styleSingle;\n}\n\nexport interface IWindLayerStyleOptions {\n uMin?: number;\n uMax?: number;\n vMin?: number;\n vMax?: number;\n fadeOpacity?: number;\n speedFactor?: number;\n dropRate?: number;\n dropRateBump?: number;\n opacity?: number;\n numParticles?: number;\n rampColors?: {\n [key: number]: string;\n };\n sizeScale?: number;\n\n mask?: boolean;\n maskInside?: boolean;\n}\n\nexport interface IImageLayerStyleOptions {\n opacity: number;\n mask?: boolean;\n maskInside?: boolean;\n\n domain?: [number, number];\n noDataValue?: number;\n clampLow?: boolean;\n clampHigh?: boolean;\n rampColors?: IColorRamp;\n rampColorsData?: ImageData | IImagedata;\n pixelConstant?: number;\n pixelConstantR?: number;\n pixelConstantG?: number;\n pixelConstantB?: number;\n pixelConstantRGB?: number;\n}\n\nexport interface IGeometryLayerStyleOptions {\n opacity: number;\n mask?: boolean;\n maskInside?: boolean;\n\n mapTexture?: string;\n terrainTexture?: string;\n\n // planeGeometry\n center?: [number, number];\n width?: number;\n height?: number;\n\n widthSegments?: number;\n heightSegments?: number;\n\n terrainClipHeight?: number;\n rgb2height?: (r: number, g: number, b: number) => number;\n\n // billboard\n raisingHeight?: number; // 抬升高度\n canvasWidth?: number;\n canvasHeight?: number;\n drawCanvas?: (canvas: HTMLCanvasElement) => void;\n\n // sprite\n spriteAnimate?: string;\n spriteRadius?: number;\n spriteCount?: number;\n spriteSpeed?: number;\n spriteTop?: number;\n spriteBottom?: number;\n spriteUpdate?: number;\n spriteScale?: number;\n\n animateOption?: IAnimateOption;\n}\n\nexport enum CanvasUpdateType {\n 'ALWAYS' = 'always',\n 'DRAGEND' = 'dragend',\n}\n\nexport interface IDrawingOnCanvas {\n canvas: HTMLCanvasElement;\n ctx: CanvasRenderingContext2D;\n mapService: IMapService;\n size: [number, number];\n}\nexport interface ICanvasLayerStyleOptions {\n zIndex: number;\n update: CanvasUpdateType | string;\n drawingOnCanvas: (option: IDrawingOnCanvas) => void;\n}\n\nexport interface IHeatMapLayerStyleOptions {\n opacity: number;\n intensity: number;\n radius: number;\n angle: number;\n rampColors: IColorRamp;\n mask?: boolean;\n maskInside?: boolean;\n\n coverage?: number;\n}\n\nexport interface IRasterLayerStyleOptions {\n opacity: number;\n domain: [number, number];\n noDataValue: number;\n clampLow: boolean;\n clampHigh: boolean;\n rampColors: IColorRamp;\n mask?: boolean;\n maskInside?: boolean;\n rampColorsData?: ImageData | IImagedata;\n}\n"],"file":"interface.js"}
|
|
@@ -50,7 +50,6 @@ export declare function LineTriangulation(feature: IEncodeFeature): {
|
|
|
50
50
|
export declare function SimpleLineTriangulation(feature: IEncodeFeature): {
|
|
51
51
|
vertices: number[];
|
|
52
52
|
indices: number[];
|
|
53
|
-
normals: number[];
|
|
54
53
|
size: number;
|
|
55
54
|
};
|
|
56
55
|
export declare function polygonTriangulation(feature: IEncodeFeature): {
|
package/es/core/triangulation.js
CHANGED
|
@@ -5,6 +5,7 @@ import earcut from 'earcut';
|
|
|
5
5
|
import { vec3 } from 'gl-matrix';
|
|
6
6
|
import { EARTH_RADIUS, EARTH_RADIUS_OUTER, EARTH_SEGMENTS, lglt2xyz, primitiveSphere } from '../earth/utils';
|
|
7
7
|
import ExtrudePolyline from '../utils/extrude_polyline';
|
|
8
|
+
import SimpleLine from '../utils/simpleLine';
|
|
8
9
|
import extrudePolygon, { extrude_PolygonNormal, fillPolygon } from './shape/extrude';
|
|
9
10
|
import { geometryShape } from './shape/Path';
|
|
10
11
|
var GeometryCache = {};
|
|
@@ -97,49 +98,21 @@ export function LineTriangulation(feature) {
|
|
|
97
98
|
};
|
|
98
99
|
}
|
|
99
100
|
export function SimpleLineTriangulation(feature) {
|
|
100
|
-
var coordinates = feature.coordinates
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
var line = new ExtrudePolyline({
|
|
104
|
-
dash: true,
|
|
105
|
-
join: 'bevel'
|
|
106
|
-
});
|
|
107
|
-
|
|
108
|
-
if (version === 'GAODE2.x') {
|
|
109
|
-
var path1 = coordinates;
|
|
110
|
-
|
|
111
|
-
if (!Array.isArray(path1[0][0])) {
|
|
112
|
-
path1 = [coordinates];
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
var path2 = originCoordinates;
|
|
116
|
-
|
|
117
|
-
if (!Array.isArray(path2[0][0])) {
|
|
118
|
-
path2 = [originCoordinates];
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
for (var i = 0; i < path1.length; i++) {
|
|
122
|
-
var item1 = path1[i];
|
|
123
|
-
var item2 = path2[i];
|
|
124
|
-
line.simpleExtrude_gaode2(item1, item2);
|
|
125
|
-
}
|
|
126
|
-
} else {
|
|
127
|
-
var path = coordinates;
|
|
128
|
-
|
|
129
|
-
if (path[0] && !Array.isArray(path[0][0])) {
|
|
130
|
-
path = [coordinates];
|
|
131
|
-
}
|
|
101
|
+
var coordinates = feature.coordinates;
|
|
102
|
+
var line = new SimpleLine();
|
|
103
|
+
var path = coordinates;
|
|
132
104
|
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
});
|
|
105
|
+
if (path[0] && !Array.isArray(path[0][0])) {
|
|
106
|
+
path = [coordinates];
|
|
136
107
|
}
|
|
137
108
|
|
|
109
|
+
path.forEach(function (item) {
|
|
110
|
+
line.simpleExtrude(item);
|
|
111
|
+
});
|
|
138
112
|
var linebuffer = line.complex;
|
|
139
113
|
return {
|
|
140
114
|
vertices: linebuffer.positions,
|
|
141
115
|
indices: linebuffer.indices,
|
|
142
|
-
normals: linebuffer.normals,
|
|
143
116
|
size: 6
|
|
144
117
|
};
|
|
145
118
|
}
|