From 47d198e2a608777169b743f3fc732b4500414b75 Mon Sep 17 00:00:00 2001 From: thinkinggis Date: Mon, 11 Nov 2019 13:52:00 +0800 Subject: [PATCH] fix(layers): heatmap 3d effect --- ...tore-2b8cd1df4f8a6941bff4108301b5d6a9.json | 1 + ...tore-308215140d91d466921fde8b44e96c70.json | 1 + ...tore-3cf9cbd2e002119e2f428dfed8eb94da.json | 1 + ...tore-57199a69f7efd5decc9f72929e6eaab6.json | 1 + ...tore-8a657829abac5ed5e9e205e519d6ded0.json | 1 + ...tore-9cf731425f928d78c08a41fa53dbea26.json | 1 + ...tore-b196fbb424293a9c110515c8e22586c7.json | 1 + ...tore-bed602677090371493b02b2541d3b187.json | 1 + ...tore-bfa695e84c9fbd040b43c6cebb35a0a8.json | 1 + ...tore-dc1901f7f1baf243df1556f52717b2ba.json | 1 + ...tore-fbddf0de549e59cfa8bf242898a85984.json | 1 + .cache/redux.state | Bin 0 -> 404727 bytes examples/heatmap/heatmap/demo/grid.js | 55 ------------------ examples/heatmap/heatmap/demo/meta.json | 2 +- examples/heatmap/heatmap/demo/world.js | 4 +- examples/heatmap/heatmap/demo/world3d.js | 41 +++++++++++++ examples/point/basic/demo/meta.json | 5 ++ examples/point/basic/demo/text.js | 41 +++++++++++++ examples/point/image/demo/size.js | 2 +- .../core/src/services/layer/ILayerService.ts | 1 + packages/layers/src/core/BaseLayer.ts | 34 +++++++++++ packages/layers/src/heatmap/heatmap.ts | 21 ++++--- .../src/heatmap/shaders/heatmap_3d_frag.glsl | 7 +-- .../src/heatmap/shaders/heatmap_3d_vert.glsl | 2 +- .../src/heatmap/shaders/heatmap_frag.glsl | 5 +- .../src/heatmap/shaders/heatmap_vert.glsl | 5 +- .../layers/src/plugins/FeatureScalePlugin.ts | 16 +++-- packages/layers/src/point/text.ts | 8 +-- packages/renderer/src/regl/index.ts | 2 +- 29 files changed, 177 insertions(+), 85 deletions(-) create mode 100644 .cache/caches/gatsby-transformer-remark/diskstore-2b8cd1df4f8a6941bff4108301b5d6a9.json create mode 100644 .cache/caches/gatsby-transformer-remark/diskstore-308215140d91d466921fde8b44e96c70.json create mode 100644 .cache/caches/gatsby-transformer-remark/diskstore-3cf9cbd2e002119e2f428dfed8eb94da.json create mode 100644 .cache/caches/gatsby-transformer-remark/diskstore-57199a69f7efd5decc9f72929e6eaab6.json create mode 100644 .cache/caches/gatsby-transformer-remark/diskstore-8a657829abac5ed5e9e205e519d6ded0.json create mode 100644 .cache/caches/gatsby-transformer-remark/diskstore-9cf731425f928d78c08a41fa53dbea26.json create mode 100644 .cache/caches/gatsby-transformer-remark/diskstore-b196fbb424293a9c110515c8e22586c7.json create mode 100644 .cache/caches/gatsby-transformer-remark/diskstore-bed602677090371493b02b2541d3b187.json create mode 100644 .cache/caches/gatsby-transformer-remark/diskstore-bfa695e84c9fbd040b43c6cebb35a0a8.json create mode 100644 .cache/caches/gatsby-transformer-remark/diskstore-dc1901f7f1baf243df1556f52717b2ba.json create mode 100644 .cache/caches/gatsby-transformer-remark/diskstore-fbddf0de549e59cfa8bf242898a85984.json create mode 100644 .cache/redux.state delete mode 100644 examples/heatmap/heatmap/demo/grid.js create mode 100644 examples/heatmap/heatmap/demo/world3d.js create mode 100644 examples/point/basic/demo/text.js diff --git a/.cache/caches/gatsby-transformer-remark/diskstore-2b8cd1df4f8a6941bff4108301b5d6a9.json b/.cache/caches/gatsby-transformer-remark/diskstore-2b8cd1df4f8a6941bff4108301b5d6a9.json new file mode 100644 index 0000000000..92f7b2e967 --- /dev/null +++ b/.cache/caches/gatsby-transformer-remark/diskstore-2b8cd1df4f8a6941bff4108301b5d6a9.json @@ -0,0 +1 @@ +{"expireTime":9007200828184475000,"key":"transformer-remark-markdown-html-99b5b2f90b0432fb92044e231041ffca-gatsby-remark-prettiergatsby-remark-prismjsgatsby-remark-external-linksgatsby-remark-autolink-headersgatsby-remark-reading-time-","val":""} \ No newline at end of file diff --git a/.cache/caches/gatsby-transformer-remark/diskstore-308215140d91d466921fde8b44e96c70.json b/.cache/caches/gatsby-transformer-remark/diskstore-308215140d91d466921fde8b44e96c70.json new file mode 100644 index 0000000000..425fdae701 --- /dev/null +++ b/.cache/caches/gatsby-transformer-remark/diskstore-308215140d91d466921fde8b44e96c70.json @@ -0,0 +1 @@ +{"expireTime":9007200828184475000,"key":"transformer-remark-markdown-html-b627c832a1f77c6bd67b3f67116e04eb-gatsby-remark-prettiergatsby-remark-prismjsgatsby-remark-external-linksgatsby-remark-autolink-headersgatsby-remark-reading-time-","val":""} \ No newline at end of file diff --git a/.cache/caches/gatsby-transformer-remark/diskstore-3cf9cbd2e002119e2f428dfed8eb94da.json b/.cache/caches/gatsby-transformer-remark/diskstore-3cf9cbd2e002119e2f428dfed8eb94da.json new file mode 100644 index 0000000000..7210b21785 --- /dev/null +++ b/.cache/caches/gatsby-transformer-remark/diskstore-3cf9cbd2e002119e2f428dfed8eb94da.json @@ -0,0 +1 @@ +{"expireTime":9007200828184475000,"key":"transformer-remark-markdown-html-30a51869612bca077eda87f35f662bad-gatsby-remark-prettiergatsby-remark-prismjsgatsby-remark-external-linksgatsby-remark-autolink-headersgatsby-remark-reading-time-","val":""} \ No newline at end of file diff --git a/.cache/caches/gatsby-transformer-remark/diskstore-57199a69f7efd5decc9f72929e6eaab6.json b/.cache/caches/gatsby-transformer-remark/diskstore-57199a69f7efd5decc9f72929e6eaab6.json new file mode 100644 index 0000000000..0af459750c --- /dev/null +++ b/.cache/caches/gatsby-transformer-remark/diskstore-57199a69f7efd5decc9f72929e6eaab6.json @@ -0,0 +1 @@ +{"expireTime":9007200828184475000,"key":"transformer-remark-markdown-html-0b8b19ff19f6a64f7b2cae67200ccd88-gatsby-remark-prettiergatsby-remark-prismjsgatsby-remark-external-linksgatsby-remark-autolink-headersgatsby-remark-reading-time-","val":""} \ No newline at end of file diff --git a/.cache/caches/gatsby-transformer-remark/diskstore-8a657829abac5ed5e9e205e519d6ded0.json b/.cache/caches/gatsby-transformer-remark/diskstore-8a657829abac5ed5e9e205e519d6ded0.json new file mode 100644 index 0000000000..0e0495ff9c --- /dev/null +++ b/.cache/caches/gatsby-transformer-remark/diskstore-8a657829abac5ed5e9e205e519d6ded0.json @@ -0,0 +1 @@ +{"expireTime":9007200828139761000,"key":"transformer-remark-markdown-toc-99b5b2f90b0432fb92044e231041ffca-gatsby-remark-prettiergatsby-remark-prismjsgatsby-remark-external-linksgatsby-remark-autolink-headersgatsby-remark-reading-time-{\"heading\":null,\"maxDepth\":6,\"pathToSlugField\":\"fields.slug\"}-","val":""} \ No newline at end of file diff --git a/.cache/caches/gatsby-transformer-remark/diskstore-9cf731425f928d78c08a41fa53dbea26.json b/.cache/caches/gatsby-transformer-remark/diskstore-9cf731425f928d78c08a41fa53dbea26.json new file mode 100644 index 0000000000..8448e9c615 --- /dev/null +++ b/.cache/caches/gatsby-transformer-remark/diskstore-9cf731425f928d78c08a41fa53dbea26.json @@ -0,0 +1 @@ +{"expireTime":9007200828184475000,"key":"transformer-remark-markdown-html-6e9c5aea4f7ea7c85d806fb35a09a394-gatsby-remark-prettiergatsby-remark-prismjsgatsby-remark-external-linksgatsby-remark-autolink-headersgatsby-remark-reading-time-","val":""} \ No newline at end of file diff --git a/.cache/caches/gatsby-transformer-remark/diskstore-b196fbb424293a9c110515c8e22586c7.json b/.cache/caches/gatsby-transformer-remark/diskstore-b196fbb424293a9c110515c8e22586c7.json new file mode 100644 index 0000000000..97fbc8a16e --- /dev/null +++ b/.cache/caches/gatsby-transformer-remark/diskstore-b196fbb424293a9c110515c8e22586c7.json @@ -0,0 +1 @@ +{"expireTime":9007200828184475000,"key":"transformer-remark-markdown-html-e0eda26454f7aaeda47989e111060318-gatsby-remark-prettiergatsby-remark-prismjsgatsby-remark-external-linksgatsby-remark-autolink-headersgatsby-remark-reading-time-","val":""} \ No newline at end of file diff --git a/.cache/caches/gatsby-transformer-remark/diskstore-bed602677090371493b02b2541d3b187.json b/.cache/caches/gatsby-transformer-remark/diskstore-bed602677090371493b02b2541d3b187.json new file mode 100644 index 0000000000..9e03c97f0b --- /dev/null +++ b/.cache/caches/gatsby-transformer-remark/diskstore-bed602677090371493b02b2541d3b187.json @@ -0,0 +1 @@ +{"expireTime":9007200828184475000,"key":"transformer-remark-markdown-html-51cffb57f20c685f94203902c79f04c6-gatsby-remark-prettiergatsby-remark-prismjsgatsby-remark-external-linksgatsby-remark-autolink-headersgatsby-remark-reading-time-","val":""} \ No newline at end of file diff --git a/.cache/caches/gatsby-transformer-remark/diskstore-bfa695e84c9fbd040b43c6cebb35a0a8.json b/.cache/caches/gatsby-transformer-remark/diskstore-bfa695e84c9fbd040b43c6cebb35a0a8.json new file mode 100644 index 0000000000..00090fcbce --- /dev/null +++ b/.cache/caches/gatsby-transformer-remark/diskstore-bfa695e84c9fbd040b43c6cebb35a0a8.json @@ -0,0 +1 @@ +{"expireTime":9007200828184475000,"key":"transformer-remark-markdown-html-94a83b1b7402a40717e5c1b92c85015a-gatsby-remark-prettiergatsby-remark-prismjsgatsby-remark-external-linksgatsby-remark-autolink-headersgatsby-remark-reading-time-","val":""} \ No newline at end of file diff --git a/.cache/caches/gatsby-transformer-remark/diskstore-dc1901f7f1baf243df1556f52717b2ba.json b/.cache/caches/gatsby-transformer-remark/diskstore-dc1901f7f1baf243df1556f52717b2ba.json new file mode 100644 index 0000000000..4c28076b3b --- /dev/null +++ b/.cache/caches/gatsby-transformer-remark/diskstore-dc1901f7f1baf243df1556f52717b2ba.json @@ -0,0 +1 @@ +{"expireTime":9007200828139769000,"key":"transformer-remark-markdown-toc-57531815410aa78dc10e42270cb201dd-gatsby-remark-prettiergatsby-remark-prismjsgatsby-remark-external-linksgatsby-remark-autolink-headersgatsby-remark-reading-time-{\"heading\":null,\"maxDepth\":6,\"pathToSlugField\":\"fields.slug\"}-","val":""} \ No newline at end of file diff --git a/.cache/caches/gatsby-transformer-remark/diskstore-fbddf0de549e59cfa8bf242898a85984.json b/.cache/caches/gatsby-transformer-remark/diskstore-fbddf0de549e59cfa8bf242898a85984.json new file mode 100644 index 0000000000..0ef099a477 --- /dev/null +++ b/.cache/caches/gatsby-transformer-remark/diskstore-fbddf0de549e59cfa8bf242898a85984.json @@ -0,0 +1 @@ +{"expireTime":9007200828139770000,"key":"transformer-remark-markdown-toc-51dbb367647851670b43ae45a9e937df-gatsby-remark-prettiergatsby-remark-prismjsgatsby-remark-external-linksgatsby-remark-autolink-headersgatsby-remark-reading-time-{\"heading\":null,\"maxDepth\":6,\"pathToSlugField\":\"fields.slug\"}-","val":""} \ No newline at end of file diff --git a/.cache/redux.state b/.cache/redux.state new file mode 100644 index 0000000000000000000000000000000000000000..d7263dcb6e407cc4b58d685997af389595241c7b GIT binary patch literal 404727 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 Z&PRj5G2lfWo0=0@u93p`*nRNS{|AjtWU>GN literal 0 HcmV?d00001 diff --git a/examples/heatmap/heatmap/demo/grid.js b/examples/heatmap/heatmap/demo/grid.js deleted file mode 100644 index 8c272874ca..0000000000 --- a/examples/heatmap/heatmap/demo/grid.js +++ /dev/null @@ -1,55 +0,0 @@ -import { Scene } from '@l7/scene'; -import { HeatMapGridLayer } from '@l7/layers'; -const scene = new Scene({ - id: 'map', - style: 'light', - pitch: 0, - center: [116.49434030056, 39.868073421167621], - type: 'amap', - zoom: 16, -}); - -fetch('https://gw.alipayobjects.com/os/basement_prod/c3f8bda2-081b-449d-aa9f-9413b779205b.json') - .then((res) => res.json()) - .then((data) => { - const layer = - new HeatMapGridLayer({ - }) - .source(data, { - parser: { - type: 'json', - x: 'lng', - y: 'lat', - }, - transforms: [ - { - type: 'grid', - size: 50, - field: 'count', - method: 'sum', - }, - ], - }) - .size('sum', (value) => { - return value; - }) - .shape('square') - .style({ - coverage: 0.8, - angle: 0, - opacity: 0.6, - }) - .color('count', [ - '#002466', - '#105CB3', - '#2894E0', - '#CFF6FF', - '#FFF5B8', - '#FFAB5C', - '#F27049', - '#730D1C', - ]); - scene.addLayer(layer); - - - }); diff --git a/examples/heatmap/heatmap/demo/meta.json b/examples/heatmap/heatmap/demo/meta.json index 5c63ae78a9..c36eb6b0b9 100644 --- a/examples/heatmap/heatmap/demo/meta.json +++ b/examples/heatmap/heatmap/demo/meta.json @@ -5,7 +5,7 @@ }, "demos": [ { - "filename": "grid.js", + "filename": "world3d.js", "title": "网格热力图" }, { diff --git a/examples/heatmap/heatmap/demo/world.js b/examples/heatmap/heatmap/demo/world.js index 91a0f2c2f1..ad130f8638 100644 --- a/examples/heatmap/heatmap/demo/world.js +++ b/examples/heatmap/heatmap/demo/world.js @@ -16,7 +16,9 @@ fetch('https://gw.alipayobjects.com/os/basement_prod/337ddbb7-aa3f-4679-ab60-d64 new HeatMapLayer({ }) .source(data) - .size('capacity', [0, 1]) // weight映射通道 + .size('capacity', [0, 1]) + .shape('heatmap') + // weight映射通道 .style({ intensity: 10, radius: 5, diff --git a/examples/heatmap/heatmap/demo/world3d.js b/examples/heatmap/heatmap/demo/world3d.js new file mode 100644 index 0000000000..cf4b4abf82 --- /dev/null +++ b/examples/heatmap/heatmap/demo/world3d.js @@ -0,0 +1,41 @@ +import { Scene } from '@l7/scene'; +import { HeatMapLayer } from '@l7/layers'; +const scene = new Scene({ + id: 'map', + style: 'dark', + pitch: 0, + center: [116.49434030056, 39.868073421167621], + type: 'mapbox', + zoom: 3, +}); + +fetch('https://gw.alipayobjects.com/os/basement_prod/337ddbb7-aa3f-4679-ab60-d64359241955.json') + .then((res) => res.json()) + .then((data) => { + const layer = + new HeatMapLayer({ + }) + .source(data) + .size('capacity', [0, 1]) + .shape('heatmap3D') + // weight映射通道 + .style({ + intensity: 10, + radius: 5, + opacity: 1.0, + rampColors: { + colors: [ + '#2E8AE6', + '#69D1AB', + '#DAF291', + '#FFD591', + '#FF7A45', + '#CF1D49', + ], + positions: [0,0.2, 0.4, 0.6, 0.8, 1.0], + }, + }); + scene.addLayer(layer); + + + }); diff --git a/examples/point/basic/demo/meta.json b/examples/point/basic/demo/meta.json index d435544d66..f9c6517f99 100644 --- a/examples/point/basic/demo/meta.json +++ b/examples/point/basic/demo/meta.json @@ -13,6 +13,11 @@ "filename": "world.js", "title": "气泡图 - 电厂装机量" + }, + { + "filename": "text.js", + "title": "文本" + } ] } diff --git a/examples/point/basic/demo/text.js b/examples/point/basic/demo/text.js new file mode 100644 index 0000000000..1d10a9b144 --- /dev/null +++ b/examples/point/basic/demo/text.js @@ -0,0 +1,41 @@ +import { Scene } from '@l7/scene'; +import { PointLayer, PointImageLayer } from '@l7/layers' +const scene = new Scene({ + id: 'map', + pitch: 0, + type: 'amap', + style: 'light', + center: [121.40, 31.258134], + zoom: 15, + minZoom: 10 +}); + +fetch('https://gw.alipayobjects.com/os/basement_prod/893d1d5f-11d9-45f3-8322-ee9140d288ae.json') + .then((res) => res.json()) + .then((data) => { + const pointLayer = + new PointLayer({ + }) + .source(data, { + parser: { + type: 'json', + x: 'longitude', + y: 'latitude' + } + }).shape('circle') + .size('unit_price', [5, 25]) + .color('#5B8FF9') + .label('name') + .style({ + opacity: 0.3, + strokeWidth: 1, + strokeColor: "#5B8FF9", + + }) + + scene.addLayer(pointLayer); + console.log(pointLayer); + + }); + + diff --git a/examples/point/image/demo/size.js b/examples/point/image/demo/size.js index e1932a3a46..44f0d66871 100644 --- a/examples/point/image/demo/size.js +++ b/examples/point/image/demo/size.js @@ -34,7 +34,7 @@ fetch('https://gw.alipayobjects.com/os/basement_prod/893d1d5f-11d9-45f3-8322-ee9 } }) .shape('name', ['00', '01','02']) - .size('unit_price', [30, 100]) + .size('unit_price', [5, 15]) scene.addLayer(imageLayer); }); diff --git a/packages/core/src/services/layer/ILayerService.ts b/packages/core/src/services/layer/ILayerService.ts index 40da3c56fc..d88002ea0d 100644 --- a/packages/core/src/services/layer/ILayerService.ts +++ b/packages/core/src/services/layer/ILayerService.ts @@ -61,6 +61,7 @@ export interface ILayer { size(field: StyleAttrField, value?: StyleAttributeOption): ILayer; color(field: StyleAttrField, value?: StyleAttributeOption): ILayer; shape(field: StyleAttrField, value?: StyleAttributeOption): ILayer; + label(field: StyleAttrField, value?: StyleAttributeOption): ILayer; // pattern(field: string, value: StyleAttributeOption): ILayer; // filter(field: string, value: StyleAttributeOption): ILayer; // active(option: ActiveOption): ILayer; diff --git a/packages/layers/src/core/BaseLayer.ts b/packages/layers/src/core/BaseLayer.ts index 60b15c0631..76ba8fb35e 100644 --- a/packages/layers/src/core/BaseLayer.ts +++ b/packages/layers/src/core/BaseLayer.ts @@ -128,6 +128,13 @@ export default class BaseLayer extends EventEmitter @lazyInject(TYPES.ILayerService) protected readonly layerService: ILayerService; + protected enodeOptions: { + [type: string]: { + field: StyleAttributeField; + values?: StyleAttributeOption; + }; + } = {}; + private encodedData: IEncodeFeature[]; private configSchema: object; @@ -228,6 +235,10 @@ export default class BaseLayer extends EventEmitter values?: StyleAttributeOption, updateOptions?: Partial, ) { + this.enodeOptions.shape = { + field, + values, + }; this.styleAttributeService.updateStyleAttribute( 'shape', { @@ -246,6 +257,29 @@ export default class BaseLayer extends EventEmitter ); return this; } + public label( + field: StyleAttributeField, + values?: StyleAttributeOption, + updateOptions?: Partial, + ) { + this.styleAttributeService.updateStyleAttribute( + 'label', + { + // @ts-ignore + scale: { + field, + ...this.splitValuesAndCallbackInAttribute( + // @ts-ignore + values, + null, + ), + }, + }, + // @ts-ignore + updateOptions, + ); + return this; + } public source(data: any, options?: ISourceCFG): ILayer { this.sourceOption = { diff --git a/packages/layers/src/heatmap/heatmap.ts b/packages/layers/src/heatmap/heatmap.ts index 747da07589..d03f2dd434 100644 --- a/packages/layers/src/heatmap/heatmap.ts +++ b/packages/layers/src/heatmap/heatmap.ts @@ -56,7 +56,8 @@ export default class HeatMapLayer extends BaseLayer { protected renderModels() { const { clear, useFramebuffer } = this.rendererService; - + const shapeAttr = this.styleAttributeService.getLayerStyleAttribute('shape'); + const shapeType = shapeAttr?.scale?.field || 'heatmap'; useFramebuffer(this.heatmapFramerBuffer, () => { clear({ color: [0, 0, 0, 0], @@ -66,17 +67,19 @@ export default class HeatMapLayer extends BaseLayer { }); this.drawIntensityMode(); }); - this.draw3DHeatMap(); + // this.draw3DHeatMap(); + shapeType === 'heatmap' ? this.drawColorMode(): this.draw3DHeatMap(); // this.drawIntensityMode(); return this; } protected buildModels() { + const shapeAttr = this.styleAttributeService.getLayerStyleAttribute('shape'); + const shapeType = shapeAttr?.scale?.field || 'heatmap'; this.registerBuiltinAttributes(this); this.intensityModel = this.buildHeatMapIntensity(); this.models = [this.intensityModel]; - // this.colorModel = this.buildHeatmapColor(); - this.colorModel = this.build3dHeatMap(); + this.colorModel = shapeType === 'heatmap' ? this.buildHeatmapColor(): this.build3dHeatMap(); this.models.push(this.colorModel); const { rampColors } = this.getStyleOptions(); const imageData = generateColorRamp(rampColors as IColorRamp); @@ -95,8 +98,8 @@ export default class HeatMapLayer extends BaseLayer { height, wrapS: gl.CLAMP_TO_EDGE, wrapT: gl.CLAMP_TO_EDGE, - min: gl.NEAREST, - mag: gl.NEAREST, + min: gl.LINEAR, + mag: gl.LINEAR, }), }); @@ -175,9 +178,9 @@ export default class HeatMapLayer extends BaseLayer { enable: true, func: { srcRGB: gl.ONE, - srcAlpha: 1, + srcAlpha: gl.ONE_MINUS_SRC_ALPHA, dstRGB: gl.ONE, - dstAlpha: 1, + dstAlpha: gl.ONE_MINUS_SRC_ALPHA, }, }, }); @@ -280,7 +283,7 @@ export default class HeatMapLayer extends BaseLayer { private build3dHeatMap() { const { getViewportSize } = this.rendererService; const { width, height } = getViewportSize(); - const triangulation = heatMap3DTriangulation(width / 4.0, height / 4.0); + const triangulation = heatMap3DTriangulation(width / 2.0, height / 2.0); this.shaderModuleService.registerModule('heatmap3dColor', { vs: heatmap3DVert, fs: heatmap3DFrag, diff --git a/packages/layers/src/heatmap/shaders/heatmap_3d_frag.glsl b/packages/layers/src/heatmap/shaders/heatmap_3d_frag.glsl index f3b00b62b1..48b48907ea 100644 --- a/packages/layers/src/heatmap/shaders/heatmap_3d_frag.glsl +++ b/packages/layers/src/heatmap/shaders/heatmap_3d_frag.glsl @@ -5,14 +5,13 @@ varying vec2 v_texCoord; varying float v_intensity; void main(){ - float intensity = texture2D(u_texture, v_texCoord).r; + + float intensity = texture2D(u_texture, v_texCoord).r; vec2 ramp_pos = vec2( fract(16.0 * (1.0 - v_intensity)), floor(16.0 * (1.0 - v_intensity)) / 16.0); // vec4 color = texture2D(u_colorTexture,vec2(0.5,1.0-intensity)); vec4 color = texture2D(u_colorTexture,ramp_pos); gl_FragColor = color; - // gl_FragColor.a = color.a * smoothstep(0.0, 0.01, v_intensity) * u_opacity; - // gl_FragColor.a = 0.2; - + gl_FragColor.a = color.a * smoothstep(0.1,0.2,intensity)* u_opacity; } diff --git a/packages/layers/src/heatmap/shaders/heatmap_3d_vert.glsl b/packages/layers/src/heatmap/shaders/heatmap_3d_vert.glsl index e00eec61a5..972323b636 100644 --- a/packages/layers/src/heatmap/shaders/heatmap_3d_vert.glsl +++ b/packages/layers/src/heatmap/shaders/heatmap_3d_vert.glsl @@ -40,6 +40,6 @@ void main() { v_intensity = texture2D(u_texture, v_texCoord).r; fh = toBezier(v_intensity, b).y; - gl_Position = project_common_position_to_clipspace(vec4(position.xy, v_intensity * 50., 1.0)); + gl_Position = project_common_position_to_clipspace(vec4(position.xy, fh * 50., 1.0)); } diff --git a/packages/layers/src/heatmap/shaders/heatmap_frag.glsl b/packages/layers/src/heatmap/shaders/heatmap_frag.glsl index 8e817872e3..a20d904c3b 100644 --- a/packages/layers/src/heatmap/shaders/heatmap_frag.glsl +++ b/packages/layers/src/heatmap/shaders/heatmap_frag.glsl @@ -2,15 +2,16 @@ uniform sampler2D u_texture; uniform sampler2D u_colorTexture; uniform float u_opacity; varying vec2 v_texCoord; +varying float v_intensity; void main(){ - float intensity = texture2D(u_texture, v_texCoord).r; + float intensity = texture2D(u_texture, v_texCoord).r; vec2 ramp_pos = vec2( fract(16.0 * (1.0 - intensity)), floor(16.0 * (1.0 - intensity)) / 16.0); // vec4 color = texture2D(u_colorTexture,vec2(0.5,1.0-intensity)); vec4 color = texture2D(u_colorTexture,ramp_pos); gl_FragColor = color; - gl_FragColor.a = color.a * smoothstep(0.,0.01,intensity) * u_opacity; + gl_FragColor.a = color.a * smoothstep(0.,0.05,intensity) * u_opacity; } diff --git a/packages/layers/src/heatmap/shaders/heatmap_vert.glsl b/packages/layers/src/heatmap/shaders/heatmap_vert.glsl index 177ab3049c..cfa03fe386 100644 --- a/packages/layers/src/heatmap/shaders/heatmap_vert.glsl +++ b/packages/layers/src/heatmap/shaders/heatmap_vert.glsl @@ -3,8 +3,9 @@ attribute vec3 a_Position; attribute vec2 a_Uv; uniform sampler2D u_texture; varying vec2 v_texCoord; +varying float v_intensity; void main() { v_texCoord = a_Uv; - float intensity = texture2D(u_texture, v_texCoord).r; - gl_Position = vec4(a_Position.xy,intensity -0.5, 1.); + v_intensity = texture2D(u_texture, v_texCoord).r; + gl_Position = vec4(a_Position.xy, 0, 1.); } diff --git a/packages/layers/src/plugins/FeatureScalePlugin.ts b/packages/layers/src/plugins/FeatureScalePlugin.ts index 6979b15bd9..f8759ff394 100644 --- a/packages/layers/src/plugins/FeatureScalePlugin.ts +++ b/packages/layers/src/plugins/FeatureScalePlugin.ts @@ -94,14 +94,21 @@ export default class FeatureScalePlugin implements ILayerPlugin { if (scales.some((scale) => scale.type === StyleScaleType.VARIABLE)) { attributeScale.type = StyleScaleType.VARIABLE; scales.forEach((scale) => { - // 如果设置了回调干啥这不需要设置让range - if (!attributeScale.callback && attributeScale.values.length > 0) { - scale.scale.range(attributeScale.values); + // 如果设置了回调, 这不需要设置让range + if (!attributeScale.callback) { + if(attributeScale.values) { + scale.scale.range(attributeScale.values); + } else if(scale.option?.type==='cat') { + + // 如果没有设置初值且 类型为cat,range ==domain; + scale.scale.range(scale.option.domain); + } + } }); } else { // 设置attribute 常量值 常量直接在value取值 - + attributeScale.type = StyleScaleType.CONSTANT; attributeScale.values = scales.map((scale, index) => { return scale.scale(attributeScale.names[index]); }); @@ -167,6 +174,7 @@ export default class FeatureScalePlugin implements ILayerPlugin { option: scaleOption, }; if (!data || !data.length) { + if (scaleOption && scaleOption.type) { styleScale.scale = this.createDefaultScale(scaleOption); } else { diff --git a/packages/layers/src/point/text.ts b/packages/layers/src/point/text.ts index d31753e987..9ee0a9c28d 100644 --- a/packages/layers/src/point/text.ts +++ b/packages/layers/src/point/text.ts @@ -164,14 +164,14 @@ export default class TextLayer extends BaseLayer { }); } - private iniTextFont() { + private initTextFont() { const { fontWeight = 'normal', fontFamily } = this.getStyleOptions(); const data = this.getEncodedData(); const characterSet: string[] = []; data.forEach((item: IEncodeFeature) => { - let { text = '' } = item; - text = text.toString(); - for (const char of text) { + let { shape = '' } = item; + shape = shape.toString(); + for (const char of shape) { // 去重 if (characterSet.indexOf(char) === -1) { characterSet.push(char); diff --git a/packages/renderer/src/regl/index.ts b/packages/renderer/src/regl/index.ts index 0683d816e0..d5ab2ec49d 100644 --- a/packages/renderer/src/regl/index.ts +++ b/packages/renderer/src/regl/index.ts @@ -46,7 +46,7 @@ export default class ReglRendererService implements IRendererService { alpha: true, // use TAA instead of MSAA // @see https://www.khronos.org/registry/webgl/specs/1.0/#5.2.1 - antialias: false, + antialias: true, premultipliedAlpha: true, }, // TODO: use extensions