@antv/l7-layers 2.9.8 → 2.9.11

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/LICENSE.md CHANGED
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2017 Alipay.inc
3
+ Copyright (c) 2018 AntV team
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
@@ -113,17 +113,43 @@ var FeatureScalePlugin = (_dec = injectable(), _dec2 = inject(TYPES.IGlobalConfi
113
113
  })) {
114
114
  attributeScale.type = StyleScaleType.VARIABLE;
115
115
  scales.forEach(function (scale) {
116
- if (!attributeScale.callback) {
117
- var _scale$option, _scale$option2, _scale$option3, _scale$option4, _scale$option5;
118
-
119
- if (attributeScale.values && attributeScale.values !== 'text' && ((_scale$option = scale.option) === null || _scale$option === void 0 ? void 0 : _scale$option.type) !== ScaleTypes.DIVERGING && ((_scale$option2 = scale.option) === null || _scale$option2 === void 0 ? void 0 : _scale$option2.type) !== ScaleTypes.SEQUENTIAL) {
120
- scale.scale.range(attributeScale.values);
121
- } else if (((_scale$option3 = scale.option) === null || _scale$option3 === void 0 ? void 0 : _scale$option3.type) === ScaleTypes.CAT) {
122
- scale.scale.range(scale.option.domain);
123
- } else if (((_scale$option4 = scale.option) === null || _scale$option4 === void 0 ? void 0 : _scale$option4.type) === ScaleTypes.DIVERGING || ((_scale$option5 = scale.option) === null || _scale$option5 === void 0 ? void 0 : _scale$option5.type) === ScaleTypes.SEQUENTIAL) {
124
- scale.scale.interpolator(d3interpolate.interpolateRgbBasis(attributeScale.values));
116
+ var _scale$option;
117
+
118
+ if (!attributeScale.callback && attributeScale.values !== 'text') {
119
+ switch ((_scale$option = scale.option) === null || _scale$option === void 0 ? void 0 : _scale$option.type) {
120
+ case ScaleTypes.LOG:
121
+ case ScaleTypes.LINEAR:
122
+ case ScaleTypes.POWER:
123
+ if (attributeScale.values && attributeScale.values.length > 2) {
124
+ var tick = scale.scale.ticks(attributeScale.values.length);
125
+ scale.scale.domain(tick);
126
+ }
127
+
128
+ attributeScale.values ? scale.scale.range(attributeScale.values) : scale.scale.range(scale.option.domain);
129
+ break;
130
+
131
+ case ScaleTypes.QUANTILE:
132
+ case ScaleTypes.QUANTIZE:
133
+ case ScaleTypes.THRESHOLD:
134
+ scale.scale.range(attributeScale.values);
135
+ break;
136
+
137
+ case ScaleTypes.CAT:
138
+ attributeScale.values ? scale.scale.range(attributeScale.values) : scale.scale.range(scale.option.domain);
139
+ break;
140
+
141
+ case ScaleTypes.DIVERGING:
142
+ case ScaleTypes.SEQUENTIAL:
143
+ scale.scale.interpolator(d3interpolate.interpolateRgbBasis(attributeScale.values));
144
+ break;
125
145
  }
126
146
  }
147
+
148
+ if (attributeScale.values === 'text') {
149
+ var _scale$option2;
150
+
151
+ scale.scale.range((_scale$option2 = scale.option) === null || _scale$option2 === void 0 ? void 0 : _scale$option2.domain);
152
+ }
127
153
  });
128
154
  } else {
129
155
  attributeScale.type = StyleScaleType.CONSTANT;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/plugins/FeatureScalePlugin.ts"],"names":["ScaleTypes","StyleScaleType","TYPES","extent","d3interpolate","d3","inject","injectable","dateRegex","scaleMap","LINEAR","scaleLinear","POWER","scalePow","LOG","scaleLog","IDENTITY","scaleIdentity","SEQUENTIAL","scaleSequential","TIME","scaleTime","QUANTILE","scaleQuantile","QUANTIZE","scaleQuantize","THRESHOLD","scaleThreshold","CAT","scaleOrdinal","DIVERGING","scaleDiverging","FeatureScalePlugin","IGlobalConfigService","layer","styleAttributeService","hooks","init","tap","scaleOptions","getScaleOptions","attributes","getLayerStyleAttributes","dataArray","getSource","data","length","caculateScalesForAttributes","beforeRenderData","layerModelNeedUpdate","beforeRender","attributesToRescale","filter","attribute","needRescale","n","isNaN","parseFloat","isFinite","scaleCache","forEach","scale","attributeScale","type","name","names","parseFields","field","scales","push","createScale","values","some","VARIABLE","callback","option","range","domain","interpolator","interpolateRgbBasis","CONSTANT","defaultValues","map","index","scalers","func","Array","isArray","split","scaleOption","styleScale","undefined","createDefaultScale","firstValue","find","d","isNumber","getDefaultType","cfg","createScaleConfig","test","item","minMax","neutral","unknown","clamp","nice"],"mappings":"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","sourcesContent":["import {\n IGlobalConfigService,\n ILayer,\n ILayerPlugin,\n IScale,\n IScaleOptions,\n IStyleAttribute,\n IStyleAttributeService,\n IStyleScale,\n ScaleTypeName,\n ScaleTypes,\n StyleScaleType,\n TYPES,\n} from '@antv/l7-core';\nimport { IParseDataItem } from '@antv/l7-source';\nimport { extent, ticks } from 'd3-array';\nimport * as d3interpolate from 'd3-interpolate';\nimport * as d3 from 'd3-scale';\nimport { inject, injectable } from 'inversify';\nimport { isNil, isString, uniq } from 'lodash';\nimport 'reflect-metadata';\n\nconst dateRegex = /^(?:(?!0000)[0-9]{4}([-/.]+)(?:(?:0?[1-9]|1[0-2])\\1(?:0?[1-9]|1[0-9]|2[0-8])|(?:0?[13-9]|1[0-2])\\1(?:29|30)|(?:0?[13578]|1[02])\\1(?:31))|(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:0[48]|[2468][048]|[13579][26])00)([-/.]?)0?2\\2(?:29))(\\s+([01]|([01][0-9]|2[0-3])):([0-9]|[0-5][0-9]):([0-9]|[0-5][0-9]))?$/;\n\nconst scaleMap = {\n [ScaleTypes.LINEAR]: d3.scaleLinear,\n [ScaleTypes.POWER]: d3.scalePow,\n [ScaleTypes.LOG]: d3.scaleLog,\n [ScaleTypes.IDENTITY]: d3.scaleIdentity,\n [ScaleTypes.SEQUENTIAL]: d3.scaleSequential,\n [ScaleTypes.TIME]: d3.scaleTime,\n [ScaleTypes.QUANTILE]: d3.scaleQuantile,\n [ScaleTypes.QUANTIZE]: d3.scaleQuantize,\n [ScaleTypes.THRESHOLD]: d3.scaleThreshold,\n [ScaleTypes.CAT]: d3.scaleOrdinal,\n [ScaleTypes.DIVERGING]: d3.scaleDiverging,\n};\n\n/**\n * 根据 Source 原始数据为指定字段创建 Scale,保存在 StyleAttribute 上,供下游插件使用\n */\n@injectable()\nexport default class FeatureScalePlugin implements ILayerPlugin {\n @inject(TYPES.IGlobalConfigService)\n private readonly configService: IGlobalConfigService;\n // key = field_attribute name\n private scaleCache: {\n [field: string]: IStyleScale;\n } = {};\n\n private scaleOptions: IScaleOptions = {};\n\n public apply(\n layer: ILayer,\n {\n styleAttributeService,\n }: { styleAttributeService: IStyleAttributeService },\n ) {\n layer.hooks.init.tap('FeatureScalePlugin', () => {\n this.scaleOptions = layer.getScaleOptions();\n const attributes = styleAttributeService.getLayerStyleAttributes();\n const { dataArray } = layer.getSource().data;\n if (dataArray.length === 0) {\n return;\n }\n this.caculateScalesForAttributes(attributes || [], dataArray);\n });\n\n // 检测数据是否需要更新\n layer.hooks.beforeRenderData.tap('FeatureScalePlugin', () => {\n this.scaleOptions = layer.getScaleOptions();\n const attributes = styleAttributeService.getLayerStyleAttributes();\n const { dataArray } = layer.getSource().data;\n this.caculateScalesForAttributes(attributes || [], dataArray);\n layer.layerModelNeedUpdate = true;\n return true;\n });\n\n layer.hooks.beforeRender.tap('FeatureScalePlugin', () => {\n if (layer.layerModelNeedUpdate) {\n return;\n }\n this.scaleOptions = layer.getScaleOptions();\n const attributes = styleAttributeService.getLayerStyleAttributes();\n if (attributes) {\n const { dataArray } = layer.getSource().data;\n if (dataArray.length === 0) {\n return;\n }\n const attributesToRescale = attributes.filter(\n (attribute) => attribute.needRescale,\n );\n if (attributesToRescale.length) {\n this.caculateScalesForAttributes(attributesToRescale, dataArray);\n }\n }\n });\n }\n private isNumber(n: any) {\n return !isNaN(parseFloat(n)) && isFinite(n);\n }\n\n private caculateScalesForAttributes(\n attributes: IStyleAttribute[],\n dataArray: IParseDataItem[],\n ) {\n this.scaleCache = {};\n attributes.forEach((attribute) => {\n if (attribute.scale) {\n // 创建Scale\n const attributeScale = attribute.scale;\n const type = attribute.name;\n attributeScale.names = this.parseFields(attribute!.scale!.field || []);\n const scales: IStyleScale[] = [];\n // 为每个字段创建 Scale\n attributeScale.names.forEach((field: string | number) => {\n scales.push(\n this.createScale(\n field,\n attribute.name,\n attribute.scale?.values,\n dataArray,\n ),\n );\n });\n\n // 为scales 设置值区间 Range\n if (scales.some((scale) => scale.type === StyleScaleType.VARIABLE)) {\n attributeScale.type = StyleScaleType.VARIABLE;\n scales.forEach((scale) => {\n // 如果设置了回调, 这不需要设置range\n if (!attributeScale.callback) {\n if (\n attributeScale.values &&\n attributeScale.values !== 'text' &&\n scale.option?.type !== ScaleTypes.DIVERGING &&\n scale.option?.type !== ScaleTypes.SEQUENTIAL\n ) {\n scale.scale.range(attributeScale.values); // 判断常量, 默认值\n } else if (scale.option?.type === ScaleTypes.CAT) {\n // 如果没有设置初值且 类型为cat,range ==domain;\n scale.scale.range(scale.option.domain);\n } else if (\n scale.option?.type === ScaleTypes.DIVERGING ||\n scale.option?.type === ScaleTypes.SEQUENTIAL\n ) {\n scale.scale.interpolator(\n // @ts-ignore\n d3interpolate.interpolateRgbBasis(attributeScale.values),\n );\n }\n }\n });\n } else {\n // 设置attribute 常量值 常量直接在value取值\n attributeScale.type = StyleScaleType.CONSTANT;\n attributeScale.defaultValues = scales.map((scale, index) => {\n return scale.scale(attributeScale.names[index]);\n });\n }\n attributeScale.scalers = scales.map((scale: IStyleScale) => {\n return {\n field: scale.field,\n func: scale.scale,\n option: scale.option,\n };\n });\n\n attribute.needRescale = false;\n }\n });\n }\n\n /**\n * @example\n * 'w*h' => ['w', 'h']\n * 'w' => ['w']\n */\n private parseFields(\n field: string[] | string | number[] | number,\n ): string[] | number[] {\n if (Array.isArray(field)) {\n return field;\n }\n if (isString(field)) {\n return field.split('*');\n }\n return [field];\n }\n\n private createScale(\n field: string | number,\n name: string,\n values: unknown[] | string | undefined,\n data?: IParseDataItem[],\n ): IStyleScale {\n // scale 支持根据视觉通道和字段\n const scaleOption: IScale | undefined =\n this.scaleOptions[name] && this.scaleOptions[name]?.field === field\n ? this.scaleOptions[name] // TODO zi\n : this.scaleOptions[field];\n const styleScale: IStyleScale = {\n field,\n scale: undefined,\n type: StyleScaleType.VARIABLE,\n option: scaleOption,\n };\n\n if (!data || !data.length) {\n if (scaleOption && scaleOption.type) {\n styleScale.scale = this.createDefaultScale(scaleOption);\n } else {\n styleScale.scale = d3.scaleOrdinal([field]);\n styleScale.type = StyleScaleType.CONSTANT;\n }\n return styleScale;\n }\n const firstValue = data!.find((d) => !isNil(d[field]))?.[field];\n // 常量 Scale\n if (this.isNumber(field) || (isNil(firstValue) && !scaleOption)) {\n styleScale.scale = d3.scaleOrdinal([field]);\n styleScale.type = StyleScaleType.CONSTANT;\n } else {\n // 根据数据类型判断 默认等分位,时间,和枚举类型\n let type =\n (scaleOption && scaleOption.type) || this.getDefaultType(firstValue);\n if (values === 'text') {\n // text 为内置变 如果是文本则为cat\n type = ScaleTypes.CAT;\n }\n const cfg = this.createScaleConfig(type, field, scaleOption, data);\n\n styleScale.scale = this.createDefaultScale(cfg);\n styleScale.option = cfg;\n }\n return styleScale;\n }\n\n private getDefaultType(firstValue: unknown) {\n let type = ScaleTypes.LINEAR;\n if (typeof firstValue === 'string') {\n type = dateRegex.test(firstValue) ? ScaleTypes.TIME : ScaleTypes.CAT;\n }\n return type;\n }\n // 生成Scale 默认配置\n private createScaleConfig(\n type: ScaleTypeName,\n field: string | number,\n scaleOption: IScale | undefined,\n data?: IParseDataItem[],\n ) {\n const cfg: IScale = {\n type,\n };\n const values = data?.map((item) => item[field]) || [];\n if (scaleOption?.domain) {\n cfg.domain = scaleOption?.domain;\n }\n // 默认类型为 Quantile Scales https://github.com/d3/d3-scale#quantile-scales\n else if (\n type !== ScaleTypes.CAT &&\n type !== ScaleTypes.QUANTILE &&\n type !== ScaleTypes.DIVERGING\n ) {\n // linear/\n cfg.domain = extent(values);\n } else if (type === ScaleTypes.CAT) {\n cfg.domain = uniq(values);\n } else if (type === ScaleTypes.QUANTILE) {\n cfg.domain = values;\n } else if (type === ScaleTypes.DIVERGING) {\n const minMax = extent(values);\n const neutral =\n scaleOption?.neutral !== undefined\n ? scaleOption?.neutral\n : (minMax[0] + minMax[1]) / 2;\n cfg.domain = [minMax[0], neutral, minMax[1]];\n }\n return { ...cfg, ...scaleOption };\n }\n\n // 创建Scale 实例\n private createDefaultScale({ type, domain, unknown, clamp, nice }: IScale) {\n // @ts-ignore\n const scale = scaleMap[type]();\n if (domain && scale.domain) {\n scale.domain(domain);\n }\n if (unknown) {\n scale.unknown(unknown);\n }\n if (clamp !== undefined && scale.clamp) {\n scale.clamp(clamp);\n }\n if (nice !== undefined && scale.nice) {\n scale.nice(nice);\n }\n // TODO 其他属性支持\n return scale;\n }\n}\n"],"file":"FeatureScalePlugin.js"}
1
+ {"version":3,"sources":["../../src/plugins/FeatureScalePlugin.ts"],"names":["ScaleTypes","StyleScaleType","TYPES","extent","d3interpolate","d3","inject","injectable","dateRegex","scaleMap","LINEAR","scaleLinear","POWER","scalePow","LOG","scaleLog","IDENTITY","scaleIdentity","SEQUENTIAL","scaleSequential","TIME","scaleTime","QUANTILE","scaleQuantile","QUANTIZE","scaleQuantize","THRESHOLD","scaleThreshold","CAT","scaleOrdinal","DIVERGING","scaleDiverging","FeatureScalePlugin","IGlobalConfigService","layer","styleAttributeService","hooks","init","tap","scaleOptions","getScaleOptions","attributes","getLayerStyleAttributes","dataArray","getSource","data","length","caculateScalesForAttributes","beforeRenderData","layerModelNeedUpdate","beforeRender","attributesToRescale","filter","attribute","needRescale","n","isNaN","parseFloat","isFinite","scaleCache","forEach","scale","attributeScale","type","name","names","parseFields","field","scales","push","createScale","values","some","VARIABLE","callback","option","tick","ticks","domain","range","interpolator","interpolateRgbBasis","CONSTANT","defaultValues","map","index","scalers","func","Array","isArray","split","scaleOption","styleScale","undefined","createDefaultScale","firstValue","find","d","isNumber","getDefaultType","cfg","createScaleConfig","test","item","minMax","neutral","unknown","clamp","nice"],"mappings":"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","sourcesContent":["import {\n IGlobalConfigService,\n ILayer,\n ILayerPlugin,\n IScale,\n IScaleOptions,\n IStyleAttribute,\n IStyleAttributeService,\n IStyleScale,\n ScaleTypeName,\n ScaleTypes,\n StyleScaleType,\n TYPES,\n} from '@antv/l7-core';\nimport { IParseDataItem } from '@antv/l7-source';\nimport { extent, ticks } from 'd3-array';\nimport * as d3interpolate from 'd3-interpolate';\nimport * as d3 from 'd3-scale';\nimport { inject, injectable } from 'inversify';\nimport { isNil, isString, uniq } from 'lodash';\nimport 'reflect-metadata';\n\nconst dateRegex = /^(?:(?!0000)[0-9]{4}([-/.]+)(?:(?:0?[1-9]|1[0-2])\\1(?:0?[1-9]|1[0-9]|2[0-8])|(?:0?[13-9]|1[0-2])\\1(?:29|30)|(?:0?[13578]|1[02])\\1(?:31))|(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:0[48]|[2468][048]|[13579][26])00)([-/.]?)0?2\\2(?:29))(\\s+([01]|([01][0-9]|2[0-3])):([0-9]|[0-5][0-9]):([0-9]|[0-5][0-9]))?$/;\n\nconst scaleMap = {\n [ScaleTypes.LINEAR]: d3.scaleLinear,\n [ScaleTypes.POWER]: d3.scalePow,\n [ScaleTypes.LOG]: d3.scaleLog,\n [ScaleTypes.IDENTITY]: d3.scaleIdentity,\n [ScaleTypes.SEQUENTIAL]: d3.scaleSequential,\n [ScaleTypes.TIME]: d3.scaleTime,\n [ScaleTypes.QUANTILE]: d3.scaleQuantile,\n [ScaleTypes.QUANTIZE]: d3.scaleQuantize,\n [ScaleTypes.THRESHOLD]: d3.scaleThreshold,\n [ScaleTypes.CAT]: d3.scaleOrdinal,\n [ScaleTypes.DIVERGING]: d3.scaleDiverging,\n};\n\n/**\n * 根据 Source 原始数据为指定字段创建 Scale,保存在 StyleAttribute 上,供下游插件使用\n */\n@injectable()\nexport default class FeatureScalePlugin implements ILayerPlugin {\n @inject(TYPES.IGlobalConfigService)\n private readonly configService: IGlobalConfigService;\n // key = field_attribute name\n private scaleCache: {\n [field: string]: IStyleScale;\n } = {};\n\n private scaleOptions: IScaleOptions = {};\n\n public apply(\n layer: ILayer,\n {\n styleAttributeService,\n }: { styleAttributeService: IStyleAttributeService },\n ) {\n layer.hooks.init.tap('FeatureScalePlugin', () => {\n this.scaleOptions = layer.getScaleOptions();\n const attributes = styleAttributeService.getLayerStyleAttributes();\n const { dataArray } = layer.getSource().data;\n if (dataArray.length === 0) {\n return;\n }\n this.caculateScalesForAttributes(attributes || [], dataArray);\n });\n\n // 检测数据是否需要更新\n layer.hooks.beforeRenderData.tap('FeatureScalePlugin', () => {\n this.scaleOptions = layer.getScaleOptions();\n const attributes = styleAttributeService.getLayerStyleAttributes();\n const { dataArray } = layer.getSource().data;\n this.caculateScalesForAttributes(attributes || [], dataArray);\n layer.layerModelNeedUpdate = true;\n return true;\n });\n\n layer.hooks.beforeRender.tap('FeatureScalePlugin', () => {\n if (layer.layerModelNeedUpdate) {\n return;\n }\n this.scaleOptions = layer.getScaleOptions();\n const attributes = styleAttributeService.getLayerStyleAttributes();\n if (attributes) {\n const { dataArray } = layer.getSource().data;\n if (dataArray.length === 0) {\n return;\n }\n const attributesToRescale = attributes.filter(\n (attribute) => attribute.needRescale,\n );\n if (attributesToRescale.length) {\n this.caculateScalesForAttributes(attributesToRescale, dataArray);\n }\n }\n });\n }\n private isNumber(n: any) {\n return !isNaN(parseFloat(n)) && isFinite(n);\n }\n\n private caculateScalesForAttributes(\n attributes: IStyleAttribute[],\n dataArray: IParseDataItem[],\n ) {\n this.scaleCache = {};\n attributes.forEach((attribute) => {\n if (attribute.scale) {\n // 创建Scale\n const attributeScale = attribute.scale;\n const type = attribute.name;\n attributeScale.names = this.parseFields(attribute!.scale!.field || []);\n const scales: IStyleScale[] = [];\n // 为每个字段创建 Scale\n attributeScale.names.forEach((field: string | number) => {\n scales.push(\n this.createScale(\n field,\n attribute.name,\n attribute.scale?.values,\n dataArray,\n ),\n );\n });\n\n // 为scales 设置值区间 Range\n if (scales.some((scale) => scale.type === StyleScaleType.VARIABLE)) {\n attributeScale.type = StyleScaleType.VARIABLE;\n scales.forEach((scale) => {\n // 如果设置了回调, 这不需要设置range\n if (!attributeScale.callback && attributeScale.values !== 'text') {\n switch (scale.option?.type) {\n case ScaleTypes.LOG:\n case ScaleTypes.LINEAR:\n case ScaleTypes.POWER:\n if (\n attributeScale.values &&\n attributeScale.values.length > 2\n ) {\n const tick = scale.scale.ticks(\n attributeScale.values.length,\n );\n scale.scale.domain(tick);\n }\n attributeScale.values\n ? scale.scale.range(attributeScale.values)\n : scale.scale.range(scale.option.domain);\n break;\n case ScaleTypes.QUANTILE:\n case ScaleTypes.QUANTIZE:\n case ScaleTypes.THRESHOLD:\n scale.scale.range(attributeScale.values); //\n break;\n case ScaleTypes.CAT:\n attributeScale.values\n ? scale.scale.range(attributeScale.values)\n : scale.scale.range(scale.option.domain);\n break;\n case ScaleTypes.DIVERGING:\n case ScaleTypes.SEQUENTIAL:\n scale.scale.interpolator(\n // @ts-ignore\n d3interpolate.interpolateRgbBasis(attributeScale.values),\n );\n break;\n }\n }\n if (attributeScale.values === 'text') {\n scale.scale.range(scale.option?.domain);\n }\n });\n } else {\n // 设置attribute 常量值 常量直接在value取值\n attributeScale.type = StyleScaleType.CONSTANT;\n attributeScale.defaultValues = scales.map((scale, index) => {\n return scale.scale(attributeScale.names[index]);\n });\n }\n attributeScale.scalers = scales.map((scale: IStyleScale) => {\n return {\n field: scale.field,\n func: scale.scale,\n option: scale.option,\n };\n });\n\n attribute.needRescale = false;\n }\n });\n }\n\n /**\n * @example\n * 'w*h' => ['w', 'h']\n * 'w' => ['w']\n */\n private parseFields(\n field: string[] | string | number[] | number,\n ): string[] | number[] {\n if (Array.isArray(field)) {\n return field;\n }\n if (isString(field)) {\n return field.split('*');\n }\n return [field];\n }\n\n private createScale(\n field: string | number,\n name: string,\n values: unknown[] | string | undefined,\n data?: IParseDataItem[],\n ): IStyleScale {\n // scale 支持根据视觉通道和字段\n const scaleOption: IScale | undefined =\n this.scaleOptions[name] && this.scaleOptions[name]?.field === field\n ? this.scaleOptions[name] // TODO zi\n : this.scaleOptions[field];\n const styleScale: IStyleScale = {\n field,\n scale: undefined,\n type: StyleScaleType.VARIABLE,\n option: scaleOption,\n };\n\n if (!data || !data.length) {\n if (scaleOption && scaleOption.type) {\n styleScale.scale = this.createDefaultScale(scaleOption);\n } else {\n styleScale.scale = d3.scaleOrdinal([field]);\n styleScale.type = StyleScaleType.CONSTANT;\n }\n return styleScale;\n }\n const firstValue = data!.find((d) => !isNil(d[field]))?.[field];\n // 常量 Scale\n if (this.isNumber(field) || (isNil(firstValue) && !scaleOption)) {\n styleScale.scale = d3.scaleOrdinal([field]);\n styleScale.type = StyleScaleType.CONSTANT;\n } else {\n // 根据数据类型判断 默认等分位,时间,和枚举类型\n let type =\n (scaleOption && scaleOption.type) || this.getDefaultType(firstValue);\n if (values === 'text') {\n // text 为内置变 如果是文本则为cat\n type = ScaleTypes.CAT;\n }\n const cfg = this.createScaleConfig(type, field, scaleOption, data);\n\n styleScale.scale = this.createDefaultScale(cfg);\n styleScale.option = cfg;\n }\n return styleScale;\n }\n\n private getDefaultType(firstValue: unknown) {\n let type = ScaleTypes.LINEAR;\n if (typeof firstValue === 'string') {\n type = dateRegex.test(firstValue) ? ScaleTypes.TIME : ScaleTypes.CAT;\n }\n return type;\n }\n // 生成Scale 默认配置\n private createScaleConfig(\n type: ScaleTypeName,\n field: string | number,\n scaleOption: IScale | undefined,\n data?: IParseDataItem[],\n ) {\n const cfg: IScale = {\n type,\n };\n const values = data?.map((item) => item[field]) || [];\n if (scaleOption?.domain) {\n cfg.domain = scaleOption?.domain;\n }\n // 默认类型为 Quantile Scales https://github.com/d3/d3-scale#quantile-scales\n else if (\n type !== ScaleTypes.CAT &&\n type !== ScaleTypes.QUANTILE &&\n type !== ScaleTypes.DIVERGING\n ) {\n // linear/\n cfg.domain = extent(values);\n } else if (type === ScaleTypes.CAT) {\n cfg.domain = uniq(values);\n } else if (type === ScaleTypes.QUANTILE) {\n cfg.domain = values;\n } else if (type === ScaleTypes.DIVERGING) {\n const minMax = extent(values);\n const neutral =\n scaleOption?.neutral !== undefined\n ? scaleOption?.neutral\n : (minMax[0] + minMax[1]) / 2;\n cfg.domain = [minMax[0], neutral, minMax[1]];\n }\n return { ...cfg, ...scaleOption };\n }\n\n // 创建Scale 实例\n private createDefaultScale({ type, domain, unknown, clamp, nice }: IScale) {\n // @ts-ignore\n const scale = scaleMap[type]();\n if (domain && scale.domain) {\n scale.domain(domain);\n }\n if (unknown) {\n scale.unknown(unknown);\n }\n if (clamp !== undefined && scale.clamp) {\n scale.clamp(clamp);\n }\n if (nice !== undefined && scale.nice) {\n scale.nice(nice);\n }\n // TODO 其他属性支持\n return scale;\n }\n}\n"],"file":"FeatureScalePlugin.js"}
@@ -1,8 +1,10 @@
1
1
  import { IAnimateOption, IAttribute, IElements, IModel, IModelUniform } from '@antv/l7-core';
2
2
  import BaseModel from '../../core/BaseModel';
3
3
  export default class FillModel extends BaseModel {
4
- meter2coord: number;
4
+ private meter2coord;
5
+ private meteryScale;
5
6
  private isMeter;
7
+ private unit;
6
8
  getUninforms(): IModelUniform;
7
9
  getAnimateUniforms(): IModelUniform;
8
10
  getAttribute(): {
@@ -30,4 +32,9 @@ export default class FillModel extends BaseModel {
30
32
  clearModels(): void;
31
33
  protected animateOption2Array(option: Partial<IAnimateOption>): number[];
32
34
  protected registerBuiltinAttributes(): void;
35
+ /**
36
+ * 判断是否更新点图层的计量单位
37
+ * @param unit
38
+ */
39
+ private updateUnit;
33
40
  }
@@ -14,12 +14,12 @@ function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflec
14
14
  function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
15
15
 
16
16
  import { AttributeType, gl } from '@antv/l7-core';
17
- import { getCullFace, getMask } from '@antv/l7-utils';
17
+ import { $window, getMask } from '@antv/l7-utils';
18
18
  import BaseModel from '../../core/BaseModel';
19
19
  import { GlobelPointFillTriangulation, PointFillTriangulation } from '../../core/triangulation';
20
20
  var waveFillFrag = "\nuniform float u_additive;\n\nvarying mat4 styleMappingMat; // \u4F20\u9012\u4ECE\u7247\u5143\u4E2D\u4F20\u9012\u7684\u6620\u5C04\u6570\u636E\n\nvarying vec4 v_data;\nvarying vec4 v_color;\nvarying float v_radius;\nuniform float u_time;\nuniform vec4 u_aimate: [ 0, 2., 1.0, 0.2 ];\n\n#pragma include \"sdf_2d\"\n#pragma include \"picking\"\n\nvoid main() {\n\n vec4 textrueStroke = vec4(\n styleMappingMat[1][0],\n styleMappingMat[1][1],\n styleMappingMat[1][2],\n styleMappingMat[1][3]\n );\n\n float opacity = styleMappingMat[0][0];\n\n lowp float antialiasblur = v_data.z;\n float r = v_radius / (v_radius);\n\n float outer_df;\n float inner_df;\n // 'circle', 'triangle', 'square', 'pentagon', 'hexagon', 'octogon', 'hexagram', 'rhombus', 'vesica'\n \n outer_df = sdCircle(v_data.xy, 1.0);\n inner_df = sdCircle(v_data.xy, r);\n\n\n float opacity_t = smoothstep(0.0, antialiasblur, outer_df);\n\n float color_t = smoothstep(\n antialiasblur,\n 0.0,\n inner_df\n );\n float PI = 3.14159;\n float N_RINGS = 3.0;\n float FREQ = 1.0;\n\n gl_FragColor = vec4(v_color.rgb, v_color.a * opacity);\n\n float d = length(v_data.xy);\n if(d > 0.5) {\n discard;\n }\n float intensity = clamp(cos(d * PI), 0.0, 1.0) * clamp(cos(2.0 * PI * (d * 2.0 * u_aimate.z - u_aimate.y * u_time)), 0.0, 1.0);\n \n // TODO: \u6839\u636E\u53E0\u52A0\u6A21\u5F0F\u9009\u62E9\u6548\u679C\n if(u_additive > 0.0) {\n gl_FragColor *= intensity;\n // TODO: \u4F18\u5316\u6C34\u6CE2\u70B9 blend additive \u6A21\u5F0F\u4E0B\u6709\u7684\u62FE\u53D6\u6548\u679C \n gl_FragColor = filterColorAlpha(gl_FragColor, gl_FragColor.a);\n } else {\n gl_FragColor = vec4(gl_FragColor.xyz, gl_FragColor.a * intensity);\n gl_FragColor = filterColor(gl_FragColor);\n }\n}\n";
21
21
  var pointFillFrag = "\nuniform float u_globel;\nuniform float u_additive;\n\nvarying mat4 styleMappingMat; // \u4F20\u9012\u4ECE\u7247\u5143\u4E2D\u4F20\u9012\u7684\u6620\u5C04\u6570\u636E\n\nvarying vec4 v_data;\nvarying vec4 v_color;\nvarying float v_radius;\n\n#pragma include \"sdf_2d\"\n#pragma include \"picking\"\n\n\nvoid main() {\n int shape = int(floor(v_data.w + 0.5));\n\n vec4 textrueStroke = vec4(\n styleMappingMat[1][0],\n styleMappingMat[1][1],\n styleMappingMat[1][2],\n styleMappingMat[1][3]\n );\n\n float opacity = styleMappingMat[0][0];\n float stroke_opacity = styleMappingMat[0][1];\n float strokeWidth = styleMappingMat[0][2];\n vec4 strokeColor = textrueStroke == vec4(0) ? v_color : textrueStroke;\n\n lowp float antialiasblur = v_data.z;\n float r = v_radius / (v_radius + strokeWidth);\n\n float outer_df;\n float inner_df;\n // 'circle', 'triangle', 'square', 'pentagon', 'hexagon', 'octogon', 'hexagram', 'rhombus', 'vesica'\n if (shape == 0) {\n outer_df = sdCircle(v_data.xy, 1.0);\n inner_df = sdCircle(v_data.xy, r);\n } else if (shape == 1) {\n outer_df = sdEquilateralTriangle(1.1 * v_data.xy);\n inner_df = sdEquilateralTriangle(1.1 / r * v_data.xy);\n } else if (shape == 2) {\n outer_df = sdBox(v_data.xy, vec2(1.));\n inner_df = sdBox(v_data.xy, vec2(r));\n } else if (shape == 3) {\n outer_df = sdPentagon(v_data.xy, 0.8);\n inner_df = sdPentagon(v_data.xy, r * 0.8);\n } else if (shape == 4) {\n outer_df = sdHexagon(v_data.xy, 0.8);\n inner_df = sdHexagon(v_data.xy, r * 0.8);\n } else if (shape == 5) {\n outer_df = sdOctogon(v_data.xy, 1.0);\n inner_df = sdOctogon(v_data.xy, r);\n } else if (shape == 6) {\n outer_df = sdHexagram(v_data.xy, 0.52);\n inner_df = sdHexagram(v_data.xy, r * 0.52);\n } else if (shape == 7) {\n outer_df = sdRhombus(v_data.xy, vec2(1.0));\n inner_df = sdRhombus(v_data.xy, vec2(r));\n } else if (shape == 8) {\n outer_df = sdVesica(v_data.xy, 1.1, 0.8);\n inner_df = sdVesica(v_data.xy, r * 1.1, r * 0.8);\n }\n\n if(u_globel > 0.0) {\n // TODO: \u5730\u7403\u6A21\u5F0F\u4E0B\u907F\u514D\u591A\u4F59\u7247\u5143\u7ED8\u5236\uFF0C\u540C\u65F6\u4E5F\u80FD\u907F\u514D\u6709\u7528\u7247\u5143\u5728\u900F\u660E\u4E14\u91CD\u53E0\u7684\u60C5\u51B5\u4E0B\u65E0\u6CD5\u5199\u5165\n // \u4ED8\u51FA\u7684\u4EE3\u4EF7\u662F\u8FB9\u7F18\u4F1A\u6709\u4E00\u4E9B\u952F\u9F7F\n if(outer_df > antialiasblur + 0.018) discard;\n }\n float opacity_t = smoothstep(0.0, antialiasblur, outer_df);\n\n float color_t = strokeWidth < 0.01 ? 0.0 : smoothstep(\n antialiasblur,\n 0.0,\n inner_df\n );\n\n if(strokeWidth < 0.01) {\n gl_FragColor = vec4(v_color.rgb, v_color.a * opacity);\n } else {\n gl_FragColor = mix(vec4(v_color.rgb, v_color.a * opacity), strokeColor * stroke_opacity, color_t);\n }\n\n if(u_additive > 0.0) {\n gl_FragColor *= opacity_t;\n gl_FragColor = filterColorAlpha(gl_FragColor, gl_FragColor.a);\n } else {\n gl_FragColor.a *= opacity_t;\n gl_FragColor = filterColor(gl_FragColor);\n }\n}\n";
22
- var pointFillVert = "attribute vec4 a_Color;\nattribute vec3 a_Position;\nattribute vec3 a_Extrude;\nattribute float a_Size;\nattribute float a_Shape;\n\nvarying mat4 styleMappingMat; // \u7528\u4E8E\u5C06\u5728\u9876\u70B9\u7740\u8272\u5668\u4E2D\u8BA1\u7B97\u597D\u7684\u6837\u5F0F\u503C\u4F20\u9012\u7ED9\u7247\u5143\n\nuniform float u_globel;\nuniform mat4 u_ModelMatrix;\nuniform mat4 u_Mvp;\nuniform float u_isMeter;\n\nvarying vec4 v_data;\nvarying vec4 v_color;\nvarying float v_radius;\n\nuniform float u_opacity : 1;\nuniform float u_stroke_opacity : 1;\nuniform float u_stroke_width : 2;\nuniform vec4 u_stroke_color : [0.0, 0.0, 0.0, 0.0];\nuniform vec2 u_offsets;\n\nuniform float u_blur : 0.0;\nuniform float u_raisingHeight: 0.0;\n\n#pragma include \"styleMapping\"\n#pragma include \"styleMappingCalOpacity\"\n#pragma include \"styleMappingCalStrokeOpacity\"\n#pragma include \"styleMappingCalStrokeWidth\"\n\n#pragma include \"projection\"\n#pragma include \"picking\"\n\n\nvoid main() {\n vec3 extrude = a_Extrude;\n float shape_type = a_Shape;\n float newSize = setPickingSize(a_Size);\n\n // cal style mapping - \u6570\u636E\u7EB9\u7406\u6620\u5C04\u90E8\u5206\u7684\u8BA1\u7B97\n styleMappingMat = mat4(\n 0.0, 0.0, 0.0, 0.0, // opacity - strokeOpacity - strokeWidth - empty\n 0.0, 0.0, 0.0, 0.0, // strokeR - strokeG - strokeB - strokeA\n 0.0, 0.0, 0.0, 0.0, // offsets[0] - offsets[1]\n 0.0, 0.0, 0.0, 0.0\n );\n\n float rowCount = u_cellTypeLayout[0][0]; // \u5F53\u524D\u7684\u6570\u636E\u7EB9\u7406\u6709\u51E0\u884C\n float columnCount = u_cellTypeLayout[0][1]; // \u5F53\u770B\u5230\u6570\u636E\u7EB9\u7406\u6709\u51E0\u5217\n float columnWidth = 1.0/columnCount; // \u5217\u5BBD\n float rowHeight = 1.0/rowCount; // \u884C\u9AD8\n float cellCount = calCellCount(); // opacity - strokeOpacity - strokeWidth - stroke - offsets\n float id = a_vertexId; // \u7B2Cn\u4E2A\u9876\u70B9\n float cellCurrentRow = floor(id * cellCount / columnCount) + 1.0; // \u8D77\u59CB\u70B9\u5728\u7B2C\u51E0\u884C\n float cellCurrentColumn = mod(id * cellCount, columnCount) + 1.0; // \u8D77\u59CB\u70B9\u5728\u7B2C\u51E0\u5217\n \n // cell \u56FA\u5B9A\u987A\u5E8F opacity -> strokeOpacity -> strokeWidth -> stroke ... \n // \u6309\u987A\u5E8F\u4ECE cell \u4E2D\u53D6\u503C\u3001\u82E5\u6CA1\u6709\u5219\u81EA\u52A8\u5F80\u4E0B\u53D6\u503C\n float textureOffset = 0.0; // \u5728 cell \u4E2D\u53D6\u503C\u7684\u504F\u79FB\u91CF\n\n vec2 opacityAndOffset = calOpacityAndOffset(cellCurrentRow, cellCurrentColumn, columnCount, textureOffset, columnWidth, rowHeight);\n styleMappingMat[0][0] = opacityAndOffset.r;\n textureOffset = opacityAndOffset.g;\n\n vec2 strokeOpacityAndOffset = calStrokeOpacityAndOffset(cellCurrentRow, cellCurrentColumn, columnCount, textureOffset, columnWidth, rowHeight);\n styleMappingMat[0][1] = strokeOpacityAndOffset.r;\n textureOffset = strokeOpacityAndOffset.g;\n\n vec2 strokeWidthAndOffset = calStrokeWidthAndOffset(cellCurrentRow, cellCurrentColumn, columnCount, textureOffset, columnWidth, rowHeight);\n styleMappingMat[0][2] = strokeWidthAndOffset.r;\n textureOffset = strokeWidthAndOffset.g;\n\n vec4 textrueStroke = vec4(-1.0, -1.0, -1.0, -1.0);\n if(hasStroke()) {\n vec2 valueRPos = nextPos(cellCurrentRow, cellCurrentColumn, columnCount, textureOffset);\n styleMappingMat[1][0] = pos2value(valueRPos, columnWidth, rowHeight); // R\n textureOffset += 1.0;\n\n vec2 valueGPos = nextPos(cellCurrentRow, cellCurrentColumn, columnCount, textureOffset);\n styleMappingMat[1][1] = pos2value(valueGPos, columnWidth, rowHeight); // G\n textureOffset += 1.0;\n\n vec2 valueBPos = nextPos(cellCurrentRow, cellCurrentColumn, columnCount, textureOffset);\n styleMappingMat[1][2] = pos2value(valueBPos, columnWidth, rowHeight); // B\n textureOffset += 1.0;\n\n vec2 valueAPos = nextPos(cellCurrentRow, cellCurrentColumn, columnCount, textureOffset);\n styleMappingMat[1][3] = pos2value(valueAPos, columnWidth, rowHeight); // A\n textureOffset += 1.0;\n } else {\n if(u_stroke_color == vec4(0.0)) {\n styleMappingMat[1][0] = v_color.r;\n styleMappingMat[1][1] = v_color.g;\n styleMappingMat[1][2] = v_color.b;\n styleMappingMat[1][3] = v_color.a;\n } else {\n styleMappingMat[1][0] = u_stroke_color.r;\n styleMappingMat[1][1] = u_stroke_color.g;\n styleMappingMat[1][2] = u_stroke_color.b;\n styleMappingMat[1][3] = u_stroke_color.a;\n }\n }\n\n vec2 textrueOffsets = vec2(0.0, 0.0);\n if(hasOffsets()) {\n vec2 valueXPos = nextPos(cellCurrentRow, cellCurrentColumn, columnCount, textureOffset);\n textrueOffsets.r = pos2value(valueXPos, columnWidth, rowHeight); // x\n textureOffset += 1.0;\n\n vec2 valueYPos = nextPos(cellCurrentRow, cellCurrentColumn, columnCount, textureOffset);\n textrueOffsets.g = pos2value(valueYPos, columnWidth, rowHeight); // x\n textureOffset += 1.0;\n } else {\n textrueOffsets = u_offsets;\n }\n\n // cal style mapping\n\n // unpack color(vec2)\n v_color = a_Color;\n\n // radius(16-bit)\n v_radius = newSize;\n\n // TODO: billboard\n // anti-alias\n // float antialiased_blur = -max(u_blur, antialiasblur);\n float antialiasblur = -max(2.0 / u_DevicePixelRatio / a_Size, u_blur);\n\n vec2 offset = (extrude.xy * (newSize + u_stroke_width) + textrueOffsets);\n vec3 aPosition = a_Position;\n if(u_isMeter < 1.0) {\n // \u4E0D\u4EE5\u7C73\u4E3A\u5B9E\u9645\u5355\u4F4D\n offset = project_pixel(offset);\n } else {\n // \u4EE5\u7C73\u4E3A\u5B9E\u9645\u5355\u4F4D\n antialiasblur *= pow(19.0 - u_Zoom, 2.0);\n antialiasblur = max(antialiasblur, -0.01);\n // offset *= 0.5;\n\n if(u_CoordinateSystem == COORDINATE_SYSTEM_LNGLAT || u_CoordinateSystem == COORDINATE_SYSTEM_LNGLAT_OFFSET) {\n aPosition.xy += offset;\n offset.x = 0.0;\n offset.y = 0.0;\n }\n }\n\n // TODP: /abs(extrude.x) \u662F\u4E3A\u4E86\u517C\u5BB9\u5730\u7403\u6A21\u5F0F\n v_data = vec4(extrude.x/abs(extrude.x), extrude.y/abs(extrude.y), antialiasblur,shape_type);\n\n\n // vec4 project_pos = project_position(vec4(a_Position.xy, 0.0, 1.0));\n vec4 project_pos = project_position(vec4(aPosition.xy, 0.0, 1.0));\n // gl_Position = project_common_position_to_clipspace(vec4(project_pos.xy + offset, project_pixel(setPickingOrder(0.0)), 1.0));\n\n float raiseHeight = u_raisingHeight;\n if(u_CoordinateSystem == COORDINATE_SYSTEM_LNGLAT || u_CoordinateSystem == COORDINATE_SYSTEM_LNGLAT_OFFSET) {\n float mapboxZoomScale = 4.0/pow(2.0, 21.0 - u_Zoom);\n raiseHeight = u_raisingHeight * mapboxZoomScale;\n }\n\n if(u_CoordinateSystem == COORDINATE_SYSTEM_P20_2) { // gaode2.x\n gl_Position = u_Mvp * vec4(project_pos.xy + offset, raiseHeight, 1.0);\n } else {\n gl_Position = project_common_position_to_clipspace(vec4(project_pos.xy + offset, u_raisingHeight, 1.0));\n }\n\n if(u_globel > 0.0) {\n gl_Position = u_ViewProjectionMatrix * vec4(a_Position + extrude * newSize * 0.1, 1.0);\n }\n \n // gl_Position = project_common_position_to_clipspace(vec4(project_pos.xy + offset, 0.0, 1.0));\n\n setPickingColor(a_PickingColor);\n}\n";
22
+ var pointFillVert = "attribute vec4 a_Color;\nattribute vec3 a_Position;\nattribute vec3 a_Extrude;\nattribute float a_Size;\nattribute float a_Shape;\n\nvarying mat4 styleMappingMat; // \u7528\u4E8E\u5C06\u5728\u9876\u70B9\u7740\u8272\u5668\u4E2D\u8BA1\u7B97\u597D\u7684\u6837\u5F0F\u503C\u4F20\u9012\u7ED9\u7247\u5143\n\nuniform float u_globel;\nuniform mat4 u_ModelMatrix;\nuniform mat4 u_Mvp;\nuniform float u_meter2coord;\nuniform float u_meteryScale;\nuniform float u_isMeter;\n\nvarying vec4 v_data;\nvarying vec4 v_color;\nvarying float v_radius;\n\nuniform float u_opacity : 1;\nuniform float u_stroke_opacity : 1;\nuniform float u_stroke_width : 2;\nuniform vec4 u_stroke_color : [0.0, 0.0, 0.0, 0.0];\nuniform vec2 u_offsets;\n\nuniform float u_blur : 0.0;\nuniform float u_raisingHeight: 0.0;\n\n#pragma include \"styleMapping\"\n#pragma include \"styleMappingCalOpacity\"\n#pragma include \"styleMappingCalStrokeOpacity\"\n#pragma include \"styleMappingCalStrokeWidth\"\n\n#pragma include \"projection\"\n#pragma include \"picking\"\n\n\nvoid main() {\n vec3 extrude = a_Extrude;\n float shape_type = a_Shape;\n /*\n * setPickingSize \u8BBE\u7F6E\u62FE\u53D6\u5927\u5C0F\n * u_meter2coord \u5728\u7B49\u9762\u79EF\u5927\u5C0F\u7684\u65F6\u5019\u8BBE\u7F6E\u5355\u4F4D\n */\n float newSize = setPickingSize(a_Size) * u_meter2coord;\n // float newSize = setPickingSize(a_Size) * 0.00001038445708445579;\n\n // cal style mapping - \u6570\u636E\u7EB9\u7406\u6620\u5C04\u90E8\u5206\u7684\u8BA1\u7B97\n styleMappingMat = mat4(\n 0.0, 0.0, 0.0, 0.0, // opacity - strokeOpacity - strokeWidth - empty\n 0.0, 0.0, 0.0, 0.0, // strokeR - strokeG - strokeB - strokeA\n 0.0, 0.0, 0.0, 0.0, // offsets[0] - offsets[1]\n 0.0, 0.0, 0.0, 0.0\n );\n\n float rowCount = u_cellTypeLayout[0][0]; // \u5F53\u524D\u7684\u6570\u636E\u7EB9\u7406\u6709\u51E0\u884C\n float columnCount = u_cellTypeLayout[0][1]; // \u5F53\u770B\u5230\u6570\u636E\u7EB9\u7406\u6709\u51E0\u5217\n float columnWidth = 1.0/columnCount; // \u5217\u5BBD\n float rowHeight = 1.0/rowCount; // \u884C\u9AD8\n float cellCount = calCellCount(); // opacity - strokeOpacity - strokeWidth - stroke - offsets\n float id = a_vertexId; // \u7B2Cn\u4E2A\u9876\u70B9\n float cellCurrentRow = floor(id * cellCount / columnCount) + 1.0; // \u8D77\u59CB\u70B9\u5728\u7B2C\u51E0\u884C\n float cellCurrentColumn = mod(id * cellCount, columnCount) + 1.0; // \u8D77\u59CB\u70B9\u5728\u7B2C\u51E0\u5217\n \n // cell \u56FA\u5B9A\u987A\u5E8F opacity -> strokeOpacity -> strokeWidth -> stroke ... \n // \u6309\u987A\u5E8F\u4ECE cell \u4E2D\u53D6\u503C\u3001\u82E5\u6CA1\u6709\u5219\u81EA\u52A8\u5F80\u4E0B\u53D6\u503C\n float textureOffset = 0.0; // \u5728 cell \u4E2D\u53D6\u503C\u7684\u504F\u79FB\u91CF\n\n vec2 opacityAndOffset = calOpacityAndOffset(cellCurrentRow, cellCurrentColumn, columnCount, textureOffset, columnWidth, rowHeight);\n styleMappingMat[0][0] = opacityAndOffset.r;\n textureOffset = opacityAndOffset.g;\n\n vec2 strokeOpacityAndOffset = calStrokeOpacityAndOffset(cellCurrentRow, cellCurrentColumn, columnCount, textureOffset, columnWidth, rowHeight);\n styleMappingMat[0][1] = strokeOpacityAndOffset.r;\n textureOffset = strokeOpacityAndOffset.g;\n\n vec2 strokeWidthAndOffset = calStrokeWidthAndOffset(cellCurrentRow, cellCurrentColumn, columnCount, textureOffset, columnWidth, rowHeight);\n styleMappingMat[0][2] = strokeWidthAndOffset.r;\n textureOffset = strokeWidthAndOffset.g;\n\n vec4 textrueStroke = vec4(-1.0, -1.0, -1.0, -1.0);\n if(hasStroke()) {\n vec2 valueRPos = nextPos(cellCurrentRow, cellCurrentColumn, columnCount, textureOffset);\n styleMappingMat[1][0] = pos2value(valueRPos, columnWidth, rowHeight); // R\n textureOffset += 1.0;\n\n vec2 valueGPos = nextPos(cellCurrentRow, cellCurrentColumn, columnCount, textureOffset);\n styleMappingMat[1][1] = pos2value(valueGPos, columnWidth, rowHeight); // G\n textureOffset += 1.0;\n\n vec2 valueBPos = nextPos(cellCurrentRow, cellCurrentColumn, columnCount, textureOffset);\n styleMappingMat[1][2] = pos2value(valueBPos, columnWidth, rowHeight); // B\n textureOffset += 1.0;\n\n vec2 valueAPos = nextPos(cellCurrentRow, cellCurrentColumn, columnCount, textureOffset);\n styleMappingMat[1][3] = pos2value(valueAPos, columnWidth, rowHeight); // A\n textureOffset += 1.0;\n } else {\n if(u_stroke_color == vec4(0.0)) {\n styleMappingMat[1][0] = v_color.r;\n styleMappingMat[1][1] = v_color.g;\n styleMappingMat[1][2] = v_color.b;\n styleMappingMat[1][3] = v_color.a;\n } else {\n styleMappingMat[1][0] = u_stroke_color.r;\n styleMappingMat[1][1] = u_stroke_color.g;\n styleMappingMat[1][2] = u_stroke_color.b;\n styleMappingMat[1][3] = u_stroke_color.a;\n }\n }\n\n vec2 textrueOffsets = vec2(0.0, 0.0);\n if(hasOffsets()) {\n vec2 valueXPos = nextPos(cellCurrentRow, cellCurrentColumn, columnCount, textureOffset);\n textrueOffsets.r = pos2value(valueXPos, columnWidth, rowHeight); // x\n textureOffset += 1.0;\n\n vec2 valueYPos = nextPos(cellCurrentRow, cellCurrentColumn, columnCount, textureOffset);\n textrueOffsets.g = pos2value(valueYPos, columnWidth, rowHeight); // x\n textureOffset += 1.0;\n } else {\n textrueOffsets = u_offsets;\n }\n\n // cal style mapping\n\n // unpack color(vec2)\n v_color = a_Color;\n\n // radius(16-bit)\n v_radius = newSize;\n\n // TODO: billboard\n // anti-alias\n // float antialiased_blur = -max(u_blur, antialiasblur);\n float antialiasblur = -max(2.0 / u_DevicePixelRatio / newSize, u_blur);\n\n vec2 offset = (extrude.xy * (newSize + u_stroke_width) + textrueOffsets);\n vec3 aPosition = a_Position;\n if(u_isMeter < 1.0) {\n // \u4E0D\u4EE5\u7C73\u4E3A\u5B9E\u9645\u5355\u4F4D\n offset = project_pixel(offset);\n } else {\n // \u4EE5\u7C73\u4E3A\u5B9E\u9645\u5355\u4F4D\n if(newSize * pow(2.0, u_Zoom) < 48.0) {\n antialiasblur = max(antialiasblur, -0.05);\n } else if(newSize * pow(2.0, u_Zoom) < 128.0) {\n antialiasblur = max(antialiasblur, -0.6/pow(u_Zoom, 2.0));\n } else {\n antialiasblur = max(antialiasblur, -0.8/pow(u_Zoom, 2.0));\n }\n \n if(u_CoordinateSystem == COORDINATE_SYSTEM_LNGLAT || u_CoordinateSystem == COORDINATE_SYSTEM_LNGLAT_OFFSET) {\n aPosition.x += offset.x / u_meteryScale;\n aPosition.y += offset.y;\n offset = vec2(0.0);\n }\n }\n\n // TODP: /abs(extrude.x) \u662F\u4E3A\u4E86\u517C\u5BB9\u5730\u7403\u6A21\u5F0F\n v_data = vec4(extrude.x/abs(extrude.x), extrude.y/abs(extrude.y), antialiasblur,shape_type);\n\n\n // vec4 project_pos = project_position(vec4(a_Position.xy, 0.0, 1.0));\n vec4 project_pos = project_position(vec4(aPosition.xy, 0.0, 1.0));\n // gl_Position = project_common_position_to_clipspace(vec4(project_pos.xy + offset, project_pixel(setPickingOrder(0.0)), 1.0));\n\n float raiseHeight = u_raisingHeight;\n if(u_CoordinateSystem == COORDINATE_SYSTEM_LNGLAT || u_CoordinateSystem == COORDINATE_SYSTEM_LNGLAT_OFFSET) {\n float mapboxZoomScale = 4.0/pow(2.0, 21.0 - u_Zoom);\n raiseHeight = u_raisingHeight * mapboxZoomScale;\n }\n\n if(u_CoordinateSystem == COORDINATE_SYSTEM_P20_2) { // gaode2.x\n gl_Position = u_Mvp * vec4(project_pos.xy + offset, raiseHeight, 1.0);\n } else {\n gl_Position = project_common_position_to_clipspace(vec4(project_pos.xy + offset, u_raisingHeight, 1.0));\n }\n\n if(u_globel > 0.0) {\n gl_Position = u_ViewProjectionMatrix * vec4(a_Position + extrude * newSize * 0.1, 1.0);\n }\n \n // gl_Position = project_common_position_to_clipspace(vec4(project_pos.xy + offset, 0.0, 1.0));\n\n setPickingColor(a_PickingColor);\n}\n";
23
23
  import { Version } from '@antv/l7-maps';
24
24
  import { mat4, vec3 } from 'gl-matrix';
25
25
 
@@ -41,8 +41,12 @@ var FillModel = function (_BaseModel) {
41
41
 
42
42
  _defineProperty(_assertThisInitialized(_this), "meter2coord", 1);
43
43
 
44
+ _defineProperty(_assertThisInitialized(_this), "meteryScale", 1);
45
+
44
46
  _defineProperty(_assertThisInitialized(_this), "isMeter", false);
45
47
 
48
+ _defineProperty(_assertThisInitialized(_this), "unit", 'l7size');
49
+
46
50
  return _this;
47
51
  }
48
52
 
@@ -64,7 +68,11 @@ var FillModel = function (_BaseModel) {
64
68
  _ref$blur = _ref.blur,
65
69
  blur = _ref$blur === void 0 ? 0 : _ref$blur,
66
70
  _ref$raisingHeight = _ref.raisingHeight,
67
- raisingHeight = _ref$raisingHeight === void 0 ? 0 : _ref$raisingHeight;
71
+ raisingHeight = _ref$raisingHeight === void 0 ? 0 : _ref$raisingHeight,
72
+ _ref$unit = _ref.unit,
73
+ unit = _ref$unit === void 0 ? 'l7size' : _ref$unit;
74
+
75
+ this.updateUnit(unit);
68
76
 
69
77
  if (this.dataTextureTest && this.dataTextureNeedUpdate({
70
78
  opacity: opacity,
@@ -107,6 +115,8 @@ var FillModel = function (_BaseModel) {
107
115
 
108
116
  return {
109
117
  u_raisingHeight: Number(raisingHeight),
118
+ u_meter2coord: this.meter2coord,
119
+ u_meteryScale: this.meteryScale,
110
120
  u_isMeter: Number(this.isMeter),
111
121
  u_blur: blur,
112
122
  u_additive: blend === 'additive' ? 1.0 : 0.0,
@@ -142,17 +152,7 @@ var FillModel = function (_BaseModel) {
142
152
  }, {
143
153
  key: "initModels",
144
154
  value: function initModels() {
145
- var _ref3 = this.layer.getLayerConfig(),
146
- _ref3$unit = _ref3.unit,
147
- unit = _ref3$unit === void 0 ? 'l7size' : _ref3$unit;
148
-
149
- var version = this.mapService.version;
150
-
151
- if (unit === 'meter' && version !== Version.L7MAP && version !== Version.GLOBEL) {
152
- this.isMeter = true;
153
- this.calMeter2Coord();
154
- }
155
-
155
+ this.updateUnit('l7size');
156
156
  return this.buildModels();
157
157
  }
158
158
  }, {
@@ -166,17 +166,20 @@ var FillModel = function (_BaseModel) {
166
166
 
167
167
  var center = [(minLng + maxLng) / 2, (minLat + maxLat) / 2];
168
168
  var version = this.mapService.version;
169
+ var mapboxContext = $window === null || $window === void 0 ? void 0 : $window.mapboxgl;
169
170
 
170
- if (version === Version.MAPBOX && window.mapboxgl.MercatorCoordinate) {
171
- var coord = window.mapboxgl.MercatorCoordinate.fromLngLat({
171
+ if (version === Version.MAPBOX && mapboxContext !== null && mapboxContext !== void 0 && mapboxContext.MercatorCoordinate) {
172
+ var coord = mapboxContext.MercatorCoordinate.fromLngLat({
172
173
  lng: center[0],
173
174
  lat: center[1]
174
175
  }, 0);
175
- var offsetInMeters = 1;
176
- var offsetInMercatorCoordinateUnits = offsetInMeters * coord.meterInMercatorCoordinateUnits();
177
- var westCoord = new window.mapboxgl.MercatorCoordinate(coord.x - offsetInMercatorCoordinateUnits, coord.y, coord.z);
176
+ var offsetInMercatorCoordinateUnits = coord.meterInMercatorCoordinateUnits();
177
+ var westCoord = new mapboxContext.MercatorCoordinate(coord.x - offsetInMercatorCoordinateUnits, coord.y, coord.z);
178
178
  var westLnglat = westCoord.toLngLat();
179
+ var southCoord = new mapboxContext.MercatorCoordinate(coord.x, coord.y - offsetInMercatorCoordinateUnits, coord.z);
180
+ var southLnglat = southCoord.toLngLat();
179
181
  this.meter2coord = center[0] - westLnglat.lng;
182
+ this.meteryScale = (southLnglat.lat - center[1]) / this.meter2coord;
180
183
  return;
181
184
  }
182
185
 
@@ -191,15 +194,15 @@ var FillModel = function (_BaseModel) {
191
194
  }, {
192
195
  key: "buildModels",
193
196
  value: function buildModels() {
194
- var _ref4 = this.layer.getLayerConfig(),
195
- _ref4$mask = _ref4.mask,
196
- mask = _ref4$mask === void 0 ? false : _ref4$mask,
197
- _ref4$maskInside = _ref4.maskInside,
198
- maskInside = _ref4$maskInside === void 0 ? true : _ref4$maskInside,
199
- _ref4$animateOption = _ref4.animateOption,
200
- animateOption = _ref4$animateOption === void 0 ? {
197
+ var _ref3 = this.layer.getLayerConfig(),
198
+ _ref3$mask = _ref3.mask,
199
+ mask = _ref3$mask === void 0 ? false : _ref3$mask,
200
+ _ref3$maskInside = _ref3.maskInside,
201
+ maskInside = _ref3$maskInside === void 0 ? true : _ref3$maskInside,
202
+ _ref3$animateOption = _ref3.animateOption,
203
+ animateOption = _ref3$animateOption === void 0 ? {
201
204
  enable: false
202
- } : _ref4$animateOption;
205
+ } : _ref3$animateOption;
203
206
 
204
207
  var _this$getShaders = this.getShaders(animateOption),
205
208
  frag = _this$getShaders.frag,
@@ -217,11 +220,7 @@ var FillModel = function (_BaseModel) {
217
220
  enable: isGlobel
218
221
  },
219
222
  blend: this.getBlend(),
220
- stencil: getMask(mask, maskInside),
221
- cull: {
222
- enable: true,
223
- face: getCullFace(this.mapService.version)
224
- }
223
+ stencil: getMask(mask, maskInside)
225
224
  })];
226
225
  }
227
226
  }, {
@@ -332,7 +331,7 @@ var FillModel = function (_BaseModel) {
332
331
  update: function update(feature, featureIdx, vertex, attributeIdx) {
333
332
  var _feature$size = feature.size,
334
333
  size = _feature$size === void 0 ? 5 : _feature$size;
335
- return Array.isArray(size) ? [size[0] * _this2.meter2coord] : [size * _this2.meter2coord];
334
+ return Array.isArray(size) ? [size[0]] : [size];
336
335
  }
337
336
  }
338
337
  });
@@ -359,6 +358,23 @@ var FillModel = function (_BaseModel) {
359
358
  }
360
359
  });
361
360
  }
361
+ }, {
362
+ key: "updateUnit",
363
+ value: function updateUnit(unit) {
364
+ var version = this.mapService.version;
365
+
366
+ if (this.unit !== unit) {
367
+ if (this.unit !== 'meter' && unit === 'meter' && version !== Version.L7MAP && version !== Version.GLOBEL) {
368
+ this.isMeter = true;
369
+ this.calMeter2Coord();
370
+ } else if (this.unit === 'meter' && unit !== 'meter') {
371
+ this.isMeter = false;
372
+ this.meter2coord = 1;
373
+ }
374
+
375
+ this.unit = unit;
376
+ }
377
+ }
362
378
  }]);
363
379
 
364
380
  return FillModel;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/point/models/fill.ts"],"names":["AttributeType","gl","getCullFace","getMask","BaseModel","GlobelPointFillTriangulation","PointFillTriangulation","Version","mat4","vec3","FillModel","layer","getLayerConfig","opacity","strokeOpacity","strokeWidth","stroke","offsets","blend","blur","raisingHeight","dataTextureTest","dataTextureNeedUpdate","judgeStyleAttributes","encodeData","getEncodedData","calDataFrame","cellLength","cellProperties","data","width","height","rowCount","dataTexture","length","createTexture2D","flipY","format","LUMINANCE","type","FLOAT","u_raisingHeight","Number","u_isMeter","isMeter","u_blur","u_additive","u_globel","mapService","version","GLOBEL","u_dataTexture","u_cellTypeLayout","getCellTypeLayout","u_opacity","u_stroke_opacity","u_stroke_width","u_stroke_color","getStrokeColor","u_offsets","isOffsetStatic","animateOption","enable","u_aimate","animateOption2Array","u_time","getLayerAnimateTime","styleAttributeService","createAttributesAndIndices","unit","L7MAP","calMeter2Coord","buildModels","getSource","extent","minLng","minLat","maxLng","maxLat","center","MAPBOX","window","mapboxgl","MercatorCoordinate","coord","fromLngLat","lng","lat","offsetInMeters","offsetInMercatorCoordinateUnits","meterInMercatorCoordinateUnits","westCoord","x","y","z","westLnglat","toLngLat","meter2coord","m1","meterToCoord","m2","Boolean","mask","maskInside","getShaders","frag","vert","isGlobel","triangulation","buildLayerModel","moduleName","vertexShader","fragmentShader","depth","getBlend","stencil","cull","face","waveFillFrag","pointFillVert","pointFillFrag","destroy","option","speed","rings","registerStyleAttribute","name","Attribute","descriptor","buffer","usage","DYNAMIC_DRAW","size","update","feature","featureIdx","vertex","attributeIdx","extrude","n1","fromValues","n2","xzReg","angle","Math","PI","yReg","asin","m","create","rotateY","rotateX","v1","transformMat4","normalize","v2","v3","v4","extrudeIndex","Array","isArray","shape","shape2d","shapeIndex","indexOf"],"mappings":"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","sourcesContent":["import {\n AttributeType,\n gl,\n IAnimateOption,\n IAttribute,\n IElements,\n IEncodeFeature,\n ILayerConfig,\n IModel,\n IModelUniform,\n} from '@antv/l7-core';\nimport { getCullFace, getMask } from '@antv/l7-utils';\nimport { isNumber } from 'lodash';\nimport BaseModel from '../../core/BaseModel';\nimport { IPointLayerStyleOptions } from '../../core/interface';\nimport {\n GlobelPointFillTriangulation,\n PointFillTriangulation,\n} from '../../core/triangulation';\n// animate pointLayer shader - support animate\nimport waveFillFrag from '../shaders/animate/wave_frag.glsl';\n// static pointLayer shader - not support animate\nimport pointFillFrag from '../shaders/fill_frag.glsl';\nimport pointFillVert from '../shaders/fill_vert.glsl';\n\nimport { Version } from '@antv/l7-maps';\nimport { mat4, vec3 } from 'gl-matrix';\nexport default class FillModel extends BaseModel {\n public meter2coord: number = 1;\n private isMeter: boolean = false;\n public getUninforms(): IModelUniform {\n const {\n opacity = 1,\n strokeOpacity = 1,\n strokeWidth = 0,\n stroke = 'rgba(0,0,0,0)',\n offsets = [0, 0],\n blend,\n blur = 0,\n raisingHeight = 0,\n } = this.layer.getLayerConfig() as IPointLayerStyleOptions;\n\n if (\n this.dataTextureTest &&\n this.dataTextureNeedUpdate({\n opacity,\n strokeOpacity,\n strokeWidth,\n stroke,\n offsets,\n })\n ) {\n // 判断当前的样式中哪些是需要进行数据映射的,哪些是常量,同时计算用于构建数据纹理的一些中间变量\n this.judgeStyleAttributes({\n opacity,\n strokeOpacity,\n strokeWidth,\n stroke,\n offsets,\n });\n\n const encodeData = this.layer.getEncodedData();\n const { data, width, height } = this.calDataFrame(\n this.cellLength,\n encodeData,\n this.cellProperties,\n );\n this.rowCount = height; // 当前数据纹理有多少行\n\n this.dataTexture =\n this.cellLength > 0 && data.length > 0\n ? this.createTexture2D({\n flipY: true,\n data,\n format: gl.LUMINANCE,\n type: gl.FLOAT,\n width,\n height,\n })\n : this.createTexture2D({\n flipY: true,\n data: [1],\n format: gl.LUMINANCE,\n type: gl.FLOAT,\n width: 1,\n height: 1,\n });\n }\n return {\n u_raisingHeight: Number(raisingHeight),\n\n u_isMeter: Number(this.isMeter),\n u_blur: blur,\n\n u_additive: blend === 'additive' ? 1.0 : 0.0,\n u_globel: this.mapService.version === Version.GLOBEL ? 1 : 0,\n u_dataTexture: this.dataTexture, // 数据纹理 - 有数据映射的时候纹理中带数据,若没有任何数据映射时纹理是 [1]\n u_cellTypeLayout: this.getCellTypeLayout(),\n\n u_opacity: isNumber(opacity) ? opacity : 1.0,\n u_stroke_opacity: isNumber(strokeOpacity) ? strokeOpacity : 1.0,\n u_stroke_width: isNumber(strokeWidth) ? strokeWidth : 1.0,\n u_stroke_color: this.getStrokeColor(stroke),\n u_offsets: this.isOffsetStatic(offsets)\n ? (offsets as [number, number])\n : [0, 0],\n };\n }\n public getAnimateUniforms(): IModelUniform {\n const {\n animateOption = { enable: false },\n } = this.layer.getLayerConfig() as ILayerConfig;\n return {\n u_aimate: this.animateOption2Array(animateOption),\n u_time: this.layer.getLayerAnimateTime(),\n };\n }\n\n public getAttribute(): {\n attributes: {\n [attributeName: string]: IAttribute;\n };\n elements: IElements;\n } {\n return this.styleAttributeService.createAttributesAndIndices(\n this.layer.getEncodedData(),\n PointFillTriangulation,\n );\n }\n\n public initModels(): IModel[] {\n const {\n unit = 'l7size',\n } = this.layer.getLayerConfig() as IPointLayerStyleOptions;\n const { version } = this.mapService;\n if (\n unit === 'meter' &&\n version !== Version.L7MAP &&\n version !== Version.GLOBEL\n ) {\n this.isMeter = true;\n this.calMeter2Coord();\n }\n\n return this.buildModels();\n }\n\n /**\n * 计算等面积点图层(unit meter)笛卡尔坐标标度与世界坐标标度的比例\n * @returns\n */\n public calMeter2Coord() {\n const [minLng, minLat, maxLng, maxLat] = this.layer.getSource().extent;\n const center = [(minLng + maxLng) / 2, (minLat + maxLat) / 2];\n\n const { version } = this.mapService;\n if (version === Version.MAPBOX && window.mapboxgl.MercatorCoordinate) {\n const coord = window.mapboxgl.MercatorCoordinate.fromLngLat(\n { lng: center[0], lat: center[1] },\n 0,\n );\n const offsetInMeters = 1;\n const offsetInMercatorCoordinateUnits =\n offsetInMeters * coord.meterInMercatorCoordinateUnits();\n const westCoord = new window.mapboxgl.MercatorCoordinate(\n coord.x - offsetInMercatorCoordinateUnits,\n coord.y,\n coord.z,\n );\n const westLnglat = westCoord.toLngLat();\n\n this.meter2coord = center[0] - westLnglat.lng;\n return;\n }\n\n // @ts-ignore\n const m1 = this.mapService.meterToCoord(center, [minLng, minLat]);\n // @ts-ignore\n const m2 = this.mapService.meterToCoord(center, [\n maxLng === minLng ? maxLng + 0.1 : maxLng,\n maxLat === minLat ? minLat + 0.1 : maxLat,\n ]);\n this.meter2coord = (m1 + m2) / 2;\n if (!Boolean(this.meter2coord)) {\n // Tip: 兼容单个数据导致的 m1、m2 为 NaN\n this.meter2coord = 7.70681090738883;\n }\n }\n\n public buildModels(): IModel[] {\n const {\n mask = false,\n maskInside = true,\n animateOption = { enable: false },\n } = this.layer.getLayerConfig() as Partial<\n ILayerConfig & IPointLayerStyleOptions\n >;\n const { frag, vert, type } = this.getShaders(animateOption);\n\n // TODO: 判断当前的点图层的模型是普通地图模式还是地球模式\n const isGlobel = this.mapService.version === 'GLOBEL';\n this.layer.triangulation = isGlobel\n ? GlobelPointFillTriangulation\n : PointFillTriangulation;\n return [\n this.layer.buildLayerModel({\n moduleName: 'pointfill_' + type,\n vertexShader: vert,\n fragmentShader: frag,\n triangulation: isGlobel\n ? GlobelPointFillTriangulation\n : PointFillTriangulation,\n depth: { enable: isGlobel },\n blend: this.getBlend(),\n stencil: getMask(mask, maskInside),\n cull: {\n enable: true,\n face: getCullFace(this.mapService.version),\n },\n }),\n ];\n }\n\n /**\n * 根据 animateOption 的值返回对应的 shader 代码\n * @returns\n */\n public getShaders(\n animateOption: Partial<IAnimateOption>,\n ): { frag: string; vert: string; type: string } {\n if (animateOption.enable) {\n switch (animateOption.type) {\n case 'wave':\n return {\n frag: waveFillFrag,\n vert: pointFillVert,\n type: 'wave',\n };\n default:\n return {\n frag: waveFillFrag,\n vert: pointFillVert,\n type: 'wave',\n };\n }\n } else {\n return {\n frag: pointFillFrag,\n vert: pointFillVert,\n type: 'normal',\n };\n }\n }\n\n public clearModels() {\n this.dataTexture?.destroy();\n }\n\n // overwrite baseModel func\n protected animateOption2Array(option: Partial<IAnimateOption>): number[] {\n return [option.enable ? 0 : 1.0, option.speed || 1, option.rings || 3, 0];\n }\n protected registerBuiltinAttributes() {\n // TODO: 判断当前的点图层的模型是普通地图模式还是地球模式\n const isGlobel = this.mapService.version === 'GLOBEL';\n\n this.styleAttributeService.registerStyleAttribute({\n name: 'extrude',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_Extrude',\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: 3,\n update: (\n feature: IEncodeFeature,\n featureIdx: number,\n vertex: number[],\n attributeIdx: number,\n ) => {\n let extrude;\n // 地球模式\n if (isGlobel) {\n const [x, y, z] = vertex;\n const n1 = vec3.fromValues(0, 0, 1);\n const n2 = vec3.fromValues(x, 0, z);\n\n const xzReg =\n x >= 0 ? vec3.angle(n1, n2) : Math.PI * 2 - vec3.angle(n1, n2);\n\n const yReg = Math.PI * 2 - Math.asin(y / 100);\n\n const m = mat4.create();\n mat4.rotateY(m, m, xzReg);\n mat4.rotateX(m, m, yReg);\n\n const v1 = vec3.fromValues(1, 1, 0);\n vec3.transformMat4(v1, v1, m);\n vec3.normalize(v1, v1);\n\n const v2 = vec3.fromValues(-1, 1, 0);\n vec3.transformMat4(v2, v2, m);\n vec3.normalize(v2, v2);\n\n const v3 = vec3.fromValues(-1, -1, 0);\n vec3.transformMat4(v3, v3, m);\n vec3.normalize(v3, v3);\n\n const v4 = vec3.fromValues(1, -1, 0);\n vec3.transformMat4(v4, v4, m);\n vec3.normalize(v4, v4);\n\n extrude = [...v1, ...v2, ...v3, ...v4];\n } else {\n // 平面模式\n extrude = [1, 1, 0, -1, 1, 0, -1, -1, 0, 1, -1, 0];\n }\n\n const extrudeIndex = (attributeIdx % 4) * 3;\n return [\n extrude[extrudeIndex],\n extrude[extrudeIndex + 1],\n extrude[extrudeIndex + 2],\n ];\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 = 5 } = feature;\n // console.log('featureIdx', featureIdx, feature)\n return Array.isArray(size)\n ? [size[0] * this.meter2coord]\n : [(size as number) * this.meter2coord];\n },\n },\n });\n\n // point layer size;\n this.styleAttributeService.registerStyleAttribute({\n name: 'shape',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_Shape',\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 { shape = 2 } = feature;\n const shape2d = this.layer.getLayerConfig().shape2d as string[];\n const shapeIndex = shape2d.indexOf(shape as string);\n return [shapeIndex];\n },\n },\n });\n }\n}\n"],"file":"fill.js"}
1
+ {"version":3,"sources":["../../../src/point/models/fill.ts"],"names":["AttributeType","gl","$window","getMask","BaseModel","GlobelPointFillTriangulation","PointFillTriangulation","Version","mat4","vec3","FillModel","layer","getLayerConfig","opacity","strokeOpacity","strokeWidth","stroke","offsets","blend","blur","raisingHeight","unit","updateUnit","dataTextureTest","dataTextureNeedUpdate","judgeStyleAttributes","encodeData","getEncodedData","calDataFrame","cellLength","cellProperties","data","width","height","rowCount","dataTexture","length","createTexture2D","flipY","format","LUMINANCE","type","FLOAT","u_raisingHeight","Number","u_meter2coord","meter2coord","u_meteryScale","meteryScale","u_isMeter","isMeter","u_blur","u_additive","u_globel","mapService","version","GLOBEL","u_dataTexture","u_cellTypeLayout","getCellTypeLayout","u_opacity","u_stroke_opacity","u_stroke_width","u_stroke_color","getStrokeColor","u_offsets","isOffsetStatic","animateOption","enable","u_aimate","animateOption2Array","u_time","getLayerAnimateTime","styleAttributeService","createAttributesAndIndices","buildModels","getSource","extent","minLng","minLat","maxLng","maxLat","center","mapboxContext","mapboxgl","MAPBOX","MercatorCoordinate","coord","fromLngLat","lng","lat","offsetInMercatorCoordinateUnits","meterInMercatorCoordinateUnits","westCoord","x","y","z","westLnglat","toLngLat","southCoord","southLnglat","m1","meterToCoord","m2","Boolean","mask","maskInside","getShaders","frag","vert","isGlobel","triangulation","buildLayerModel","moduleName","vertexShader","fragmentShader","depth","getBlend","stencil","waveFillFrag","pointFillVert","pointFillFrag","destroy","option","speed","rings","registerStyleAttribute","name","Attribute","descriptor","buffer","usage","DYNAMIC_DRAW","size","update","feature","featureIdx","vertex","attributeIdx","extrude","n1","fromValues","n2","xzReg","angle","Math","PI","yReg","asin","m","create","rotateY","rotateX","v1","transformMat4","normalize","v2","v3","v4","extrudeIndex","Array","isArray","shape","shape2d","shapeIndex","indexOf","L7MAP","calMeter2Coord"],"mappings":"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","sourcesContent":["import {\n AttributeType,\n gl,\n IAnimateOption,\n IAttribute,\n IElements,\n IEncodeFeature,\n ILayerConfig,\n IModel,\n IModelUniform,\n} from '@antv/l7-core';\nimport { $window, getCullFace, getMask } from '@antv/l7-utils';\nimport { isNumber } from 'lodash';\nimport BaseModel from '../../core/BaseModel';\nimport { IPointLayerStyleOptions } from '../../core/interface';\nimport {\n GlobelPointFillTriangulation,\n PointFillTriangulation,\n} from '../../core/triangulation';\n// animate pointLayer shader - support animate\nimport waveFillFrag from '../shaders/animate/wave_frag.glsl';\n// static pointLayer shader - not support animate\nimport pointFillFrag from '../shaders/fill_frag.glsl';\nimport pointFillVert from '../shaders/fill_vert.glsl';\n\nimport { Version } from '@antv/l7-maps';\nimport { mat4, vec3 } from 'gl-matrix';\nexport default class FillModel extends BaseModel {\n private meter2coord: number = 1;\n private meteryScale: number = 1; // 兼容 mapbox\n private isMeter: boolean = false;\n\n private unit: string = 'l7size';\n public getUninforms(): IModelUniform {\n const {\n opacity = 1,\n strokeOpacity = 1,\n strokeWidth = 0,\n stroke = 'rgba(0,0,0,0)',\n offsets = [0, 0],\n blend,\n blur = 0,\n raisingHeight = 0,\n unit = 'l7size',\n } = this.layer.getLayerConfig() as IPointLayerStyleOptions;\n this.updateUnit(unit);\n\n if (\n this.dataTextureTest &&\n this.dataTextureNeedUpdate({\n opacity,\n strokeOpacity,\n strokeWidth,\n stroke,\n offsets,\n })\n ) {\n // 判断当前的样式中哪些是需要进行数据映射的,哪些是常量,同时计算用于构建数据纹理的一些中间变量\n this.judgeStyleAttributes({\n opacity,\n strokeOpacity,\n strokeWidth,\n stroke,\n offsets,\n });\n\n const encodeData = this.layer.getEncodedData();\n const { data, width, height } = this.calDataFrame(\n this.cellLength,\n encodeData,\n this.cellProperties,\n );\n this.rowCount = height; // 当前数据纹理有多少行\n\n this.dataTexture =\n this.cellLength > 0 && data.length > 0\n ? this.createTexture2D({\n flipY: true,\n data,\n format: gl.LUMINANCE,\n type: gl.FLOAT,\n width,\n height,\n })\n : this.createTexture2D({\n flipY: true,\n data: [1],\n format: gl.LUMINANCE,\n type: gl.FLOAT,\n width: 1,\n height: 1,\n });\n }\n return {\n u_raisingHeight: Number(raisingHeight),\n\n u_meter2coord: this.meter2coord,\n u_meteryScale: this.meteryScale,\n u_isMeter: Number(this.isMeter),\n u_blur: blur,\n\n u_additive: blend === 'additive' ? 1.0 : 0.0,\n u_globel: this.mapService.version === Version.GLOBEL ? 1 : 0,\n u_dataTexture: this.dataTexture, // 数据纹理 - 有数据映射的时候纹理中带数据,若没有任何数据映射时纹理是 [1]\n u_cellTypeLayout: this.getCellTypeLayout(),\n\n u_opacity: isNumber(opacity) ? opacity : 1.0,\n u_stroke_opacity: isNumber(strokeOpacity) ? strokeOpacity : 1.0,\n u_stroke_width: isNumber(strokeWidth) ? strokeWidth : 1.0,\n u_stroke_color: this.getStrokeColor(stroke),\n u_offsets: this.isOffsetStatic(offsets)\n ? (offsets as [number, number])\n : [0, 0],\n };\n }\n public getAnimateUniforms(): IModelUniform {\n const {\n animateOption = { enable: false },\n } = this.layer.getLayerConfig() as ILayerConfig;\n return {\n u_aimate: this.animateOption2Array(animateOption),\n u_time: this.layer.getLayerAnimateTime(),\n };\n }\n\n public getAttribute(): {\n attributes: {\n [attributeName: string]: IAttribute;\n };\n elements: IElements;\n } {\n return this.styleAttributeService.createAttributesAndIndices(\n this.layer.getEncodedData(),\n PointFillTriangulation,\n );\n }\n\n public initModels(): IModel[] {\n this.updateUnit('l7size');\n\n return this.buildModels();\n }\n\n /**\n * 计算等面积点图层(unit meter)笛卡尔坐标标度与世界坐标标度的比例\n * @returns\n */\n public calMeter2Coord() {\n const [minLng, minLat, maxLng, maxLat] = this.layer.getSource().extent;\n const center = [(minLng + maxLng) / 2, (minLat + maxLat) / 2];\n\n const { version } = this.mapService;\n const mapboxContext = $window?.mapboxgl;\n if (version === Version.MAPBOX && mapboxContext?.MercatorCoordinate) {\n // 参考:\n // https://docs.mapbox.com/mapbox-gl-js/api/geography/#mercatorcoordinate#meterinmercatorcoordinateunits\n const coord = mapboxContext.MercatorCoordinate.fromLngLat(\n { lng: center[0], lat: center[1] },\n 0,\n );\n const offsetInMercatorCoordinateUnits = coord.meterInMercatorCoordinateUnits();\n const westCoord = new mapboxContext.MercatorCoordinate(\n coord.x - offsetInMercatorCoordinateUnits,\n coord.y,\n coord.z,\n );\n const westLnglat = westCoord.toLngLat();\n\n const southCoord = new mapboxContext.MercatorCoordinate(\n coord.x,\n coord.y - offsetInMercatorCoordinateUnits,\n coord.z,\n );\n const southLnglat = southCoord.toLngLat();\n\n this.meter2coord = center[0] - westLnglat.lng;\n\n this.meteryScale = (southLnglat.lat - center[1]) / this.meter2coord;\n return;\n }\n\n const m1 = this.mapService.meterToCoord(center, [minLng, minLat]);\n const m2 = this.mapService.meterToCoord(center, [\n maxLng === minLng ? maxLng + 0.1 : maxLng,\n maxLat === minLat ? minLat + 0.1 : maxLat,\n ]);\n this.meter2coord = (m1 + m2) / 2;\n if (!Boolean(this.meter2coord)) {\n // Tip: 兼容单个数据导致的 m1、m2 为 NaN\n this.meter2coord = 7.70681090738883;\n }\n }\n\n public buildModels(): IModel[] {\n const {\n mask = false,\n maskInside = true,\n animateOption = { enable: false },\n } = this.layer.getLayerConfig() as Partial<\n ILayerConfig & IPointLayerStyleOptions\n >;\n const { frag, vert, type } = this.getShaders(animateOption);\n\n // TODO: 判断当前的点图层的模型是普通地图模式还是地球模式\n const isGlobel = this.mapService.version === 'GLOBEL';\n this.layer.triangulation = isGlobel\n ? GlobelPointFillTriangulation\n : PointFillTriangulation;\n return [\n this.layer.buildLayerModel({\n moduleName: 'pointfill_' + type,\n vertexShader: vert,\n fragmentShader: frag,\n triangulation: isGlobel\n ? GlobelPointFillTriangulation\n : PointFillTriangulation,\n depth: { enable: isGlobel },\n blend: this.getBlend(),\n stencil: getMask(mask, maskInside),\n }),\n ];\n }\n\n /**\n * 根据 animateOption 的值返回对应的 shader 代码\n * @returns\n */\n public getShaders(\n animateOption: Partial<IAnimateOption>,\n ): { frag: string; vert: string; type: string } {\n if (animateOption.enable) {\n switch (animateOption.type) {\n case 'wave':\n return {\n frag: waveFillFrag,\n vert: pointFillVert,\n type: 'wave',\n };\n default:\n return {\n frag: waveFillFrag,\n vert: pointFillVert,\n type: 'wave',\n };\n }\n } else {\n return {\n frag: pointFillFrag,\n vert: pointFillVert,\n type: 'normal',\n };\n }\n }\n\n public clearModels() {\n this.dataTexture?.destroy();\n }\n\n // overwrite baseModel func\n protected animateOption2Array(option: Partial<IAnimateOption>): number[] {\n return [option.enable ? 0 : 1.0, option.speed || 1, option.rings || 3, 0];\n }\n protected registerBuiltinAttributes() {\n // TODO: 判断当前的点图层的模型是普通地图模式还是地球模式\n const isGlobel = this.mapService.version === 'GLOBEL';\n\n this.styleAttributeService.registerStyleAttribute({\n name: 'extrude',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_Extrude',\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: 3,\n update: (\n feature: IEncodeFeature,\n featureIdx: number,\n vertex: number[],\n attributeIdx: number,\n ) => {\n let extrude;\n // 地球模式\n if (isGlobel) {\n const [x, y, z] = vertex;\n const n1 = vec3.fromValues(0, 0, 1);\n const n2 = vec3.fromValues(x, 0, z);\n\n const xzReg =\n x >= 0 ? vec3.angle(n1, n2) : Math.PI * 2 - vec3.angle(n1, n2);\n\n const yReg = Math.PI * 2 - Math.asin(y / 100);\n\n const m = mat4.create();\n mat4.rotateY(m, m, xzReg);\n mat4.rotateX(m, m, yReg);\n\n const v1 = vec3.fromValues(1, 1, 0);\n vec3.transformMat4(v1, v1, m);\n vec3.normalize(v1, v1);\n\n const v2 = vec3.fromValues(-1, 1, 0);\n vec3.transformMat4(v2, v2, m);\n vec3.normalize(v2, v2);\n\n const v3 = vec3.fromValues(-1, -1, 0);\n vec3.transformMat4(v3, v3, m);\n vec3.normalize(v3, v3);\n\n const v4 = vec3.fromValues(1, -1, 0);\n vec3.transformMat4(v4, v4, m);\n vec3.normalize(v4, v4);\n\n extrude = [...v1, ...v2, ...v3, ...v4];\n } else {\n // 平面模式\n extrude = [1, 1, 0, -1, 1, 0, -1, -1, 0, 1, -1, 0];\n }\n\n const extrudeIndex = (attributeIdx % 4) * 3;\n return [\n extrude[extrudeIndex],\n extrude[extrudeIndex + 1],\n extrude[extrudeIndex + 2],\n ];\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 = 5 } = feature;\n return Array.isArray(size) ? [size[0]] : [size as number];\n },\n },\n });\n\n // point layer size;\n this.styleAttributeService.registerStyleAttribute({\n name: 'shape',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_Shape',\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 { shape = 2 } = feature;\n const shape2d = this.layer.getLayerConfig().shape2d as string[];\n const shapeIndex = shape2d.indexOf(shape as string);\n return [shapeIndex];\n },\n },\n });\n }\n\n /**\n * 判断是否更新点图层的计量单位\n * @param unit\n */\n private updateUnit(unit: string) {\n const { version } = this.mapService;\n if (this.unit !== unit) {\n // l7size => meter\n if (\n this.unit !== 'meter' &&\n unit === 'meter' &&\n version !== Version.L7MAP &&\n version !== Version.GLOBEL\n ) {\n this.isMeter = true;\n this.calMeter2Coord();\n // meter => l7size\n } else if (this.unit === 'meter' && unit !== 'meter') {\n this.isMeter = false;\n this.meter2coord = 1;\n }\n this.unit = unit;\n }\n }\n}\n"],"file":"fill.js"}
@@ -139,17 +139,43 @@ var FeatureScalePlugin = (_dec = (0, _inversify.injectable)(), _dec2 = (0, _inve
139
139
  })) {
140
140
  attributeScale.type = _l7Core.StyleScaleType.VARIABLE;
141
141
  scales.forEach(function (scale) {
142
- if (!attributeScale.callback) {
143
- var _scale$option, _scale$option2, _scale$option3, _scale$option4, _scale$option5;
144
-
145
- if (attributeScale.values && attributeScale.values !== 'text' && ((_scale$option = scale.option) === null || _scale$option === void 0 ? void 0 : _scale$option.type) !== _l7Core.ScaleTypes.DIVERGING && ((_scale$option2 = scale.option) === null || _scale$option2 === void 0 ? void 0 : _scale$option2.type) !== _l7Core.ScaleTypes.SEQUENTIAL) {
146
- scale.scale.range(attributeScale.values);
147
- } else if (((_scale$option3 = scale.option) === null || _scale$option3 === void 0 ? void 0 : _scale$option3.type) === _l7Core.ScaleTypes.CAT) {
148
- scale.scale.range(scale.option.domain);
149
- } else if (((_scale$option4 = scale.option) === null || _scale$option4 === void 0 ? void 0 : _scale$option4.type) === _l7Core.ScaleTypes.DIVERGING || ((_scale$option5 = scale.option) === null || _scale$option5 === void 0 ? void 0 : _scale$option5.type) === _l7Core.ScaleTypes.SEQUENTIAL) {
150
- scale.scale.interpolator(d3interpolate.interpolateRgbBasis(attributeScale.values));
142
+ var _scale$option;
143
+
144
+ if (!attributeScale.callback && attributeScale.values !== 'text') {
145
+ switch ((_scale$option = scale.option) === null || _scale$option === void 0 ? void 0 : _scale$option.type) {
146
+ case _l7Core.ScaleTypes.LOG:
147
+ case _l7Core.ScaleTypes.LINEAR:
148
+ case _l7Core.ScaleTypes.POWER:
149
+ if (attributeScale.values && attributeScale.values.length > 2) {
150
+ var tick = scale.scale.ticks(attributeScale.values.length);
151
+ scale.scale.domain(tick);
152
+ }
153
+
154
+ attributeScale.values ? scale.scale.range(attributeScale.values) : scale.scale.range(scale.option.domain);
155
+ break;
156
+
157
+ case _l7Core.ScaleTypes.QUANTILE:
158
+ case _l7Core.ScaleTypes.QUANTIZE:
159
+ case _l7Core.ScaleTypes.THRESHOLD:
160
+ scale.scale.range(attributeScale.values);
161
+ break;
162
+
163
+ case _l7Core.ScaleTypes.CAT:
164
+ attributeScale.values ? scale.scale.range(attributeScale.values) : scale.scale.range(scale.option.domain);
165
+ break;
166
+
167
+ case _l7Core.ScaleTypes.DIVERGING:
168
+ case _l7Core.ScaleTypes.SEQUENTIAL:
169
+ scale.scale.interpolator(d3interpolate.interpolateRgbBasis(attributeScale.values));
170
+ break;
151
171
  }
152
172
  }
173
+
174
+ if (attributeScale.values === 'text') {
175
+ var _scale$option2;
176
+
177
+ scale.scale.range((_scale$option2 = scale.option) === null || _scale$option2 === void 0 ? void 0 : _scale$option2.domain);
178
+ }
153
179
  });
154
180
  } else {
155
181
  attributeScale.type = _l7Core.StyleScaleType.CONSTANT;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/plugins/FeatureScalePlugin.ts"],"names":["dateRegex","scaleMap","ScaleTypes","LINEAR","d3","scaleLinear","POWER","scalePow","LOG","scaleLog","IDENTITY","scaleIdentity","SEQUENTIAL","scaleSequential","TIME","scaleTime","QUANTILE","scaleQuantile","QUANTIZE","scaleQuantize","THRESHOLD","scaleThreshold","CAT","scaleOrdinal","DIVERGING","scaleDiverging","FeatureScalePlugin","TYPES","IGlobalConfigService","layer","styleAttributeService","hooks","init","tap","scaleOptions","getScaleOptions","attributes","getLayerStyleAttributes","dataArray","getSource","data","length","caculateScalesForAttributes","beforeRenderData","layerModelNeedUpdate","beforeRender","attributesToRescale","filter","attribute","needRescale","n","isNaN","parseFloat","isFinite","scaleCache","forEach","scale","attributeScale","type","name","names","parseFields","field","scales","push","createScale","values","some","StyleScaleType","VARIABLE","callback","option","range","domain","interpolator","d3interpolate","interpolateRgbBasis","CONSTANT","defaultValues","map","index","scalers","func","Array","isArray","split","scaleOption","styleScale","undefined","createDefaultScale","firstValue","find","d","isNumber","getDefaultType","cfg","createScaleConfig","test","item","minMax","neutral","unknown","clamp","nice"],"mappings":"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","sourcesContent":["import {\n IGlobalConfigService,\n ILayer,\n ILayerPlugin,\n IScale,\n IScaleOptions,\n IStyleAttribute,\n IStyleAttributeService,\n IStyleScale,\n ScaleTypeName,\n ScaleTypes,\n StyleScaleType,\n TYPES,\n} from '@antv/l7-core';\nimport { IParseDataItem } from '@antv/l7-source';\nimport { extent, ticks } from 'd3-array';\nimport * as d3interpolate from 'd3-interpolate';\nimport * as d3 from 'd3-scale';\nimport { inject, injectable } from 'inversify';\nimport { isNil, isString, uniq } from 'lodash';\nimport 'reflect-metadata';\n\nconst dateRegex = /^(?:(?!0000)[0-9]{4}([-/.]+)(?:(?:0?[1-9]|1[0-2])\\1(?:0?[1-9]|1[0-9]|2[0-8])|(?:0?[13-9]|1[0-2])\\1(?:29|30)|(?:0?[13578]|1[02])\\1(?:31))|(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:0[48]|[2468][048]|[13579][26])00)([-/.]?)0?2\\2(?:29))(\\s+([01]|([01][0-9]|2[0-3])):([0-9]|[0-5][0-9]):([0-9]|[0-5][0-9]))?$/;\n\nconst scaleMap = {\n [ScaleTypes.LINEAR]: d3.scaleLinear,\n [ScaleTypes.POWER]: d3.scalePow,\n [ScaleTypes.LOG]: d3.scaleLog,\n [ScaleTypes.IDENTITY]: d3.scaleIdentity,\n [ScaleTypes.SEQUENTIAL]: d3.scaleSequential,\n [ScaleTypes.TIME]: d3.scaleTime,\n [ScaleTypes.QUANTILE]: d3.scaleQuantile,\n [ScaleTypes.QUANTIZE]: d3.scaleQuantize,\n [ScaleTypes.THRESHOLD]: d3.scaleThreshold,\n [ScaleTypes.CAT]: d3.scaleOrdinal,\n [ScaleTypes.DIVERGING]: d3.scaleDiverging,\n};\n\n/**\n * 根据 Source 原始数据为指定字段创建 Scale,保存在 StyleAttribute 上,供下游插件使用\n */\n@injectable()\nexport default class FeatureScalePlugin implements ILayerPlugin {\n @inject(TYPES.IGlobalConfigService)\n private readonly configService: IGlobalConfigService;\n // key = field_attribute name\n private scaleCache: {\n [field: string]: IStyleScale;\n } = {};\n\n private scaleOptions: IScaleOptions = {};\n\n public apply(\n layer: ILayer,\n {\n styleAttributeService,\n }: { styleAttributeService: IStyleAttributeService },\n ) {\n layer.hooks.init.tap('FeatureScalePlugin', () => {\n this.scaleOptions = layer.getScaleOptions();\n const attributes = styleAttributeService.getLayerStyleAttributes();\n const { dataArray } = layer.getSource().data;\n if (dataArray.length === 0) {\n return;\n }\n this.caculateScalesForAttributes(attributes || [], dataArray);\n });\n\n // 检测数据是否需要更新\n layer.hooks.beforeRenderData.tap('FeatureScalePlugin', () => {\n this.scaleOptions = layer.getScaleOptions();\n const attributes = styleAttributeService.getLayerStyleAttributes();\n const { dataArray } = layer.getSource().data;\n this.caculateScalesForAttributes(attributes || [], dataArray);\n layer.layerModelNeedUpdate = true;\n return true;\n });\n\n layer.hooks.beforeRender.tap('FeatureScalePlugin', () => {\n if (layer.layerModelNeedUpdate) {\n return;\n }\n this.scaleOptions = layer.getScaleOptions();\n const attributes = styleAttributeService.getLayerStyleAttributes();\n if (attributes) {\n const { dataArray } = layer.getSource().data;\n if (dataArray.length === 0) {\n return;\n }\n const attributesToRescale = attributes.filter(\n (attribute) => attribute.needRescale,\n );\n if (attributesToRescale.length) {\n this.caculateScalesForAttributes(attributesToRescale, dataArray);\n }\n }\n });\n }\n private isNumber(n: any) {\n return !isNaN(parseFloat(n)) && isFinite(n);\n }\n\n private caculateScalesForAttributes(\n attributes: IStyleAttribute[],\n dataArray: IParseDataItem[],\n ) {\n this.scaleCache = {};\n attributes.forEach((attribute) => {\n if (attribute.scale) {\n // 创建Scale\n const attributeScale = attribute.scale;\n const type = attribute.name;\n attributeScale.names = this.parseFields(attribute!.scale!.field || []);\n const scales: IStyleScale[] = [];\n // 为每个字段创建 Scale\n attributeScale.names.forEach((field: string | number) => {\n scales.push(\n this.createScale(\n field,\n attribute.name,\n attribute.scale?.values,\n dataArray,\n ),\n );\n });\n\n // 为scales 设置值区间 Range\n if (scales.some((scale) => scale.type === StyleScaleType.VARIABLE)) {\n attributeScale.type = StyleScaleType.VARIABLE;\n scales.forEach((scale) => {\n // 如果设置了回调, 这不需要设置range\n if (!attributeScale.callback) {\n if (\n attributeScale.values &&\n attributeScale.values !== 'text' &&\n scale.option?.type !== ScaleTypes.DIVERGING &&\n scale.option?.type !== ScaleTypes.SEQUENTIAL\n ) {\n scale.scale.range(attributeScale.values); // 判断常量, 默认值\n } else if (scale.option?.type === ScaleTypes.CAT) {\n // 如果没有设置初值且 类型为cat,range ==domain;\n scale.scale.range(scale.option.domain);\n } else if (\n scale.option?.type === ScaleTypes.DIVERGING ||\n scale.option?.type === ScaleTypes.SEQUENTIAL\n ) {\n scale.scale.interpolator(\n // @ts-ignore\n d3interpolate.interpolateRgbBasis(attributeScale.values),\n );\n }\n }\n });\n } else {\n // 设置attribute 常量值 常量直接在value取值\n attributeScale.type = StyleScaleType.CONSTANT;\n attributeScale.defaultValues = scales.map((scale, index) => {\n return scale.scale(attributeScale.names[index]);\n });\n }\n attributeScale.scalers = scales.map((scale: IStyleScale) => {\n return {\n field: scale.field,\n func: scale.scale,\n option: scale.option,\n };\n });\n\n attribute.needRescale = false;\n }\n });\n }\n\n /**\n * @example\n * 'w*h' => ['w', 'h']\n * 'w' => ['w']\n */\n private parseFields(\n field: string[] | string | number[] | number,\n ): string[] | number[] {\n if (Array.isArray(field)) {\n return field;\n }\n if (isString(field)) {\n return field.split('*');\n }\n return [field];\n }\n\n private createScale(\n field: string | number,\n name: string,\n values: unknown[] | string | undefined,\n data?: IParseDataItem[],\n ): IStyleScale {\n // scale 支持根据视觉通道和字段\n const scaleOption: IScale | undefined =\n this.scaleOptions[name] && this.scaleOptions[name]?.field === field\n ? this.scaleOptions[name] // TODO zi\n : this.scaleOptions[field];\n const styleScale: IStyleScale = {\n field,\n scale: undefined,\n type: StyleScaleType.VARIABLE,\n option: scaleOption,\n };\n\n if (!data || !data.length) {\n if (scaleOption && scaleOption.type) {\n styleScale.scale = this.createDefaultScale(scaleOption);\n } else {\n styleScale.scale = d3.scaleOrdinal([field]);\n styleScale.type = StyleScaleType.CONSTANT;\n }\n return styleScale;\n }\n const firstValue = data!.find((d) => !isNil(d[field]))?.[field];\n // 常量 Scale\n if (this.isNumber(field) || (isNil(firstValue) && !scaleOption)) {\n styleScale.scale = d3.scaleOrdinal([field]);\n styleScale.type = StyleScaleType.CONSTANT;\n } else {\n // 根据数据类型判断 默认等分位,时间,和枚举类型\n let type =\n (scaleOption && scaleOption.type) || this.getDefaultType(firstValue);\n if (values === 'text') {\n // text 为内置变 如果是文本则为cat\n type = ScaleTypes.CAT;\n }\n const cfg = this.createScaleConfig(type, field, scaleOption, data);\n\n styleScale.scale = this.createDefaultScale(cfg);\n styleScale.option = cfg;\n }\n return styleScale;\n }\n\n private getDefaultType(firstValue: unknown) {\n let type = ScaleTypes.LINEAR;\n if (typeof firstValue === 'string') {\n type = dateRegex.test(firstValue) ? ScaleTypes.TIME : ScaleTypes.CAT;\n }\n return type;\n }\n // 生成Scale 默认配置\n private createScaleConfig(\n type: ScaleTypeName,\n field: string | number,\n scaleOption: IScale | undefined,\n data?: IParseDataItem[],\n ) {\n const cfg: IScale = {\n type,\n };\n const values = data?.map((item) => item[field]) || [];\n if (scaleOption?.domain) {\n cfg.domain = scaleOption?.domain;\n }\n // 默认类型为 Quantile Scales https://github.com/d3/d3-scale#quantile-scales\n else if (\n type !== ScaleTypes.CAT &&\n type !== ScaleTypes.QUANTILE &&\n type !== ScaleTypes.DIVERGING\n ) {\n // linear/\n cfg.domain = extent(values);\n } else if (type === ScaleTypes.CAT) {\n cfg.domain = uniq(values);\n } else if (type === ScaleTypes.QUANTILE) {\n cfg.domain = values;\n } else if (type === ScaleTypes.DIVERGING) {\n const minMax = extent(values);\n const neutral =\n scaleOption?.neutral !== undefined\n ? scaleOption?.neutral\n : (minMax[0] + minMax[1]) / 2;\n cfg.domain = [minMax[0], neutral, minMax[1]];\n }\n return { ...cfg, ...scaleOption };\n }\n\n // 创建Scale 实例\n private createDefaultScale({ type, domain, unknown, clamp, nice }: IScale) {\n // @ts-ignore\n const scale = scaleMap[type]();\n if (domain && scale.domain) {\n scale.domain(domain);\n }\n if (unknown) {\n scale.unknown(unknown);\n }\n if (clamp !== undefined && scale.clamp) {\n scale.clamp(clamp);\n }\n if (nice !== undefined && scale.nice) {\n scale.nice(nice);\n }\n // TODO 其他属性支持\n return scale;\n }\n}\n"],"file":"FeatureScalePlugin.js"}
1
+ {"version":3,"sources":["../../src/plugins/FeatureScalePlugin.ts"],"names":["dateRegex","scaleMap","ScaleTypes","LINEAR","d3","scaleLinear","POWER","scalePow","LOG","scaleLog","IDENTITY","scaleIdentity","SEQUENTIAL","scaleSequential","TIME","scaleTime","QUANTILE","scaleQuantile","QUANTIZE","scaleQuantize","THRESHOLD","scaleThreshold","CAT","scaleOrdinal","DIVERGING","scaleDiverging","FeatureScalePlugin","TYPES","IGlobalConfigService","layer","styleAttributeService","hooks","init","tap","scaleOptions","getScaleOptions","attributes","getLayerStyleAttributes","dataArray","getSource","data","length","caculateScalesForAttributes","beforeRenderData","layerModelNeedUpdate","beforeRender","attributesToRescale","filter","attribute","needRescale","n","isNaN","parseFloat","isFinite","scaleCache","forEach","scale","attributeScale","type","name","names","parseFields","field","scales","push","createScale","values","some","StyleScaleType","VARIABLE","callback","option","tick","ticks","domain","range","interpolator","d3interpolate","interpolateRgbBasis","CONSTANT","defaultValues","map","index","scalers","func","Array","isArray","split","scaleOption","styleScale","undefined","createDefaultScale","firstValue","find","d","isNumber","getDefaultType","cfg","createScaleConfig","test","item","minMax","neutral","unknown","clamp","nice"],"mappings":"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","sourcesContent":["import {\n IGlobalConfigService,\n ILayer,\n ILayerPlugin,\n IScale,\n IScaleOptions,\n IStyleAttribute,\n IStyleAttributeService,\n IStyleScale,\n ScaleTypeName,\n ScaleTypes,\n StyleScaleType,\n TYPES,\n} from '@antv/l7-core';\nimport { IParseDataItem } from '@antv/l7-source';\nimport { extent, ticks } from 'd3-array';\nimport * as d3interpolate from 'd3-interpolate';\nimport * as d3 from 'd3-scale';\nimport { inject, injectable } from 'inversify';\nimport { isNil, isString, uniq } from 'lodash';\nimport 'reflect-metadata';\n\nconst dateRegex = /^(?:(?!0000)[0-9]{4}([-/.]+)(?:(?:0?[1-9]|1[0-2])\\1(?:0?[1-9]|1[0-9]|2[0-8])|(?:0?[13-9]|1[0-2])\\1(?:29|30)|(?:0?[13578]|1[02])\\1(?:31))|(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:0[48]|[2468][048]|[13579][26])00)([-/.]?)0?2\\2(?:29))(\\s+([01]|([01][0-9]|2[0-3])):([0-9]|[0-5][0-9]):([0-9]|[0-5][0-9]))?$/;\n\nconst scaleMap = {\n [ScaleTypes.LINEAR]: d3.scaleLinear,\n [ScaleTypes.POWER]: d3.scalePow,\n [ScaleTypes.LOG]: d3.scaleLog,\n [ScaleTypes.IDENTITY]: d3.scaleIdentity,\n [ScaleTypes.SEQUENTIAL]: d3.scaleSequential,\n [ScaleTypes.TIME]: d3.scaleTime,\n [ScaleTypes.QUANTILE]: d3.scaleQuantile,\n [ScaleTypes.QUANTIZE]: d3.scaleQuantize,\n [ScaleTypes.THRESHOLD]: d3.scaleThreshold,\n [ScaleTypes.CAT]: d3.scaleOrdinal,\n [ScaleTypes.DIVERGING]: d3.scaleDiverging,\n};\n\n/**\n * 根据 Source 原始数据为指定字段创建 Scale,保存在 StyleAttribute 上,供下游插件使用\n */\n@injectable()\nexport default class FeatureScalePlugin implements ILayerPlugin {\n @inject(TYPES.IGlobalConfigService)\n private readonly configService: IGlobalConfigService;\n // key = field_attribute name\n private scaleCache: {\n [field: string]: IStyleScale;\n } = {};\n\n private scaleOptions: IScaleOptions = {};\n\n public apply(\n layer: ILayer,\n {\n styleAttributeService,\n }: { styleAttributeService: IStyleAttributeService },\n ) {\n layer.hooks.init.tap('FeatureScalePlugin', () => {\n this.scaleOptions = layer.getScaleOptions();\n const attributes = styleAttributeService.getLayerStyleAttributes();\n const { dataArray } = layer.getSource().data;\n if (dataArray.length === 0) {\n return;\n }\n this.caculateScalesForAttributes(attributes || [], dataArray);\n });\n\n // 检测数据是否需要更新\n layer.hooks.beforeRenderData.tap('FeatureScalePlugin', () => {\n this.scaleOptions = layer.getScaleOptions();\n const attributes = styleAttributeService.getLayerStyleAttributes();\n const { dataArray } = layer.getSource().data;\n this.caculateScalesForAttributes(attributes || [], dataArray);\n layer.layerModelNeedUpdate = true;\n return true;\n });\n\n layer.hooks.beforeRender.tap('FeatureScalePlugin', () => {\n if (layer.layerModelNeedUpdate) {\n return;\n }\n this.scaleOptions = layer.getScaleOptions();\n const attributes = styleAttributeService.getLayerStyleAttributes();\n if (attributes) {\n const { dataArray } = layer.getSource().data;\n if (dataArray.length === 0) {\n return;\n }\n const attributesToRescale = attributes.filter(\n (attribute) => attribute.needRescale,\n );\n if (attributesToRescale.length) {\n this.caculateScalesForAttributes(attributesToRescale, dataArray);\n }\n }\n });\n }\n private isNumber(n: any) {\n return !isNaN(parseFloat(n)) && isFinite(n);\n }\n\n private caculateScalesForAttributes(\n attributes: IStyleAttribute[],\n dataArray: IParseDataItem[],\n ) {\n this.scaleCache = {};\n attributes.forEach((attribute) => {\n if (attribute.scale) {\n // 创建Scale\n const attributeScale = attribute.scale;\n const type = attribute.name;\n attributeScale.names = this.parseFields(attribute!.scale!.field || []);\n const scales: IStyleScale[] = [];\n // 为每个字段创建 Scale\n attributeScale.names.forEach((field: string | number) => {\n scales.push(\n this.createScale(\n field,\n attribute.name,\n attribute.scale?.values,\n dataArray,\n ),\n );\n });\n\n // 为scales 设置值区间 Range\n if (scales.some((scale) => scale.type === StyleScaleType.VARIABLE)) {\n attributeScale.type = StyleScaleType.VARIABLE;\n scales.forEach((scale) => {\n // 如果设置了回调, 这不需要设置range\n if (!attributeScale.callback && attributeScale.values !== 'text') {\n switch (scale.option?.type) {\n case ScaleTypes.LOG:\n case ScaleTypes.LINEAR:\n case ScaleTypes.POWER:\n if (\n attributeScale.values &&\n attributeScale.values.length > 2\n ) {\n const tick = scale.scale.ticks(\n attributeScale.values.length,\n );\n scale.scale.domain(tick);\n }\n attributeScale.values\n ? scale.scale.range(attributeScale.values)\n : scale.scale.range(scale.option.domain);\n break;\n case ScaleTypes.QUANTILE:\n case ScaleTypes.QUANTIZE:\n case ScaleTypes.THRESHOLD:\n scale.scale.range(attributeScale.values); //\n break;\n case ScaleTypes.CAT:\n attributeScale.values\n ? scale.scale.range(attributeScale.values)\n : scale.scale.range(scale.option.domain);\n break;\n case ScaleTypes.DIVERGING:\n case ScaleTypes.SEQUENTIAL:\n scale.scale.interpolator(\n // @ts-ignore\n d3interpolate.interpolateRgbBasis(attributeScale.values),\n );\n break;\n }\n }\n if (attributeScale.values === 'text') {\n scale.scale.range(scale.option?.domain);\n }\n });\n } else {\n // 设置attribute 常量值 常量直接在value取值\n attributeScale.type = StyleScaleType.CONSTANT;\n attributeScale.defaultValues = scales.map((scale, index) => {\n return scale.scale(attributeScale.names[index]);\n });\n }\n attributeScale.scalers = scales.map((scale: IStyleScale) => {\n return {\n field: scale.field,\n func: scale.scale,\n option: scale.option,\n };\n });\n\n attribute.needRescale = false;\n }\n });\n }\n\n /**\n * @example\n * 'w*h' => ['w', 'h']\n * 'w' => ['w']\n */\n private parseFields(\n field: string[] | string | number[] | number,\n ): string[] | number[] {\n if (Array.isArray(field)) {\n return field;\n }\n if (isString(field)) {\n return field.split('*');\n }\n return [field];\n }\n\n private createScale(\n field: string | number,\n name: string,\n values: unknown[] | string | undefined,\n data?: IParseDataItem[],\n ): IStyleScale {\n // scale 支持根据视觉通道和字段\n const scaleOption: IScale | undefined =\n this.scaleOptions[name] && this.scaleOptions[name]?.field === field\n ? this.scaleOptions[name] // TODO zi\n : this.scaleOptions[field];\n const styleScale: IStyleScale = {\n field,\n scale: undefined,\n type: StyleScaleType.VARIABLE,\n option: scaleOption,\n };\n\n if (!data || !data.length) {\n if (scaleOption && scaleOption.type) {\n styleScale.scale = this.createDefaultScale(scaleOption);\n } else {\n styleScale.scale = d3.scaleOrdinal([field]);\n styleScale.type = StyleScaleType.CONSTANT;\n }\n return styleScale;\n }\n const firstValue = data!.find((d) => !isNil(d[field]))?.[field];\n // 常量 Scale\n if (this.isNumber(field) || (isNil(firstValue) && !scaleOption)) {\n styleScale.scale = d3.scaleOrdinal([field]);\n styleScale.type = StyleScaleType.CONSTANT;\n } else {\n // 根据数据类型判断 默认等分位,时间,和枚举类型\n let type =\n (scaleOption && scaleOption.type) || this.getDefaultType(firstValue);\n if (values === 'text') {\n // text 为内置变 如果是文本则为cat\n type = ScaleTypes.CAT;\n }\n const cfg = this.createScaleConfig(type, field, scaleOption, data);\n\n styleScale.scale = this.createDefaultScale(cfg);\n styleScale.option = cfg;\n }\n return styleScale;\n }\n\n private getDefaultType(firstValue: unknown) {\n let type = ScaleTypes.LINEAR;\n if (typeof firstValue === 'string') {\n type = dateRegex.test(firstValue) ? ScaleTypes.TIME : ScaleTypes.CAT;\n }\n return type;\n }\n // 生成Scale 默认配置\n private createScaleConfig(\n type: ScaleTypeName,\n field: string | number,\n scaleOption: IScale | undefined,\n data?: IParseDataItem[],\n ) {\n const cfg: IScale = {\n type,\n };\n const values = data?.map((item) => item[field]) || [];\n if (scaleOption?.domain) {\n cfg.domain = scaleOption?.domain;\n }\n // 默认类型为 Quantile Scales https://github.com/d3/d3-scale#quantile-scales\n else if (\n type !== ScaleTypes.CAT &&\n type !== ScaleTypes.QUANTILE &&\n type !== ScaleTypes.DIVERGING\n ) {\n // linear/\n cfg.domain = extent(values);\n } else if (type === ScaleTypes.CAT) {\n cfg.domain = uniq(values);\n } else if (type === ScaleTypes.QUANTILE) {\n cfg.domain = values;\n } else if (type === ScaleTypes.DIVERGING) {\n const minMax = extent(values);\n const neutral =\n scaleOption?.neutral !== undefined\n ? scaleOption?.neutral\n : (minMax[0] + minMax[1]) / 2;\n cfg.domain = [minMax[0], neutral, minMax[1]];\n }\n return { ...cfg, ...scaleOption };\n }\n\n // 创建Scale 实例\n private createDefaultScale({ type, domain, unknown, clamp, nice }: IScale) {\n // @ts-ignore\n const scale = scaleMap[type]();\n if (domain && scale.domain) {\n scale.domain(domain);\n }\n if (unknown) {\n scale.unknown(unknown);\n }\n if (clamp !== undefined && scale.clamp) {\n scale.clamp(clamp);\n }\n if (nice !== undefined && scale.nice) {\n scale.nice(nice);\n }\n // TODO 其他属性支持\n return scale;\n }\n}\n"],"file":"FeatureScalePlugin.js"}
@@ -45,7 +45,7 @@ function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Re
45
45
 
46
46
  var waveFillFrag = "\nuniform float u_additive;\n\nvarying mat4 styleMappingMat; // \u4F20\u9012\u4ECE\u7247\u5143\u4E2D\u4F20\u9012\u7684\u6620\u5C04\u6570\u636E\n\nvarying vec4 v_data;\nvarying vec4 v_color;\nvarying float v_radius;\nuniform float u_time;\nuniform vec4 u_aimate: [ 0, 2., 1.0, 0.2 ];\n\n#pragma include \"sdf_2d\"\n#pragma include \"picking\"\n\nvoid main() {\n\n vec4 textrueStroke = vec4(\n styleMappingMat[1][0],\n styleMappingMat[1][1],\n styleMappingMat[1][2],\n styleMappingMat[1][3]\n );\n\n float opacity = styleMappingMat[0][0];\n\n lowp float antialiasblur = v_data.z;\n float r = v_radius / (v_radius);\n\n float outer_df;\n float inner_df;\n // 'circle', 'triangle', 'square', 'pentagon', 'hexagon', 'octogon', 'hexagram', 'rhombus', 'vesica'\n \n outer_df = sdCircle(v_data.xy, 1.0);\n inner_df = sdCircle(v_data.xy, r);\n\n\n float opacity_t = smoothstep(0.0, antialiasblur, outer_df);\n\n float color_t = smoothstep(\n antialiasblur,\n 0.0,\n inner_df\n );\n float PI = 3.14159;\n float N_RINGS = 3.0;\n float FREQ = 1.0;\n\n gl_FragColor = vec4(v_color.rgb, v_color.a * opacity);\n\n float d = length(v_data.xy);\n if(d > 0.5) {\n discard;\n }\n float intensity = clamp(cos(d * PI), 0.0, 1.0) * clamp(cos(2.0 * PI * (d * 2.0 * u_aimate.z - u_aimate.y * u_time)), 0.0, 1.0);\n \n // TODO: \u6839\u636E\u53E0\u52A0\u6A21\u5F0F\u9009\u62E9\u6548\u679C\n if(u_additive > 0.0) {\n gl_FragColor *= intensity;\n // TODO: \u4F18\u5316\u6C34\u6CE2\u70B9 blend additive \u6A21\u5F0F\u4E0B\u6709\u7684\u62FE\u53D6\u6548\u679C \n gl_FragColor = filterColorAlpha(gl_FragColor, gl_FragColor.a);\n } else {\n gl_FragColor = vec4(gl_FragColor.xyz, gl_FragColor.a * intensity);\n gl_FragColor = filterColor(gl_FragColor);\n }\n}\n";
47
47
  var pointFillFrag = "\nuniform float u_globel;\nuniform float u_additive;\n\nvarying mat4 styleMappingMat; // \u4F20\u9012\u4ECE\u7247\u5143\u4E2D\u4F20\u9012\u7684\u6620\u5C04\u6570\u636E\n\nvarying vec4 v_data;\nvarying vec4 v_color;\nvarying float v_radius;\n\n#pragma include \"sdf_2d\"\n#pragma include \"picking\"\n\n\nvoid main() {\n int shape = int(floor(v_data.w + 0.5));\n\n vec4 textrueStroke = vec4(\n styleMappingMat[1][0],\n styleMappingMat[1][1],\n styleMappingMat[1][2],\n styleMappingMat[1][3]\n );\n\n float opacity = styleMappingMat[0][0];\n float stroke_opacity = styleMappingMat[0][1];\n float strokeWidth = styleMappingMat[0][2];\n vec4 strokeColor = textrueStroke == vec4(0) ? v_color : textrueStroke;\n\n lowp float antialiasblur = v_data.z;\n float r = v_radius / (v_radius + strokeWidth);\n\n float outer_df;\n float inner_df;\n // 'circle', 'triangle', 'square', 'pentagon', 'hexagon', 'octogon', 'hexagram', 'rhombus', 'vesica'\n if (shape == 0) {\n outer_df = sdCircle(v_data.xy, 1.0);\n inner_df = sdCircle(v_data.xy, r);\n } else if (shape == 1) {\n outer_df = sdEquilateralTriangle(1.1 * v_data.xy);\n inner_df = sdEquilateralTriangle(1.1 / r * v_data.xy);\n } else if (shape == 2) {\n outer_df = sdBox(v_data.xy, vec2(1.));\n inner_df = sdBox(v_data.xy, vec2(r));\n } else if (shape == 3) {\n outer_df = sdPentagon(v_data.xy, 0.8);\n inner_df = sdPentagon(v_data.xy, r * 0.8);\n } else if (shape == 4) {\n outer_df = sdHexagon(v_data.xy, 0.8);\n inner_df = sdHexagon(v_data.xy, r * 0.8);\n } else if (shape == 5) {\n outer_df = sdOctogon(v_data.xy, 1.0);\n inner_df = sdOctogon(v_data.xy, r);\n } else if (shape == 6) {\n outer_df = sdHexagram(v_data.xy, 0.52);\n inner_df = sdHexagram(v_data.xy, r * 0.52);\n } else if (shape == 7) {\n outer_df = sdRhombus(v_data.xy, vec2(1.0));\n inner_df = sdRhombus(v_data.xy, vec2(r));\n } else if (shape == 8) {\n outer_df = sdVesica(v_data.xy, 1.1, 0.8);\n inner_df = sdVesica(v_data.xy, r * 1.1, r * 0.8);\n }\n\n if(u_globel > 0.0) {\n // TODO: \u5730\u7403\u6A21\u5F0F\u4E0B\u907F\u514D\u591A\u4F59\u7247\u5143\u7ED8\u5236\uFF0C\u540C\u65F6\u4E5F\u80FD\u907F\u514D\u6709\u7528\u7247\u5143\u5728\u900F\u660E\u4E14\u91CD\u53E0\u7684\u60C5\u51B5\u4E0B\u65E0\u6CD5\u5199\u5165\n // \u4ED8\u51FA\u7684\u4EE3\u4EF7\u662F\u8FB9\u7F18\u4F1A\u6709\u4E00\u4E9B\u952F\u9F7F\n if(outer_df > antialiasblur + 0.018) discard;\n }\n float opacity_t = smoothstep(0.0, antialiasblur, outer_df);\n\n float color_t = strokeWidth < 0.01 ? 0.0 : smoothstep(\n antialiasblur,\n 0.0,\n inner_df\n );\n\n if(strokeWidth < 0.01) {\n gl_FragColor = vec4(v_color.rgb, v_color.a * opacity);\n } else {\n gl_FragColor = mix(vec4(v_color.rgb, v_color.a * opacity), strokeColor * stroke_opacity, color_t);\n }\n\n if(u_additive > 0.0) {\n gl_FragColor *= opacity_t;\n gl_FragColor = filterColorAlpha(gl_FragColor, gl_FragColor.a);\n } else {\n gl_FragColor.a *= opacity_t;\n gl_FragColor = filterColor(gl_FragColor);\n }\n}\n";
48
- var pointFillVert = "attribute vec4 a_Color;\nattribute vec3 a_Position;\nattribute vec3 a_Extrude;\nattribute float a_Size;\nattribute float a_Shape;\n\nvarying mat4 styleMappingMat; // \u7528\u4E8E\u5C06\u5728\u9876\u70B9\u7740\u8272\u5668\u4E2D\u8BA1\u7B97\u597D\u7684\u6837\u5F0F\u503C\u4F20\u9012\u7ED9\u7247\u5143\n\nuniform float u_globel;\nuniform mat4 u_ModelMatrix;\nuniform mat4 u_Mvp;\nuniform float u_isMeter;\n\nvarying vec4 v_data;\nvarying vec4 v_color;\nvarying float v_radius;\n\nuniform float u_opacity : 1;\nuniform float u_stroke_opacity : 1;\nuniform float u_stroke_width : 2;\nuniform vec4 u_stroke_color : [0.0, 0.0, 0.0, 0.0];\nuniform vec2 u_offsets;\n\nuniform float u_blur : 0.0;\nuniform float u_raisingHeight: 0.0;\n\n#pragma include \"styleMapping\"\n#pragma include \"styleMappingCalOpacity\"\n#pragma include \"styleMappingCalStrokeOpacity\"\n#pragma include \"styleMappingCalStrokeWidth\"\n\n#pragma include \"projection\"\n#pragma include \"picking\"\n\n\nvoid main() {\n vec3 extrude = a_Extrude;\n float shape_type = a_Shape;\n float newSize = setPickingSize(a_Size);\n\n // cal style mapping - \u6570\u636E\u7EB9\u7406\u6620\u5C04\u90E8\u5206\u7684\u8BA1\u7B97\n styleMappingMat = mat4(\n 0.0, 0.0, 0.0, 0.0, // opacity - strokeOpacity - strokeWidth - empty\n 0.0, 0.0, 0.0, 0.0, // strokeR - strokeG - strokeB - strokeA\n 0.0, 0.0, 0.0, 0.0, // offsets[0] - offsets[1]\n 0.0, 0.0, 0.0, 0.0\n );\n\n float rowCount = u_cellTypeLayout[0][0]; // \u5F53\u524D\u7684\u6570\u636E\u7EB9\u7406\u6709\u51E0\u884C\n float columnCount = u_cellTypeLayout[0][1]; // \u5F53\u770B\u5230\u6570\u636E\u7EB9\u7406\u6709\u51E0\u5217\n float columnWidth = 1.0/columnCount; // \u5217\u5BBD\n float rowHeight = 1.0/rowCount; // \u884C\u9AD8\n float cellCount = calCellCount(); // opacity - strokeOpacity - strokeWidth - stroke - offsets\n float id = a_vertexId; // \u7B2Cn\u4E2A\u9876\u70B9\n float cellCurrentRow = floor(id * cellCount / columnCount) + 1.0; // \u8D77\u59CB\u70B9\u5728\u7B2C\u51E0\u884C\n float cellCurrentColumn = mod(id * cellCount, columnCount) + 1.0; // \u8D77\u59CB\u70B9\u5728\u7B2C\u51E0\u5217\n \n // cell \u56FA\u5B9A\u987A\u5E8F opacity -> strokeOpacity -> strokeWidth -> stroke ... \n // \u6309\u987A\u5E8F\u4ECE cell \u4E2D\u53D6\u503C\u3001\u82E5\u6CA1\u6709\u5219\u81EA\u52A8\u5F80\u4E0B\u53D6\u503C\n float textureOffset = 0.0; // \u5728 cell \u4E2D\u53D6\u503C\u7684\u504F\u79FB\u91CF\n\n vec2 opacityAndOffset = calOpacityAndOffset(cellCurrentRow, cellCurrentColumn, columnCount, textureOffset, columnWidth, rowHeight);\n styleMappingMat[0][0] = opacityAndOffset.r;\n textureOffset = opacityAndOffset.g;\n\n vec2 strokeOpacityAndOffset = calStrokeOpacityAndOffset(cellCurrentRow, cellCurrentColumn, columnCount, textureOffset, columnWidth, rowHeight);\n styleMappingMat[0][1] = strokeOpacityAndOffset.r;\n textureOffset = strokeOpacityAndOffset.g;\n\n vec2 strokeWidthAndOffset = calStrokeWidthAndOffset(cellCurrentRow, cellCurrentColumn, columnCount, textureOffset, columnWidth, rowHeight);\n styleMappingMat[0][2] = strokeWidthAndOffset.r;\n textureOffset = strokeWidthAndOffset.g;\n\n vec4 textrueStroke = vec4(-1.0, -1.0, -1.0, -1.0);\n if(hasStroke()) {\n vec2 valueRPos = nextPos(cellCurrentRow, cellCurrentColumn, columnCount, textureOffset);\n styleMappingMat[1][0] = pos2value(valueRPos, columnWidth, rowHeight); // R\n textureOffset += 1.0;\n\n vec2 valueGPos = nextPos(cellCurrentRow, cellCurrentColumn, columnCount, textureOffset);\n styleMappingMat[1][1] = pos2value(valueGPos, columnWidth, rowHeight); // G\n textureOffset += 1.0;\n\n vec2 valueBPos = nextPos(cellCurrentRow, cellCurrentColumn, columnCount, textureOffset);\n styleMappingMat[1][2] = pos2value(valueBPos, columnWidth, rowHeight); // B\n textureOffset += 1.0;\n\n vec2 valueAPos = nextPos(cellCurrentRow, cellCurrentColumn, columnCount, textureOffset);\n styleMappingMat[1][3] = pos2value(valueAPos, columnWidth, rowHeight); // A\n textureOffset += 1.0;\n } else {\n if(u_stroke_color == vec4(0.0)) {\n styleMappingMat[1][0] = v_color.r;\n styleMappingMat[1][1] = v_color.g;\n styleMappingMat[1][2] = v_color.b;\n styleMappingMat[1][3] = v_color.a;\n } else {\n styleMappingMat[1][0] = u_stroke_color.r;\n styleMappingMat[1][1] = u_stroke_color.g;\n styleMappingMat[1][2] = u_stroke_color.b;\n styleMappingMat[1][3] = u_stroke_color.a;\n }\n }\n\n vec2 textrueOffsets = vec2(0.0, 0.0);\n if(hasOffsets()) {\n vec2 valueXPos = nextPos(cellCurrentRow, cellCurrentColumn, columnCount, textureOffset);\n textrueOffsets.r = pos2value(valueXPos, columnWidth, rowHeight); // x\n textureOffset += 1.0;\n\n vec2 valueYPos = nextPos(cellCurrentRow, cellCurrentColumn, columnCount, textureOffset);\n textrueOffsets.g = pos2value(valueYPos, columnWidth, rowHeight); // x\n textureOffset += 1.0;\n } else {\n textrueOffsets = u_offsets;\n }\n\n // cal style mapping\n\n // unpack color(vec2)\n v_color = a_Color;\n\n // radius(16-bit)\n v_radius = newSize;\n\n // TODO: billboard\n // anti-alias\n // float antialiased_blur = -max(u_blur, antialiasblur);\n float antialiasblur = -max(2.0 / u_DevicePixelRatio / a_Size, u_blur);\n\n vec2 offset = (extrude.xy * (newSize + u_stroke_width) + textrueOffsets);\n vec3 aPosition = a_Position;\n if(u_isMeter < 1.0) {\n // \u4E0D\u4EE5\u7C73\u4E3A\u5B9E\u9645\u5355\u4F4D\n offset = project_pixel(offset);\n } else {\n // \u4EE5\u7C73\u4E3A\u5B9E\u9645\u5355\u4F4D\n antialiasblur *= pow(19.0 - u_Zoom, 2.0);\n antialiasblur = max(antialiasblur, -0.01);\n // offset *= 0.5;\n\n if(u_CoordinateSystem == COORDINATE_SYSTEM_LNGLAT || u_CoordinateSystem == COORDINATE_SYSTEM_LNGLAT_OFFSET) {\n aPosition.xy += offset;\n offset.x = 0.0;\n offset.y = 0.0;\n }\n }\n\n // TODP: /abs(extrude.x) \u662F\u4E3A\u4E86\u517C\u5BB9\u5730\u7403\u6A21\u5F0F\n v_data = vec4(extrude.x/abs(extrude.x), extrude.y/abs(extrude.y), antialiasblur,shape_type);\n\n\n // vec4 project_pos = project_position(vec4(a_Position.xy, 0.0, 1.0));\n vec4 project_pos = project_position(vec4(aPosition.xy, 0.0, 1.0));\n // gl_Position = project_common_position_to_clipspace(vec4(project_pos.xy + offset, project_pixel(setPickingOrder(0.0)), 1.0));\n\n float raiseHeight = u_raisingHeight;\n if(u_CoordinateSystem == COORDINATE_SYSTEM_LNGLAT || u_CoordinateSystem == COORDINATE_SYSTEM_LNGLAT_OFFSET) {\n float mapboxZoomScale = 4.0/pow(2.0, 21.0 - u_Zoom);\n raiseHeight = u_raisingHeight * mapboxZoomScale;\n }\n\n if(u_CoordinateSystem == COORDINATE_SYSTEM_P20_2) { // gaode2.x\n gl_Position = u_Mvp * vec4(project_pos.xy + offset, raiseHeight, 1.0);\n } else {\n gl_Position = project_common_position_to_clipspace(vec4(project_pos.xy + offset, u_raisingHeight, 1.0));\n }\n\n if(u_globel > 0.0) {\n gl_Position = u_ViewProjectionMatrix * vec4(a_Position + extrude * newSize * 0.1, 1.0);\n }\n \n // gl_Position = project_common_position_to_clipspace(vec4(project_pos.xy + offset, 0.0, 1.0));\n\n setPickingColor(a_PickingColor);\n}\n";
48
+ var pointFillVert = "attribute vec4 a_Color;\nattribute vec3 a_Position;\nattribute vec3 a_Extrude;\nattribute float a_Size;\nattribute float a_Shape;\n\nvarying mat4 styleMappingMat; // \u7528\u4E8E\u5C06\u5728\u9876\u70B9\u7740\u8272\u5668\u4E2D\u8BA1\u7B97\u597D\u7684\u6837\u5F0F\u503C\u4F20\u9012\u7ED9\u7247\u5143\n\nuniform float u_globel;\nuniform mat4 u_ModelMatrix;\nuniform mat4 u_Mvp;\nuniform float u_meter2coord;\nuniform float u_meteryScale;\nuniform float u_isMeter;\n\nvarying vec4 v_data;\nvarying vec4 v_color;\nvarying float v_radius;\n\nuniform float u_opacity : 1;\nuniform float u_stroke_opacity : 1;\nuniform float u_stroke_width : 2;\nuniform vec4 u_stroke_color : [0.0, 0.0, 0.0, 0.0];\nuniform vec2 u_offsets;\n\nuniform float u_blur : 0.0;\nuniform float u_raisingHeight: 0.0;\n\n#pragma include \"styleMapping\"\n#pragma include \"styleMappingCalOpacity\"\n#pragma include \"styleMappingCalStrokeOpacity\"\n#pragma include \"styleMappingCalStrokeWidth\"\n\n#pragma include \"projection\"\n#pragma include \"picking\"\n\n\nvoid main() {\n vec3 extrude = a_Extrude;\n float shape_type = a_Shape;\n /*\n * setPickingSize \u8BBE\u7F6E\u62FE\u53D6\u5927\u5C0F\n * u_meter2coord \u5728\u7B49\u9762\u79EF\u5927\u5C0F\u7684\u65F6\u5019\u8BBE\u7F6E\u5355\u4F4D\n */\n float newSize = setPickingSize(a_Size) * u_meter2coord;\n // float newSize = setPickingSize(a_Size) * 0.00001038445708445579;\n\n // cal style mapping - \u6570\u636E\u7EB9\u7406\u6620\u5C04\u90E8\u5206\u7684\u8BA1\u7B97\n styleMappingMat = mat4(\n 0.0, 0.0, 0.0, 0.0, // opacity - strokeOpacity - strokeWidth - empty\n 0.0, 0.0, 0.0, 0.0, // strokeR - strokeG - strokeB - strokeA\n 0.0, 0.0, 0.0, 0.0, // offsets[0] - offsets[1]\n 0.0, 0.0, 0.0, 0.0\n );\n\n float rowCount = u_cellTypeLayout[0][0]; // \u5F53\u524D\u7684\u6570\u636E\u7EB9\u7406\u6709\u51E0\u884C\n float columnCount = u_cellTypeLayout[0][1]; // \u5F53\u770B\u5230\u6570\u636E\u7EB9\u7406\u6709\u51E0\u5217\n float columnWidth = 1.0/columnCount; // \u5217\u5BBD\n float rowHeight = 1.0/rowCount; // \u884C\u9AD8\n float cellCount = calCellCount(); // opacity - strokeOpacity - strokeWidth - stroke - offsets\n float id = a_vertexId; // \u7B2Cn\u4E2A\u9876\u70B9\n float cellCurrentRow = floor(id * cellCount / columnCount) + 1.0; // \u8D77\u59CB\u70B9\u5728\u7B2C\u51E0\u884C\n float cellCurrentColumn = mod(id * cellCount, columnCount) + 1.0; // \u8D77\u59CB\u70B9\u5728\u7B2C\u51E0\u5217\n \n // cell \u56FA\u5B9A\u987A\u5E8F opacity -> strokeOpacity -> strokeWidth -> stroke ... \n // \u6309\u987A\u5E8F\u4ECE cell \u4E2D\u53D6\u503C\u3001\u82E5\u6CA1\u6709\u5219\u81EA\u52A8\u5F80\u4E0B\u53D6\u503C\n float textureOffset = 0.0; // \u5728 cell \u4E2D\u53D6\u503C\u7684\u504F\u79FB\u91CF\n\n vec2 opacityAndOffset = calOpacityAndOffset(cellCurrentRow, cellCurrentColumn, columnCount, textureOffset, columnWidth, rowHeight);\n styleMappingMat[0][0] = opacityAndOffset.r;\n textureOffset = opacityAndOffset.g;\n\n vec2 strokeOpacityAndOffset = calStrokeOpacityAndOffset(cellCurrentRow, cellCurrentColumn, columnCount, textureOffset, columnWidth, rowHeight);\n styleMappingMat[0][1] = strokeOpacityAndOffset.r;\n textureOffset = strokeOpacityAndOffset.g;\n\n vec2 strokeWidthAndOffset = calStrokeWidthAndOffset(cellCurrentRow, cellCurrentColumn, columnCount, textureOffset, columnWidth, rowHeight);\n styleMappingMat[0][2] = strokeWidthAndOffset.r;\n textureOffset = strokeWidthAndOffset.g;\n\n vec4 textrueStroke = vec4(-1.0, -1.0, -1.0, -1.0);\n if(hasStroke()) {\n vec2 valueRPos = nextPos(cellCurrentRow, cellCurrentColumn, columnCount, textureOffset);\n styleMappingMat[1][0] = pos2value(valueRPos, columnWidth, rowHeight); // R\n textureOffset += 1.0;\n\n vec2 valueGPos = nextPos(cellCurrentRow, cellCurrentColumn, columnCount, textureOffset);\n styleMappingMat[1][1] = pos2value(valueGPos, columnWidth, rowHeight); // G\n textureOffset += 1.0;\n\n vec2 valueBPos = nextPos(cellCurrentRow, cellCurrentColumn, columnCount, textureOffset);\n styleMappingMat[1][2] = pos2value(valueBPos, columnWidth, rowHeight); // B\n textureOffset += 1.0;\n\n vec2 valueAPos = nextPos(cellCurrentRow, cellCurrentColumn, columnCount, textureOffset);\n styleMappingMat[1][3] = pos2value(valueAPos, columnWidth, rowHeight); // A\n textureOffset += 1.0;\n } else {\n if(u_stroke_color == vec4(0.0)) {\n styleMappingMat[1][0] = v_color.r;\n styleMappingMat[1][1] = v_color.g;\n styleMappingMat[1][2] = v_color.b;\n styleMappingMat[1][3] = v_color.a;\n } else {\n styleMappingMat[1][0] = u_stroke_color.r;\n styleMappingMat[1][1] = u_stroke_color.g;\n styleMappingMat[1][2] = u_stroke_color.b;\n styleMappingMat[1][3] = u_stroke_color.a;\n }\n }\n\n vec2 textrueOffsets = vec2(0.0, 0.0);\n if(hasOffsets()) {\n vec2 valueXPos = nextPos(cellCurrentRow, cellCurrentColumn, columnCount, textureOffset);\n textrueOffsets.r = pos2value(valueXPos, columnWidth, rowHeight); // x\n textureOffset += 1.0;\n\n vec2 valueYPos = nextPos(cellCurrentRow, cellCurrentColumn, columnCount, textureOffset);\n textrueOffsets.g = pos2value(valueYPos, columnWidth, rowHeight); // x\n textureOffset += 1.0;\n } else {\n textrueOffsets = u_offsets;\n }\n\n // cal style mapping\n\n // unpack color(vec2)\n v_color = a_Color;\n\n // radius(16-bit)\n v_radius = newSize;\n\n // TODO: billboard\n // anti-alias\n // float antialiased_blur = -max(u_blur, antialiasblur);\n float antialiasblur = -max(2.0 / u_DevicePixelRatio / newSize, u_blur);\n\n vec2 offset = (extrude.xy * (newSize + u_stroke_width) + textrueOffsets);\n vec3 aPosition = a_Position;\n if(u_isMeter < 1.0) {\n // \u4E0D\u4EE5\u7C73\u4E3A\u5B9E\u9645\u5355\u4F4D\n offset = project_pixel(offset);\n } else {\n // \u4EE5\u7C73\u4E3A\u5B9E\u9645\u5355\u4F4D\n if(newSize * pow(2.0, u_Zoom) < 48.0) {\n antialiasblur = max(antialiasblur, -0.05);\n } else if(newSize * pow(2.0, u_Zoom) < 128.0) {\n antialiasblur = max(antialiasblur, -0.6/pow(u_Zoom, 2.0));\n } else {\n antialiasblur = max(antialiasblur, -0.8/pow(u_Zoom, 2.0));\n }\n \n if(u_CoordinateSystem == COORDINATE_SYSTEM_LNGLAT || u_CoordinateSystem == COORDINATE_SYSTEM_LNGLAT_OFFSET) {\n aPosition.x += offset.x / u_meteryScale;\n aPosition.y += offset.y;\n offset = vec2(0.0);\n }\n }\n\n // TODP: /abs(extrude.x) \u662F\u4E3A\u4E86\u517C\u5BB9\u5730\u7403\u6A21\u5F0F\n v_data = vec4(extrude.x/abs(extrude.x), extrude.y/abs(extrude.y), antialiasblur,shape_type);\n\n\n // vec4 project_pos = project_position(vec4(a_Position.xy, 0.0, 1.0));\n vec4 project_pos = project_position(vec4(aPosition.xy, 0.0, 1.0));\n // gl_Position = project_common_position_to_clipspace(vec4(project_pos.xy + offset, project_pixel(setPickingOrder(0.0)), 1.0));\n\n float raiseHeight = u_raisingHeight;\n if(u_CoordinateSystem == COORDINATE_SYSTEM_LNGLAT || u_CoordinateSystem == COORDINATE_SYSTEM_LNGLAT_OFFSET) {\n float mapboxZoomScale = 4.0/pow(2.0, 21.0 - u_Zoom);\n raiseHeight = u_raisingHeight * mapboxZoomScale;\n }\n\n if(u_CoordinateSystem == COORDINATE_SYSTEM_P20_2) { // gaode2.x\n gl_Position = u_Mvp * vec4(project_pos.xy + offset, raiseHeight, 1.0);\n } else {\n gl_Position = project_common_position_to_clipspace(vec4(project_pos.xy + offset, u_raisingHeight, 1.0));\n }\n\n if(u_globel > 0.0) {\n gl_Position = u_ViewProjectionMatrix * vec4(a_Position + extrude * newSize * 0.1, 1.0);\n }\n \n // gl_Position = project_common_position_to_clipspace(vec4(project_pos.xy + offset, 0.0, 1.0));\n\n setPickingColor(a_PickingColor);\n}\n";
49
49
 
50
50
  var FillModel = function (_BaseModel) {
51
51
  (0, _inherits2.default)(FillModel, _BaseModel);
@@ -63,7 +63,9 @@ var FillModel = function (_BaseModel) {
63
63
 
64
64
  _this = _super.call.apply(_super, [this].concat(args));
65
65
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "meter2coord", 1);
66
+ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "meteryScale", 1);
66
67
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "isMeter", false);
68
+ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "unit", 'l7size');
67
69
  return _this;
68
70
  }
69
71
 
@@ -85,7 +87,11 @@ var FillModel = function (_BaseModel) {
85
87
  _ref$blur = _ref.blur,
86
88
  blur = _ref$blur === void 0 ? 0 : _ref$blur,
87
89
  _ref$raisingHeight = _ref.raisingHeight,
88
- raisingHeight = _ref$raisingHeight === void 0 ? 0 : _ref$raisingHeight;
90
+ raisingHeight = _ref$raisingHeight === void 0 ? 0 : _ref$raisingHeight,
91
+ _ref$unit = _ref.unit,
92
+ unit = _ref$unit === void 0 ? 'l7size' : _ref$unit;
93
+
94
+ this.updateUnit(unit);
89
95
 
90
96
  if (this.dataTextureTest && this.dataTextureNeedUpdate({
91
97
  opacity: opacity,
@@ -128,6 +134,8 @@ var FillModel = function (_BaseModel) {
128
134
 
129
135
  return {
130
136
  u_raisingHeight: Number(raisingHeight),
137
+ u_meter2coord: this.meter2coord,
138
+ u_meteryScale: this.meteryScale,
131
139
  u_isMeter: Number(this.isMeter),
132
140
  u_blur: blur,
133
141
  u_additive: blend === 'additive' ? 1.0 : 0.0,
@@ -163,17 +171,7 @@ var FillModel = function (_BaseModel) {
163
171
  }, {
164
172
  key: "initModels",
165
173
  value: function initModels() {
166
- var _ref3 = this.layer.getLayerConfig(),
167
- _ref3$unit = _ref3.unit,
168
- unit = _ref3$unit === void 0 ? 'l7size' : _ref3$unit;
169
-
170
- var version = this.mapService.version;
171
-
172
- if (unit === 'meter' && version !== _l7Maps.Version.L7MAP && version !== _l7Maps.Version.GLOBEL) {
173
- this.isMeter = true;
174
- this.calMeter2Coord();
175
- }
176
-
174
+ this.updateUnit('l7size');
177
175
  return this.buildModels();
178
176
  }
179
177
  }, {
@@ -187,17 +185,20 @@ var FillModel = function (_BaseModel) {
187
185
 
188
186
  var center = [(minLng + maxLng) / 2, (minLat + maxLat) / 2];
189
187
  var version = this.mapService.version;
188
+ var mapboxContext = _l7Utils.$window === null || _l7Utils.$window === void 0 ? void 0 : _l7Utils.$window.mapboxgl;
190
189
 
191
- if (version === _l7Maps.Version.MAPBOX && window.mapboxgl.MercatorCoordinate) {
192
- var coord = window.mapboxgl.MercatorCoordinate.fromLngLat({
190
+ if (version === _l7Maps.Version.MAPBOX && mapboxContext !== null && mapboxContext !== void 0 && mapboxContext.MercatorCoordinate) {
191
+ var coord = mapboxContext.MercatorCoordinate.fromLngLat({
193
192
  lng: center[0],
194
193
  lat: center[1]
195
194
  }, 0);
196
- var offsetInMeters = 1;
197
- var offsetInMercatorCoordinateUnits = offsetInMeters * coord.meterInMercatorCoordinateUnits();
198
- var westCoord = new window.mapboxgl.MercatorCoordinate(coord.x - offsetInMercatorCoordinateUnits, coord.y, coord.z);
195
+ var offsetInMercatorCoordinateUnits = coord.meterInMercatorCoordinateUnits();
196
+ var westCoord = new mapboxContext.MercatorCoordinate(coord.x - offsetInMercatorCoordinateUnits, coord.y, coord.z);
199
197
  var westLnglat = westCoord.toLngLat();
198
+ var southCoord = new mapboxContext.MercatorCoordinate(coord.x, coord.y - offsetInMercatorCoordinateUnits, coord.z);
199
+ var southLnglat = southCoord.toLngLat();
200
200
  this.meter2coord = center[0] - westLnglat.lng;
201
+ this.meteryScale = (southLnglat.lat - center[1]) / this.meter2coord;
201
202
  return;
202
203
  }
203
204
 
@@ -212,15 +213,15 @@ var FillModel = function (_BaseModel) {
212
213
  }, {
213
214
  key: "buildModels",
214
215
  value: function buildModels() {
215
- var _ref4 = this.layer.getLayerConfig(),
216
- _ref4$mask = _ref4.mask,
217
- mask = _ref4$mask === void 0 ? false : _ref4$mask,
218
- _ref4$maskInside = _ref4.maskInside,
219
- maskInside = _ref4$maskInside === void 0 ? true : _ref4$maskInside,
220
- _ref4$animateOption = _ref4.animateOption,
221
- animateOption = _ref4$animateOption === void 0 ? {
216
+ var _ref3 = this.layer.getLayerConfig(),
217
+ _ref3$mask = _ref3.mask,
218
+ mask = _ref3$mask === void 0 ? false : _ref3$mask,
219
+ _ref3$maskInside = _ref3.maskInside,
220
+ maskInside = _ref3$maskInside === void 0 ? true : _ref3$maskInside,
221
+ _ref3$animateOption = _ref3.animateOption,
222
+ animateOption = _ref3$animateOption === void 0 ? {
222
223
  enable: false
223
- } : _ref4$animateOption;
224
+ } : _ref3$animateOption;
224
225
 
225
226
  var _this$getShaders = this.getShaders(animateOption),
226
227
  frag = _this$getShaders.frag,
@@ -238,11 +239,7 @@ var FillModel = function (_BaseModel) {
238
239
  enable: isGlobel
239
240
  },
240
241
  blend: this.getBlend(),
241
- stencil: (0, _l7Utils.getMask)(mask, maskInside),
242
- cull: {
243
- enable: true,
244
- face: (0, _l7Utils.getCullFace)(this.mapService.version)
245
- }
242
+ stencil: (0, _l7Utils.getMask)(mask, maskInside)
246
243
  })];
247
244
  }
248
245
  }, {
@@ -371,7 +368,7 @@ var FillModel = function (_BaseModel) {
371
368
  update: function update(feature, featureIdx, vertex, attributeIdx) {
372
369
  var _feature$size = feature.size,
373
370
  size = _feature$size === void 0 ? 5 : _feature$size;
374
- return Array.isArray(size) ? [size[0] * _this2.meter2coord] : [size * _this2.meter2coord];
371
+ return Array.isArray(size) ? [size[0]] : [size];
375
372
  }
376
373
  }
377
374
  });
@@ -398,6 +395,23 @@ var FillModel = function (_BaseModel) {
398
395
  }
399
396
  });
400
397
  }
398
+ }, {
399
+ key: "updateUnit",
400
+ value: function updateUnit(unit) {
401
+ var version = this.mapService.version;
402
+
403
+ if (this.unit !== unit) {
404
+ if (this.unit !== 'meter' && unit === 'meter' && version !== _l7Maps.Version.L7MAP && version !== _l7Maps.Version.GLOBEL) {
405
+ this.isMeter = true;
406
+ this.calMeter2Coord();
407
+ } else if (this.unit === 'meter' && unit !== 'meter') {
408
+ this.isMeter = false;
409
+ this.meter2coord = 1;
410
+ }
411
+
412
+ this.unit = unit;
413
+ }
414
+ }
401
415
  }]);
402
416
  return FillModel;
403
417
  }(_BaseModel2.default);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/point/models/fill.ts"],"names":["FillModel","layer","getLayerConfig","opacity","strokeOpacity","strokeWidth","stroke","offsets","blend","blur","raisingHeight","dataTextureTest","dataTextureNeedUpdate","judgeStyleAttributes","encodeData","getEncodedData","calDataFrame","cellLength","cellProperties","data","width","height","rowCount","dataTexture","length","createTexture2D","flipY","format","gl","LUMINANCE","type","FLOAT","u_raisingHeight","Number","u_isMeter","isMeter","u_blur","u_additive","u_globel","mapService","version","Version","GLOBEL","u_dataTexture","u_cellTypeLayout","getCellTypeLayout","u_opacity","u_stroke_opacity","u_stroke_width","u_stroke_color","getStrokeColor","u_offsets","isOffsetStatic","animateOption","enable","u_aimate","animateOption2Array","u_time","getLayerAnimateTime","styleAttributeService","createAttributesAndIndices","PointFillTriangulation","unit","L7MAP","calMeter2Coord","buildModels","getSource","extent","minLng","minLat","maxLng","maxLat","center","MAPBOX","window","mapboxgl","MercatorCoordinate","coord","fromLngLat","lng","lat","offsetInMeters","offsetInMercatorCoordinateUnits","meterInMercatorCoordinateUnits","westCoord","x","y","z","westLnglat","toLngLat","meter2coord","m1","meterToCoord","m2","Boolean","mask","maskInside","getShaders","frag","vert","isGlobel","triangulation","GlobelPointFillTriangulation","buildLayerModel","moduleName","vertexShader","fragmentShader","depth","getBlend","stencil","cull","face","waveFillFrag","pointFillVert","pointFillFrag","destroy","option","speed","rings","registerStyleAttribute","name","AttributeType","Attribute","descriptor","buffer","usage","DYNAMIC_DRAW","size","update","feature","featureIdx","vertex","attributeIdx","extrude","n1","vec3","fromValues","n2","xzReg","angle","Math","PI","yReg","asin","m","mat4","create","rotateY","rotateX","v1","transformMat4","normalize","v2","v3","v4","extrudeIndex","Array","isArray","shape","shape2d","shapeIndex","indexOf","BaseModel"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AAWA;;AAEA;;AAEA;;AAUA;;AACA;;;;;;;;;;IACqBA,S;;;;;;;;;;;;;;;8FACU,C;0FACF,K;;;;;;WAC3B,wBAAqC;AACnC,iBASI,KAAKC,KAAL,CAAWC,cAAX,EATJ;AAAA,8BACEC,OADF;AAAA,UACEA,OADF,6BACY,CADZ;AAAA,oCAEEC,aAFF;AAAA,UAEEA,aAFF,mCAEkB,CAFlB;AAAA,kCAGEC,WAHF;AAAA,UAGEA,WAHF,iCAGgB,CAHhB;AAAA,6BAIEC,MAJF;AAAA,UAIEA,MAJF,4BAIW,eAJX;AAAA,8BAKEC,OALF;AAAA,UAKEA,OALF,6BAKY,CAAC,CAAD,EAAI,CAAJ,CALZ;AAAA,UAMEC,KANF,QAMEA,KANF;AAAA,2BAOEC,IAPF;AAAA,UAOEA,IAPF,0BAOS,CAPT;AAAA,oCAQEC,aARF;AAAA,UAQEA,aARF,mCAQkB,CARlB;;AAWA,UACE,KAAKC,eAAL,IACA,KAAKC,qBAAL,CAA2B;AACzBT,QAAAA,OAAO,EAAPA,OADyB;AAEzBC,QAAAA,aAAa,EAAbA,aAFyB;AAGzBC,QAAAA,WAAW,EAAXA,WAHyB;AAIzBC,QAAAA,MAAM,EAANA,MAJyB;AAKzBC,QAAAA,OAAO,EAAPA;AALyB,OAA3B,CAFF,EASE;AAEA,aAAKM,oBAAL,CAA0B;AACxBV,UAAAA,OAAO,EAAPA,OADwB;AAExBC,UAAAA,aAAa,EAAbA,aAFwB;AAGxBC,UAAAA,WAAW,EAAXA,WAHwB;AAIxBC,UAAAA,MAAM,EAANA,MAJwB;AAKxBC,UAAAA,OAAO,EAAPA;AALwB,SAA1B;AAQA,YAAMO,UAAU,GAAG,KAAKb,KAAL,CAAWc,cAAX,EAAnB;;AACA,iCAAgC,KAAKC,YAAL,CAC9B,KAAKC,UADyB,EAE9BH,UAF8B,EAG9B,KAAKI,cAHyB,CAAhC;AAAA,YAAQC,IAAR,sBAAQA,IAAR;AAAA,YAAcC,KAAd,sBAAcA,KAAd;AAAA,YAAqBC,MAArB,sBAAqBA,MAArB;;AAKA,aAAKC,QAAL,GAAgBD,MAAhB;AAEA,aAAKE,WAAL,GACE,KAAKN,UAAL,GAAkB,CAAlB,IAAuBE,IAAI,CAACK,MAAL,GAAc,CAArC,GACI,KAAKC,eAAL,CAAqB;AACnBC,UAAAA,KAAK,EAAE,IADY;AAEnBP,UAAAA,IAAI,EAAJA,IAFmB;AAGnBQ,UAAAA,MAAM,EAAEC,WAAGC,SAHQ;AAInBC,UAAAA,IAAI,EAAEF,WAAGG,KAJU;AAKnBX,UAAAA,KAAK,EAALA,KALmB;AAMnBC,UAAAA,MAAM,EAANA;AANmB,SAArB,CADJ,GASI,KAAKI,eAAL,CAAqB;AACnBC,UAAAA,KAAK,EAAE,IADY;AAEnBP,UAAAA,IAAI,EAAE,CAAC,CAAD,CAFa;AAGnBQ,UAAAA,MAAM,EAAEC,WAAGC,SAHQ;AAInBC,UAAAA,IAAI,EAAEF,WAAGG,KAJU;AAKnBX,UAAAA,KAAK,EAAE,CALY;AAMnBC,UAAAA,MAAM,EAAE;AANW,SAArB,CAVN;AAkBD;;AACD,aAAO;AACLW,QAAAA,eAAe,EAAEC,MAAM,CAACvB,aAAD,CADlB;AAGLwB,QAAAA,SAAS,EAAED,MAAM,CAAC,KAAKE,OAAN,CAHZ;AAILC,QAAAA,MAAM,EAAE3B,IAJH;AAML4B,QAAAA,UAAU,EAAE7B,KAAK,KAAK,UAAV,GAAuB,GAAvB,GAA6B,GANpC;AAOL8B,QAAAA,QAAQ,EAAE,KAAKC,UAAL,CAAgBC,OAAhB,KAA4BC,gBAAQC,MAApC,GAA6C,CAA7C,GAAiD,CAPtD;AAQLC,QAAAA,aAAa,EAAE,KAAKpB,WARf;AASLqB,QAAAA,gBAAgB,EAAE,KAAKC,iBAAL,EATb;AAWLC,QAAAA,SAAS,EAAE,wBAAS3C,OAAT,IAAoBA,OAApB,GAA8B,GAXpC;AAYL4C,QAAAA,gBAAgB,EAAE,wBAAS3C,aAAT,IAA0BA,aAA1B,GAA0C,GAZvD;AAaL4C,QAAAA,cAAc,EAAE,wBAAS3C,WAAT,IAAwBA,WAAxB,GAAsC,GAbjD;AAcL4C,QAAAA,cAAc,EAAE,KAAKC,cAAL,CAAoB5C,MAApB,CAdX;AAeL6C,QAAAA,SAAS,EAAE,KAAKC,cAAL,CAAoB7C,OAApB,IACNA,OADM,GAEP,CAAC,CAAD,EAAI,CAAJ;AAjBC,OAAP;AAmBD;;;WACD,8BAA2C;AACzC,kBAEI,KAAKN,KAAL,CAAWC,cAAX,EAFJ;AAAA,sCACEmD,aADF;AAAA,UACEA,aADF,oCACkB;AAAEC,QAAAA,MAAM,EAAE;AAAV,OADlB;;AAGA,aAAO;AACLC,QAAAA,QAAQ,EAAE,KAAKC,mBAAL,CAAyBH,aAAzB,CADL;AAELI,QAAAA,MAAM,EAAE,KAAKxD,KAAL,CAAWyD,mBAAX;AAFH,OAAP;AAID;;;WAED,wBAKE;AACA,aAAO,KAAKC,qBAAL,CAA2BC,0BAA3B,CACL,KAAK3D,KAAL,CAAWc,cAAX,EADK,EAEL8C,qCAFK,CAAP;AAID;;;WAED,sBAA8B;AAC5B,kBAEI,KAAK5D,KAAL,CAAWC,cAAX,EAFJ;AAAA,6BACE4D,IADF;AAAA,UACEA,IADF,2BACS,QADT;;AAGA,UAAQtB,OAAR,GAAoB,KAAKD,UAAzB,CAAQC,OAAR;;AACA,UACEsB,IAAI,KAAK,OAAT,IACAtB,OAAO,KAAKC,gBAAQsB,KADpB,IAEAvB,OAAO,KAAKC,gBAAQC,MAHtB,EAIE;AACA,aAAKP,OAAL,GAAe,IAAf;AACA,aAAK6B,cAAL;AACD;;AAED,aAAO,KAAKC,WAAL,EAAP;AACD;;;WAMD,0BAAwB;AACtB,+DAAyC,KAAKhE,KAAL,CAAWiE,SAAX,GAAuBC,MAAhE;AAAA,UAAOC,MAAP;AAAA,UAAeC,MAAf;AAAA,UAAuBC,MAAvB;AAAA,UAA+BC,MAA/B;;AACA,UAAMC,MAAM,GAAG,CAAC,CAACJ,MAAM,GAAGE,MAAV,IAAoB,CAArB,EAAwB,CAACD,MAAM,GAAGE,MAAV,IAAoB,CAA5C,CAAf;AAEA,UAAQ/B,OAAR,GAAoB,KAAKD,UAAzB,CAAQC,OAAR;;AACA,UAAIA,OAAO,KAAKC,gBAAQgC,MAApB,IAA8BC,MAAM,CAACC,QAAP,CAAgBC,kBAAlD,EAAsE;AACpE,YAAMC,KAAK,GAAGH,MAAM,CAACC,QAAP,CAAgBC,kBAAhB,CAAmCE,UAAnC,CACZ;AAAEC,UAAAA,GAAG,EAAEP,MAAM,CAAC,CAAD,CAAb;AAAkBQ,UAAAA,GAAG,EAAER,MAAM,CAAC,CAAD;AAA7B,SADY,EAEZ,CAFY,CAAd;AAIA,YAAMS,cAAc,GAAG,CAAvB;AACA,YAAMC,+BAA+B,GACnCD,cAAc,GAAGJ,KAAK,CAACM,8BAAN,EADnB;AAEA,YAAMC,SAAS,GAAG,IAAIV,MAAM,CAACC,QAAP,CAAgBC,kBAApB,CAChBC,KAAK,CAACQ,CAAN,GAAUH,+BADM,EAEhBL,KAAK,CAACS,CAFU,EAGhBT,KAAK,CAACU,CAHU,CAAlB;AAKA,YAAMC,UAAU,GAAGJ,SAAS,CAACK,QAAV,EAAnB;AAEA,aAAKC,WAAL,GAAmBlB,MAAM,CAAC,CAAD,CAAN,GAAYgB,UAAU,CAACT,GAA1C;AACA;AACD;;AAGD,UAAMY,EAAE,GAAG,KAAKpD,UAAL,CAAgBqD,YAAhB,CAA6BpB,MAA7B,EAAqC,CAACJ,MAAD,EAASC,MAAT,CAArC,CAAX;AAEA,UAAMwB,EAAE,GAAG,KAAKtD,UAAL,CAAgBqD,YAAhB,CAA6BpB,MAA7B,EAAqC,CAC9CF,MAAM,KAAKF,MAAX,GAAoBE,MAAM,GAAG,GAA7B,GAAmCA,MADW,EAE9CC,MAAM,KAAKF,MAAX,GAAoBA,MAAM,GAAG,GAA7B,GAAmCE,MAFW,CAArC,CAAX;AAIA,WAAKmB,WAAL,GAAmB,CAACC,EAAE,GAAGE,EAAN,IAAY,CAA/B;;AACA,UAAI,CAACC,OAAO,CAAC,KAAKJ,WAAN,CAAZ,EAAgC;AAE9B,aAAKA,WAAL,GAAmB,gBAAnB;AACD;AACF;;;WAED,uBAA+B;AAC7B,kBAII,KAAKzF,KAAL,CAAWC,cAAX,EAJJ;AAAA,6BACE6F,IADF;AAAA,UACEA,IADF,2BACS,KADT;AAAA,mCAEEC,UAFF;AAAA,UAEEA,UAFF,iCAEe,IAFf;AAAA,sCAGE3C,aAHF;AAAA,UAGEA,aAHF,oCAGkB;AAAEC,QAAAA,MAAM,EAAE;AAAV,OAHlB;;AAOA,6BAA6B,KAAK2C,UAAL,CAAgB5C,aAAhB,CAA7B;AAAA,UAAQ6C,IAAR,oBAAQA,IAAR;AAAA,UAAcC,IAAd,oBAAcA,IAAd;AAAA,UAAoBrE,IAApB,oBAAoBA,IAApB;;AAGA,UAAMsE,QAAQ,GAAG,KAAK7D,UAAL,CAAgBC,OAAhB,KAA4B,QAA7C;AACA,WAAKvC,KAAL,CAAWoG,aAAX,GAA2BD,QAAQ,GAC/BE,2CAD+B,GAE/BzC,qCAFJ;AAGA,aAAO,CACL,KAAK5D,KAAL,CAAWsG,eAAX,CAA2B;AACzBC,QAAAA,UAAU,EAAE,eAAe1E,IADF;AAEzB2E,QAAAA,YAAY,EAAEN,IAFW;AAGzBO,QAAAA,cAAc,EAAER,IAHS;AAIzBG,QAAAA,aAAa,EAAED,QAAQ,GACnBE,2CADmB,GAEnBzC,qCANqB;AAOzB8C,QAAAA,KAAK,EAAE;AAAErD,UAAAA,MAAM,EAAE8C;AAAV,SAPkB;AAQzB5F,QAAAA,KAAK,EAAE,KAAKoG,QAAL,EARkB;AASzBC,QAAAA,OAAO,EAAE,sBAAQd,IAAR,EAAcC,UAAd,CATgB;AAUzBc,QAAAA,IAAI,EAAE;AACJxD,UAAAA,MAAM,EAAE,IADJ;AAEJyD,UAAAA,IAAI,EAAE,0BAAY,KAAKxE,UAAL,CAAgBC,OAA5B;AAFF;AAVmB,OAA3B,CADK,CAAP;AAiBD;;;WAMD,oBACEa,aADF,EAEgD;AAC9C,UAAIA,aAAa,CAACC,MAAlB,EAA0B;AACxB,gBAAQD,aAAa,CAACvB,IAAtB;AACE,eAAK,MAAL;AACE,mBAAO;AACLoE,cAAAA,IAAI,EAAEc,YADD;AAELb,cAAAA,IAAI,EAAEc,aAFD;AAGLnF,cAAAA,IAAI,EAAE;AAHD,aAAP;;AAKF;AACE,mBAAO;AACLoE,cAAAA,IAAI,EAAEc,YADD;AAELb,cAAAA,IAAI,EAAEc,aAFD;AAGLnF,cAAAA,IAAI,EAAE;AAHD,aAAP;AARJ;AAcD,OAfD,MAeO;AACL,eAAO;AACLoE,UAAAA,IAAI,EAAEgB,aADD;AAELf,UAAAA,IAAI,EAAEc,aAFD;AAGLnF,UAAAA,IAAI,EAAE;AAHD,SAAP;AAKD;AACF;;;WAED,uBAAqB;AAAA;;AACnB,gCAAKP,WAAL,wEAAkB4F,OAAlB;AACD;;;WAGD,6BAA8BC,MAA9B,EAAyE;AACvE,aAAO,CAACA,MAAM,CAAC9D,MAAP,GAAgB,CAAhB,GAAoB,GAArB,EAA0B8D,MAAM,CAACC,KAAP,IAAgB,CAA1C,EAA6CD,MAAM,CAACE,KAAP,IAAgB,CAA7D,EAAgE,CAAhE,CAAP;AACD;;;WACD,qCAAsC;AAAA;;AAEpC,UAAMlB,QAAQ,GAAG,KAAK7D,UAAL,CAAgBC,OAAhB,KAA4B,QAA7C;AAEA,WAAKmB,qBAAL,CAA2B4D,sBAA3B,CAAkD;AAChDC,QAAAA,IAAI,EAAE,SAD0C;AAEhD1F,QAAAA,IAAI,EAAE2F,sBAAcC,SAF4B;AAGhDC,QAAAA,UAAU,EAAE;AACVH,UAAAA,IAAI,EAAE,WADI;AAEVI,UAAAA,MAAM,EAAE;AAENC,YAAAA,KAAK,EAAEjG,WAAGkG,YAFJ;AAGN3G,YAAAA,IAAI,EAAE,EAHA;AAINW,YAAAA,IAAI,EAAEF,WAAGG;AAJH,WAFE;AAQVgG,UAAAA,IAAI,EAAE,CARI;AASVC,UAAAA,MAAM,EAAE,gBACNC,OADM,EAENC,UAFM,EAGNC,MAHM,EAINC,YAJM,EAKH;AACH,gBAAIC,OAAJ;;AAEA,gBAAIjC,QAAJ,EAAc;AACZ,yDAAkB+B,MAAlB;AAAA,kBAAO9C,CAAP;AAAA,kBAAUC,CAAV;AAAA,kBAAaC,CAAb;;AACA,kBAAM+C,EAAE,GAAGC,eAAKC,UAAL,CAAgB,CAAhB,EAAmB,CAAnB,EAAsB,CAAtB,CAAX;;AACA,kBAAMC,EAAE,GAAGF,eAAKC,UAAL,CAAgBnD,CAAhB,EAAmB,CAAnB,EAAsBE,CAAtB,CAAX;;AAEA,kBAAMmD,KAAK,GACTrD,CAAC,IAAI,CAAL,GAASkD,eAAKI,KAAL,CAAWL,EAAX,EAAeG,EAAf,CAAT,GAA8BG,IAAI,CAACC,EAAL,GAAU,CAAV,GAAcN,eAAKI,KAAL,CAAWL,EAAX,EAAeG,EAAf,CAD9C;AAGA,kBAAMK,IAAI,GAAGF,IAAI,CAACC,EAAL,GAAU,CAAV,GAAcD,IAAI,CAACG,IAAL,CAAUzD,CAAC,GAAG,GAAd,CAA3B;;AAEA,kBAAM0D,CAAC,GAAGC,eAAKC,MAAL,EAAV;;AACAD,6BAAKE,OAAL,CAAaH,CAAb,EAAgBA,CAAhB,EAAmBN,KAAnB;;AACAO,6BAAKG,OAAL,CAAaJ,CAAb,EAAgBA,CAAhB,EAAmBF,IAAnB;;AAEA,kBAAMO,EAAE,GAAGd,eAAKC,UAAL,CAAgB,CAAhB,EAAmB,CAAnB,EAAsB,CAAtB,CAAX;;AACAD,6BAAKe,aAAL,CAAmBD,EAAnB,EAAuBA,EAAvB,EAA2BL,CAA3B;;AACAT,6BAAKgB,SAAL,CAAeF,EAAf,EAAmBA,EAAnB;;AAEA,kBAAMG,EAAE,GAAGjB,eAAKC,UAAL,CAAgB,CAAC,CAAjB,EAAoB,CAApB,EAAuB,CAAvB,CAAX;;AACAD,6BAAKe,aAAL,CAAmBE,EAAnB,EAAuBA,EAAvB,EAA2BR,CAA3B;;AACAT,6BAAKgB,SAAL,CAAeC,EAAf,EAAmBA,EAAnB;;AAEA,kBAAMC,EAAE,GAAGlB,eAAKC,UAAL,CAAgB,CAAC,CAAjB,EAAoB,CAAC,CAArB,EAAwB,CAAxB,CAAX;;AACAD,6BAAKe,aAAL,CAAmBG,EAAnB,EAAuBA,EAAvB,EAA2BT,CAA3B;;AACAT,6BAAKgB,SAAL,CAAeE,EAAf,EAAmBA,EAAnB;;AAEA,kBAAMC,EAAE,GAAGnB,eAAKC,UAAL,CAAgB,CAAhB,EAAmB,CAAC,CAApB,EAAuB,CAAvB,CAAX;;AACAD,6BAAKe,aAAL,CAAmBI,EAAnB,EAAuBA,EAAvB,EAA2BV,CAA3B;;AACAT,6BAAKgB,SAAL,CAAeG,EAAf,EAAmBA,EAAnB;;AAEArB,cAAAA,OAAO,8CAAOgB,EAAP,oCAAcG,EAAd,oCAAqBC,EAArB,oCAA4BC,EAA5B,EAAP;AACD,aA/BD,MA+BO;AAELrB,cAAAA,OAAO,GAAG,CAAC,CAAD,EAAI,CAAJ,EAAO,CAAP,EAAU,CAAC,CAAX,EAAc,CAAd,EAAiB,CAAjB,EAAoB,CAAC,CAArB,EAAwB,CAAC,CAAzB,EAA4B,CAA5B,EAA+B,CAA/B,EAAkC,CAAC,CAAnC,EAAsC,CAAtC,CAAV;AACD;;AAED,gBAAMsB,YAAY,GAAIvB,YAAY,GAAG,CAAhB,GAAqB,CAA1C;AACA,mBAAO,CACLC,OAAO,CAACsB,YAAD,CADF,EAELtB,OAAO,CAACsB,YAAY,GAAG,CAAhB,CAFF,EAGLtB,OAAO,CAACsB,YAAY,GAAG,CAAhB,CAHF,CAAP;AAKD;AA3DS;AAHoC,OAAlD;AAmEA,WAAKhG,qBAAL,CAA2B4D,sBAA3B,CAAkD;AAChDC,QAAAA,IAAI,EAAE,MAD0C;AAEhD1F,QAAAA,IAAI,EAAE2F,sBAAcC,SAF4B;AAGhDC,QAAAA,UAAU,EAAE;AACVH,UAAAA,IAAI,EAAE,QADI;AAEVI,UAAAA,MAAM,EAAE;AAENC,YAAAA,KAAK,EAAEjG,WAAGkG,YAFJ;AAGN3G,YAAAA,IAAI,EAAE,EAHA;AAINW,YAAAA,IAAI,EAAEF,WAAGG;AAJH,WAFE;AAQVgG,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;AAEA,mBAAO6B,KAAK,CAACC,OAAN,CAAc9B,IAAd,IACH,CAACA,IAAI,CAAC,CAAD,CAAJ,GAAU,MAAI,CAACrC,WAAhB,CADG,GAEH,CAAEqC,IAAD,GAAmB,MAAI,CAACrC,WAAzB,CAFJ;AAGD;AApBS;AAHoC,OAAlD;AA4BA,WAAK/B,qBAAL,CAA2B4D,sBAA3B,CAAkD;AAChDC,QAAAA,IAAI,EAAE,OAD0C;AAEhD1F,QAAAA,IAAI,EAAE2F,sBAAcC,SAF4B;AAGhDC,QAAAA,UAAU,EAAE;AACVH,UAAAA,IAAI,EAAE,SADI;AAEVI,UAAAA,MAAM,EAAE;AAENC,YAAAA,KAAK,EAAEjG,WAAGkG,YAFJ;AAGN3G,YAAAA,IAAI,EAAE,EAHA;AAINW,YAAAA,IAAI,EAAEF,WAAGG;AAJH,WAFE;AAQVgG,UAAAA,IAAI,EAAE,CARI;AASVC,UAAAA,MAAM,EAAE,gBACNC,OADM,EAENC,UAFM,EAGNC,MAHM,EAINC,YAJM,EAKH;AACH,iCAAsBH,OAAtB,CAAQ6B,KAAR;AAAA,gBAAQA,KAAR,+BAAgB,CAAhB;;AACA,gBAAMC,OAAO,GAAG,MAAI,CAAC9J,KAAL,CAAWC,cAAX,GAA4B6J,OAA5C;;AACA,gBAAMC,UAAU,GAAGD,OAAO,CAACE,OAAR,CAAgBH,KAAhB,CAAnB;AACA,mBAAO,CAACE,UAAD,CAAP;AACD;AAnBS;AAHoC,OAAlD;AAyBD;;;EAvWoCE,mB","sourcesContent":["import {\n AttributeType,\n gl,\n IAnimateOption,\n IAttribute,\n IElements,\n IEncodeFeature,\n ILayerConfig,\n IModel,\n IModelUniform,\n} from '@antv/l7-core';\nimport { getCullFace, getMask } from '@antv/l7-utils';\nimport { isNumber } from 'lodash';\nimport BaseModel from '../../core/BaseModel';\nimport { IPointLayerStyleOptions } from '../../core/interface';\nimport {\n GlobelPointFillTriangulation,\n PointFillTriangulation,\n} from '../../core/triangulation';\n// animate pointLayer shader - support animate\nimport waveFillFrag from '../shaders/animate/wave_frag.glsl';\n// static pointLayer shader - not support animate\nimport pointFillFrag from '../shaders/fill_frag.glsl';\nimport pointFillVert from '../shaders/fill_vert.glsl';\n\nimport { Version } from '@antv/l7-maps';\nimport { mat4, vec3 } from 'gl-matrix';\nexport default class FillModel extends BaseModel {\n public meter2coord: number = 1;\n private isMeter: boolean = false;\n public getUninforms(): IModelUniform {\n const {\n opacity = 1,\n strokeOpacity = 1,\n strokeWidth = 0,\n stroke = 'rgba(0,0,0,0)',\n offsets = [0, 0],\n blend,\n blur = 0,\n raisingHeight = 0,\n } = this.layer.getLayerConfig() as IPointLayerStyleOptions;\n\n if (\n this.dataTextureTest &&\n this.dataTextureNeedUpdate({\n opacity,\n strokeOpacity,\n strokeWidth,\n stroke,\n offsets,\n })\n ) {\n // 判断当前的样式中哪些是需要进行数据映射的,哪些是常量,同时计算用于构建数据纹理的一些中间变量\n this.judgeStyleAttributes({\n opacity,\n strokeOpacity,\n strokeWidth,\n stroke,\n offsets,\n });\n\n const encodeData = this.layer.getEncodedData();\n const { data, width, height } = this.calDataFrame(\n this.cellLength,\n encodeData,\n this.cellProperties,\n );\n this.rowCount = height; // 当前数据纹理有多少行\n\n this.dataTexture =\n this.cellLength > 0 && data.length > 0\n ? this.createTexture2D({\n flipY: true,\n data,\n format: gl.LUMINANCE,\n type: gl.FLOAT,\n width,\n height,\n })\n : this.createTexture2D({\n flipY: true,\n data: [1],\n format: gl.LUMINANCE,\n type: gl.FLOAT,\n width: 1,\n height: 1,\n });\n }\n return {\n u_raisingHeight: Number(raisingHeight),\n\n u_isMeter: Number(this.isMeter),\n u_blur: blur,\n\n u_additive: blend === 'additive' ? 1.0 : 0.0,\n u_globel: this.mapService.version === Version.GLOBEL ? 1 : 0,\n u_dataTexture: this.dataTexture, // 数据纹理 - 有数据映射的时候纹理中带数据,若没有任何数据映射时纹理是 [1]\n u_cellTypeLayout: this.getCellTypeLayout(),\n\n u_opacity: isNumber(opacity) ? opacity : 1.0,\n u_stroke_opacity: isNumber(strokeOpacity) ? strokeOpacity : 1.0,\n u_stroke_width: isNumber(strokeWidth) ? strokeWidth : 1.0,\n u_stroke_color: this.getStrokeColor(stroke),\n u_offsets: this.isOffsetStatic(offsets)\n ? (offsets as [number, number])\n : [0, 0],\n };\n }\n public getAnimateUniforms(): IModelUniform {\n const {\n animateOption = { enable: false },\n } = this.layer.getLayerConfig() as ILayerConfig;\n return {\n u_aimate: this.animateOption2Array(animateOption),\n u_time: this.layer.getLayerAnimateTime(),\n };\n }\n\n public getAttribute(): {\n attributes: {\n [attributeName: string]: IAttribute;\n };\n elements: IElements;\n } {\n return this.styleAttributeService.createAttributesAndIndices(\n this.layer.getEncodedData(),\n PointFillTriangulation,\n );\n }\n\n public initModels(): IModel[] {\n const {\n unit = 'l7size',\n } = this.layer.getLayerConfig() as IPointLayerStyleOptions;\n const { version } = this.mapService;\n if (\n unit === 'meter' &&\n version !== Version.L7MAP &&\n version !== Version.GLOBEL\n ) {\n this.isMeter = true;\n this.calMeter2Coord();\n }\n\n return this.buildModels();\n }\n\n /**\n * 计算等面积点图层(unit meter)笛卡尔坐标标度与世界坐标标度的比例\n * @returns\n */\n public calMeter2Coord() {\n const [minLng, minLat, maxLng, maxLat] = this.layer.getSource().extent;\n const center = [(minLng + maxLng) / 2, (minLat + maxLat) / 2];\n\n const { version } = this.mapService;\n if (version === Version.MAPBOX && window.mapboxgl.MercatorCoordinate) {\n const coord = window.mapboxgl.MercatorCoordinate.fromLngLat(\n { lng: center[0], lat: center[1] },\n 0,\n );\n const offsetInMeters = 1;\n const offsetInMercatorCoordinateUnits =\n offsetInMeters * coord.meterInMercatorCoordinateUnits();\n const westCoord = new window.mapboxgl.MercatorCoordinate(\n coord.x - offsetInMercatorCoordinateUnits,\n coord.y,\n coord.z,\n );\n const westLnglat = westCoord.toLngLat();\n\n this.meter2coord = center[0] - westLnglat.lng;\n return;\n }\n\n // @ts-ignore\n const m1 = this.mapService.meterToCoord(center, [minLng, minLat]);\n // @ts-ignore\n const m2 = this.mapService.meterToCoord(center, [\n maxLng === minLng ? maxLng + 0.1 : maxLng,\n maxLat === minLat ? minLat + 0.1 : maxLat,\n ]);\n this.meter2coord = (m1 + m2) / 2;\n if (!Boolean(this.meter2coord)) {\n // Tip: 兼容单个数据导致的 m1、m2 为 NaN\n this.meter2coord = 7.70681090738883;\n }\n }\n\n public buildModels(): IModel[] {\n const {\n mask = false,\n maskInside = true,\n animateOption = { enable: false },\n } = this.layer.getLayerConfig() as Partial<\n ILayerConfig & IPointLayerStyleOptions\n >;\n const { frag, vert, type } = this.getShaders(animateOption);\n\n // TODO: 判断当前的点图层的模型是普通地图模式还是地球模式\n const isGlobel = this.mapService.version === 'GLOBEL';\n this.layer.triangulation = isGlobel\n ? GlobelPointFillTriangulation\n : PointFillTriangulation;\n return [\n this.layer.buildLayerModel({\n moduleName: 'pointfill_' + type,\n vertexShader: vert,\n fragmentShader: frag,\n triangulation: isGlobel\n ? GlobelPointFillTriangulation\n : PointFillTriangulation,\n depth: { enable: isGlobel },\n blend: this.getBlend(),\n stencil: getMask(mask, maskInside),\n cull: {\n enable: true,\n face: getCullFace(this.mapService.version),\n },\n }),\n ];\n }\n\n /**\n * 根据 animateOption 的值返回对应的 shader 代码\n * @returns\n */\n public getShaders(\n animateOption: Partial<IAnimateOption>,\n ): { frag: string; vert: string; type: string } {\n if (animateOption.enable) {\n switch (animateOption.type) {\n case 'wave':\n return {\n frag: waveFillFrag,\n vert: pointFillVert,\n type: 'wave',\n };\n default:\n return {\n frag: waveFillFrag,\n vert: pointFillVert,\n type: 'wave',\n };\n }\n } else {\n return {\n frag: pointFillFrag,\n vert: pointFillVert,\n type: 'normal',\n };\n }\n }\n\n public clearModels() {\n this.dataTexture?.destroy();\n }\n\n // overwrite baseModel func\n protected animateOption2Array(option: Partial<IAnimateOption>): number[] {\n return [option.enable ? 0 : 1.0, option.speed || 1, option.rings || 3, 0];\n }\n protected registerBuiltinAttributes() {\n // TODO: 判断当前的点图层的模型是普通地图模式还是地球模式\n const isGlobel = this.mapService.version === 'GLOBEL';\n\n this.styleAttributeService.registerStyleAttribute({\n name: 'extrude',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_Extrude',\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: 3,\n update: (\n feature: IEncodeFeature,\n featureIdx: number,\n vertex: number[],\n attributeIdx: number,\n ) => {\n let extrude;\n // 地球模式\n if (isGlobel) {\n const [x, y, z] = vertex;\n const n1 = vec3.fromValues(0, 0, 1);\n const n2 = vec3.fromValues(x, 0, z);\n\n const xzReg =\n x >= 0 ? vec3.angle(n1, n2) : Math.PI * 2 - vec3.angle(n1, n2);\n\n const yReg = Math.PI * 2 - Math.asin(y / 100);\n\n const m = mat4.create();\n mat4.rotateY(m, m, xzReg);\n mat4.rotateX(m, m, yReg);\n\n const v1 = vec3.fromValues(1, 1, 0);\n vec3.transformMat4(v1, v1, m);\n vec3.normalize(v1, v1);\n\n const v2 = vec3.fromValues(-1, 1, 0);\n vec3.transformMat4(v2, v2, m);\n vec3.normalize(v2, v2);\n\n const v3 = vec3.fromValues(-1, -1, 0);\n vec3.transformMat4(v3, v3, m);\n vec3.normalize(v3, v3);\n\n const v4 = vec3.fromValues(1, -1, 0);\n vec3.transformMat4(v4, v4, m);\n vec3.normalize(v4, v4);\n\n extrude = [...v1, ...v2, ...v3, ...v4];\n } else {\n // 平面模式\n extrude = [1, 1, 0, -1, 1, 0, -1, -1, 0, 1, -1, 0];\n }\n\n const extrudeIndex = (attributeIdx % 4) * 3;\n return [\n extrude[extrudeIndex],\n extrude[extrudeIndex + 1],\n extrude[extrudeIndex + 2],\n ];\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 = 5 } = feature;\n // console.log('featureIdx', featureIdx, feature)\n return Array.isArray(size)\n ? [size[0] * this.meter2coord]\n : [(size as number) * this.meter2coord];\n },\n },\n });\n\n // point layer size;\n this.styleAttributeService.registerStyleAttribute({\n name: 'shape',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_Shape',\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 { shape = 2 } = feature;\n const shape2d = this.layer.getLayerConfig().shape2d as string[];\n const shapeIndex = shape2d.indexOf(shape as string);\n return [shapeIndex];\n },\n },\n });\n }\n}\n"],"file":"fill.js"}
1
+ {"version":3,"sources":["../../../src/point/models/fill.ts"],"names":["FillModel","layer","getLayerConfig","opacity","strokeOpacity","strokeWidth","stroke","offsets","blend","blur","raisingHeight","unit","updateUnit","dataTextureTest","dataTextureNeedUpdate","judgeStyleAttributes","encodeData","getEncodedData","calDataFrame","cellLength","cellProperties","data","width","height","rowCount","dataTexture","length","createTexture2D","flipY","format","gl","LUMINANCE","type","FLOAT","u_raisingHeight","Number","u_meter2coord","meter2coord","u_meteryScale","meteryScale","u_isMeter","isMeter","u_blur","u_additive","u_globel","mapService","version","Version","GLOBEL","u_dataTexture","u_cellTypeLayout","getCellTypeLayout","u_opacity","u_stroke_opacity","u_stroke_width","u_stroke_color","getStrokeColor","u_offsets","isOffsetStatic","animateOption","enable","u_aimate","animateOption2Array","u_time","getLayerAnimateTime","styleAttributeService","createAttributesAndIndices","PointFillTriangulation","buildModels","getSource","extent","minLng","minLat","maxLng","maxLat","center","mapboxContext","$window","mapboxgl","MAPBOX","MercatorCoordinate","coord","fromLngLat","lng","lat","offsetInMercatorCoordinateUnits","meterInMercatorCoordinateUnits","westCoord","x","y","z","westLnglat","toLngLat","southCoord","southLnglat","m1","meterToCoord","m2","Boolean","mask","maskInside","getShaders","frag","vert","isGlobel","triangulation","GlobelPointFillTriangulation","buildLayerModel","moduleName","vertexShader","fragmentShader","depth","getBlend","stencil","waveFillFrag","pointFillVert","pointFillFrag","destroy","option","speed","rings","registerStyleAttribute","name","AttributeType","Attribute","descriptor","buffer","usage","DYNAMIC_DRAW","size","update","feature","featureIdx","vertex","attributeIdx","extrude","n1","vec3","fromValues","n2","xzReg","angle","Math","PI","yReg","asin","m","mat4","create","rotateY","rotateX","v1","transformMat4","normalize","v2","v3","v4","extrudeIndex","Array","isArray","shape","shape2d","shapeIndex","indexOf","L7MAP","calMeter2Coord","BaseModel"],"mappings":"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","sourcesContent":["import {\n AttributeType,\n gl,\n IAnimateOption,\n IAttribute,\n IElements,\n IEncodeFeature,\n ILayerConfig,\n IModel,\n IModelUniform,\n} from '@antv/l7-core';\nimport { $window, getCullFace, getMask } from '@antv/l7-utils';\nimport { isNumber } from 'lodash';\nimport BaseModel from '../../core/BaseModel';\nimport { IPointLayerStyleOptions } from '../../core/interface';\nimport {\n GlobelPointFillTriangulation,\n PointFillTriangulation,\n} from '../../core/triangulation';\n// animate pointLayer shader - support animate\nimport waveFillFrag from '../shaders/animate/wave_frag.glsl';\n// static pointLayer shader - not support animate\nimport pointFillFrag from '../shaders/fill_frag.glsl';\nimport pointFillVert from '../shaders/fill_vert.glsl';\n\nimport { Version } from '@antv/l7-maps';\nimport { mat4, vec3 } from 'gl-matrix';\nexport default class FillModel extends BaseModel {\n private meter2coord: number = 1;\n private meteryScale: number = 1; // 兼容 mapbox\n private isMeter: boolean = false;\n\n private unit: string = 'l7size';\n public getUninforms(): IModelUniform {\n const {\n opacity = 1,\n strokeOpacity = 1,\n strokeWidth = 0,\n stroke = 'rgba(0,0,0,0)',\n offsets = [0, 0],\n blend,\n blur = 0,\n raisingHeight = 0,\n unit = 'l7size',\n } = this.layer.getLayerConfig() as IPointLayerStyleOptions;\n this.updateUnit(unit);\n\n if (\n this.dataTextureTest &&\n this.dataTextureNeedUpdate({\n opacity,\n strokeOpacity,\n strokeWidth,\n stroke,\n offsets,\n })\n ) {\n // 判断当前的样式中哪些是需要进行数据映射的,哪些是常量,同时计算用于构建数据纹理的一些中间变量\n this.judgeStyleAttributes({\n opacity,\n strokeOpacity,\n strokeWidth,\n stroke,\n offsets,\n });\n\n const encodeData = this.layer.getEncodedData();\n const { data, width, height } = this.calDataFrame(\n this.cellLength,\n encodeData,\n this.cellProperties,\n );\n this.rowCount = height; // 当前数据纹理有多少行\n\n this.dataTexture =\n this.cellLength > 0 && data.length > 0\n ? this.createTexture2D({\n flipY: true,\n data,\n format: gl.LUMINANCE,\n type: gl.FLOAT,\n width,\n height,\n })\n : this.createTexture2D({\n flipY: true,\n data: [1],\n format: gl.LUMINANCE,\n type: gl.FLOAT,\n width: 1,\n height: 1,\n });\n }\n return {\n u_raisingHeight: Number(raisingHeight),\n\n u_meter2coord: this.meter2coord,\n u_meteryScale: this.meteryScale,\n u_isMeter: Number(this.isMeter),\n u_blur: blur,\n\n u_additive: blend === 'additive' ? 1.0 : 0.0,\n u_globel: this.mapService.version === Version.GLOBEL ? 1 : 0,\n u_dataTexture: this.dataTexture, // 数据纹理 - 有数据映射的时候纹理中带数据,若没有任何数据映射时纹理是 [1]\n u_cellTypeLayout: this.getCellTypeLayout(),\n\n u_opacity: isNumber(opacity) ? opacity : 1.0,\n u_stroke_opacity: isNumber(strokeOpacity) ? strokeOpacity : 1.0,\n u_stroke_width: isNumber(strokeWidth) ? strokeWidth : 1.0,\n u_stroke_color: this.getStrokeColor(stroke),\n u_offsets: this.isOffsetStatic(offsets)\n ? (offsets as [number, number])\n : [0, 0],\n };\n }\n public getAnimateUniforms(): IModelUniform {\n const {\n animateOption = { enable: false },\n } = this.layer.getLayerConfig() as ILayerConfig;\n return {\n u_aimate: this.animateOption2Array(animateOption),\n u_time: this.layer.getLayerAnimateTime(),\n };\n }\n\n public getAttribute(): {\n attributes: {\n [attributeName: string]: IAttribute;\n };\n elements: IElements;\n } {\n return this.styleAttributeService.createAttributesAndIndices(\n this.layer.getEncodedData(),\n PointFillTriangulation,\n );\n }\n\n public initModels(): IModel[] {\n this.updateUnit('l7size');\n\n return this.buildModels();\n }\n\n /**\n * 计算等面积点图层(unit meter)笛卡尔坐标标度与世界坐标标度的比例\n * @returns\n */\n public calMeter2Coord() {\n const [minLng, minLat, maxLng, maxLat] = this.layer.getSource().extent;\n const center = [(minLng + maxLng) / 2, (minLat + maxLat) / 2];\n\n const { version } = this.mapService;\n const mapboxContext = $window?.mapboxgl;\n if (version === Version.MAPBOX && mapboxContext?.MercatorCoordinate) {\n // 参考:\n // https://docs.mapbox.com/mapbox-gl-js/api/geography/#mercatorcoordinate#meterinmercatorcoordinateunits\n const coord = mapboxContext.MercatorCoordinate.fromLngLat(\n { lng: center[0], lat: center[1] },\n 0,\n );\n const offsetInMercatorCoordinateUnits = coord.meterInMercatorCoordinateUnits();\n const westCoord = new mapboxContext.MercatorCoordinate(\n coord.x - offsetInMercatorCoordinateUnits,\n coord.y,\n coord.z,\n );\n const westLnglat = westCoord.toLngLat();\n\n const southCoord = new mapboxContext.MercatorCoordinate(\n coord.x,\n coord.y - offsetInMercatorCoordinateUnits,\n coord.z,\n );\n const southLnglat = southCoord.toLngLat();\n\n this.meter2coord = center[0] - westLnglat.lng;\n\n this.meteryScale = (southLnglat.lat - center[1]) / this.meter2coord;\n return;\n }\n\n const m1 = this.mapService.meterToCoord(center, [minLng, minLat]);\n const m2 = this.mapService.meterToCoord(center, [\n maxLng === minLng ? maxLng + 0.1 : maxLng,\n maxLat === minLat ? minLat + 0.1 : maxLat,\n ]);\n this.meter2coord = (m1 + m2) / 2;\n if (!Boolean(this.meter2coord)) {\n // Tip: 兼容单个数据导致的 m1、m2 为 NaN\n this.meter2coord = 7.70681090738883;\n }\n }\n\n public buildModels(): IModel[] {\n const {\n mask = false,\n maskInside = true,\n animateOption = { enable: false },\n } = this.layer.getLayerConfig() as Partial<\n ILayerConfig & IPointLayerStyleOptions\n >;\n const { frag, vert, type } = this.getShaders(animateOption);\n\n // TODO: 判断当前的点图层的模型是普通地图模式还是地球模式\n const isGlobel = this.mapService.version === 'GLOBEL';\n this.layer.triangulation = isGlobel\n ? GlobelPointFillTriangulation\n : PointFillTriangulation;\n return [\n this.layer.buildLayerModel({\n moduleName: 'pointfill_' + type,\n vertexShader: vert,\n fragmentShader: frag,\n triangulation: isGlobel\n ? GlobelPointFillTriangulation\n : PointFillTriangulation,\n depth: { enable: isGlobel },\n blend: this.getBlend(),\n stencil: getMask(mask, maskInside),\n }),\n ];\n }\n\n /**\n * 根据 animateOption 的值返回对应的 shader 代码\n * @returns\n */\n public getShaders(\n animateOption: Partial<IAnimateOption>,\n ): { frag: string; vert: string; type: string } {\n if (animateOption.enable) {\n switch (animateOption.type) {\n case 'wave':\n return {\n frag: waveFillFrag,\n vert: pointFillVert,\n type: 'wave',\n };\n default:\n return {\n frag: waveFillFrag,\n vert: pointFillVert,\n type: 'wave',\n };\n }\n } else {\n return {\n frag: pointFillFrag,\n vert: pointFillVert,\n type: 'normal',\n };\n }\n }\n\n public clearModels() {\n this.dataTexture?.destroy();\n }\n\n // overwrite baseModel func\n protected animateOption2Array(option: Partial<IAnimateOption>): number[] {\n return [option.enable ? 0 : 1.0, option.speed || 1, option.rings || 3, 0];\n }\n protected registerBuiltinAttributes() {\n // TODO: 判断当前的点图层的模型是普通地图模式还是地球模式\n const isGlobel = this.mapService.version === 'GLOBEL';\n\n this.styleAttributeService.registerStyleAttribute({\n name: 'extrude',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_Extrude',\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: 3,\n update: (\n feature: IEncodeFeature,\n featureIdx: number,\n vertex: number[],\n attributeIdx: number,\n ) => {\n let extrude;\n // 地球模式\n if (isGlobel) {\n const [x, y, z] = vertex;\n const n1 = vec3.fromValues(0, 0, 1);\n const n2 = vec3.fromValues(x, 0, z);\n\n const xzReg =\n x >= 0 ? vec3.angle(n1, n2) : Math.PI * 2 - vec3.angle(n1, n2);\n\n const yReg = Math.PI * 2 - Math.asin(y / 100);\n\n const m = mat4.create();\n mat4.rotateY(m, m, xzReg);\n mat4.rotateX(m, m, yReg);\n\n const v1 = vec3.fromValues(1, 1, 0);\n vec3.transformMat4(v1, v1, m);\n vec3.normalize(v1, v1);\n\n const v2 = vec3.fromValues(-1, 1, 0);\n vec3.transformMat4(v2, v2, m);\n vec3.normalize(v2, v2);\n\n const v3 = vec3.fromValues(-1, -1, 0);\n vec3.transformMat4(v3, v3, m);\n vec3.normalize(v3, v3);\n\n const v4 = vec3.fromValues(1, -1, 0);\n vec3.transformMat4(v4, v4, m);\n vec3.normalize(v4, v4);\n\n extrude = [...v1, ...v2, ...v3, ...v4];\n } else {\n // 平面模式\n extrude = [1, 1, 0, -1, 1, 0, -1, -1, 0, 1, -1, 0];\n }\n\n const extrudeIndex = (attributeIdx % 4) * 3;\n return [\n extrude[extrudeIndex],\n extrude[extrudeIndex + 1],\n extrude[extrudeIndex + 2],\n ];\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 = 5 } = feature;\n return Array.isArray(size) ? [size[0]] : [size as number];\n },\n },\n });\n\n // point layer size;\n this.styleAttributeService.registerStyleAttribute({\n name: 'shape',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_Shape',\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 { shape = 2 } = feature;\n const shape2d = this.layer.getLayerConfig().shape2d as string[];\n const shapeIndex = shape2d.indexOf(shape as string);\n return [shapeIndex];\n },\n },\n });\n }\n\n /**\n * 判断是否更新点图层的计量单位\n * @param unit\n */\n private updateUnit(unit: string) {\n const { version } = this.mapService;\n if (this.unit !== unit) {\n // l7size => meter\n if (\n this.unit !== 'meter' &&\n unit === 'meter' &&\n version !== Version.L7MAP &&\n version !== Version.GLOBEL\n ) {\n this.isMeter = true;\n this.calMeter2Coord();\n // meter => l7size\n } else if (this.unit === 'meter' && unit !== 'meter') {\n this.isMeter = false;\n this.meter2coord = 1;\n }\n this.unit = unit;\n }\n }\n}\n"],"file":"fill.js"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@antv/l7-layers",
3
- "version": "2.9.8",
3
+ "version": "2.9.11",
4
4
  "description": "L7's collection of built-in layers",
5
5
  "main": "lib/index.js",
6
6
  "module": "es/index.js",
@@ -25,9 +25,9 @@
25
25
  "author": "xiaoiver",
26
26
  "license": "ISC",
27
27
  "dependencies": {
28
- "@antv/l7-core": "2.9.8",
29
- "@antv/l7-source": "2.9.8",
30
- "@antv/l7-utils": "2.9.8",
28
+ "@antv/l7-core": "2.9.11",
29
+ "@antv/l7-source": "2.9.11",
30
+ "@antv/l7-utils": "2.9.11",
31
31
  "@babel/runtime": "^7.7.7",
32
32
  "@mapbox/martini": "^0.2.0",
33
33
  "@turf/helpers": "^6.1.4",
@@ -35,7 +35,7 @@
35
35
  "@turf/union": "^6.5.0",
36
36
  "d3-array": "1",
37
37
  "d3-color": "^1.4.0",
38
- "d3-interpolate": "1.4.0",
38
+ "d3-interpolate": "1.0.0",
39
39
  "d3-scale": "2",
40
40
  "earcut": "^2.2.1",
41
41
  "eventemitter3": "^4.0.0",
@@ -51,13 +51,13 @@
51
51
  "devDependencies": {
52
52
  "@types/d3-array": "^2.0.0",
53
53
  "@types/d3-color": "^1.2.2",
54
- "@types/d3-interpolate": "1.4.0",
54
+ "@types/d3-interpolate": "1.1.6",
55
55
  "@types/d3-scale": "^2.1.1",
56
56
  "@types/earcut": "^2.1.0",
57
57
  "@types/gl-matrix": "^2.4.5",
58
58
  "@types/lodash": "^4.14.138"
59
59
  },
60
- "gitHead": "8ee6964eddde9ad53ebe523aa766f41d0f278d8e",
60
+ "gitHead": "7c443b828f56d24112517f34e4e0c0b8c86aa411",
61
61
  "publishConfig": {
62
62
  "access": "public"
63
63
  }