@antv/l7-layers 2.8.34 → 2.8.37
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/es/Geometry/index.d.ts +1 -1
- package/es/Geometry/index.js +4 -1
- package/es/Geometry/index.js.map +1 -1
- package/es/Geometry/models/billboard.d.ts +26 -0
- package/es/Geometry/models/billboard.js +213 -0
- package/es/Geometry/models/billboard.js.map +1 -0
- package/es/Geometry/models/index.d.ts +1 -1
- package/es/Geometry/models/index.js +3 -1
- package/es/Geometry/models/index.js.map +1 -1
- package/es/Geometry/models/sprite.js +2 -2
- package/es/core/BaseLayer.d.ts +2 -2
- package/es/core/BaseLayer.js.map +1 -1
- package/es/core/LayerGroup.d.ts +2 -1
- package/es/core/LayerGroup.js +5 -0
- package/es/core/LayerGroup.js.map +1 -1
- package/es/core/interface.d.ts +29 -2
- package/es/core/interface.js.map +1 -1
- package/es/image/models/image.js.map +1 -1
- package/es/index.d.ts +2 -2
- package/es/index.js +2 -2
- package/es/index.js.map +1 -1
- package/es/line/models/arc.js +4 -4
- package/es/line/models/arc.js.map +1 -1
- package/es/line/models/arc_3d.js +4 -5
- package/es/line/models/arc_3d.js.map +1 -1
- package/es/line/models/arcmini.js +5 -5
- package/es/line/models/arcmini.js.map +1 -1
- package/es/line/models/great_circle.js +3 -3
- package/es/line/models/great_circle.js.map +1 -1
- package/es/line/models/line.js +3 -3
- package/es/line/models/line.js.map +1 -1
- package/es/line/models/linearline.js +3 -3
- package/es/line/models/linearline.js.map +1 -1
- package/es/line/models/simpleLine.js +8 -8
- package/es/line/models/simpleLine.js.map +1 -1
- package/es/line/models/wall.js +5 -5
- package/es/line/models/wall.js.map +1 -1
- package/es/mask/index.d.ts +1 -4
- package/es/mask/index.js.map +1 -1
- package/es/mask/models/fill.js.map +1 -1
- package/es/plugins/DataMappingPlugin.d.ts +1 -0
- package/es/plugins/DataMappingPlugin.js +17 -9
- package/es/plugins/DataMappingPlugin.js.map +1 -1
- package/es/plugins/FeatureScalePlugin.d.ts +1 -2
- package/es/plugins/FeatureScalePlugin.js +42 -33
- package/es/plugins/FeatureScalePlugin.js.map +1 -1
- package/es/plugins/ShaderUniformPlugin.d.ts +1 -0
- package/es/plugins/ShaderUniformPlugin.js +12 -0
- package/es/plugins/ShaderUniformPlugin.js.map +1 -1
- package/es/point/models/extrude.js +3 -4
- package/es/point/models/extrude.js.map +1 -1
- package/es/point/models/fill.js +3 -4
- package/es/point/models/fill.js.map +1 -1
- package/es/point/models/fillmage.d.ts +1 -1
- package/es/point/models/fillmage.js +6 -21
- package/es/point/models/fillmage.js.map +1 -1
- package/es/point/models/icon-font.js +1 -1
- package/es/point/models/image.js +4 -4
- package/es/point/models/image.js.map +1 -1
- package/es/point/models/normal.js +1 -2
- package/es/point/models/normal.js.map +1 -1
- package/es/point/models/radar.js +5 -18
- package/es/point/models/radar.js.map +1 -1
- package/es/point/models/simplePoint.js +5 -6
- package/es/point/models/simplePoint.js.map +1 -1
- package/es/point/models/text.js +4 -4
- package/es/point/models/text.js.map +1 -1
- package/es/polygon/models/extrude.js +3 -4
- package/es/polygon/models/extrude.js.map +1 -1
- package/es/polygon/models/fill.d.ts +1 -0
- package/es/polygon/models/fill.js +37 -12
- package/es/polygon/models/fill.js.map +1 -1
- package/es/polygon/models/ocean.js +3 -4
- package/es/polygon/models/ocean.js.map +1 -1
- package/es/polygon/models/water.js +3 -4
- package/es/polygon/models/water.js.map +1 -1
- package/es/raster/index.d.ts +3 -3
- package/es/raster/index.js +16 -6
- package/es/raster/index.js.map +1 -1
- package/es/raster/models/index.d.ts +1 -1
- package/es/raster/models/index.js +3 -1
- package/es/raster/models/index.js.map +1 -1
- package/es/raster/models/raste-tile.d.ts +23 -0
- package/es/raster/models/raste-tile.js +285 -0
- package/es/raster/models/raste-tile.js.map +1 -0
- package/es/raster/models/raster.js +2 -0
- package/es/raster/models/raster.js.map +1 -1
- package/es/wind/index.d.ts +1 -17
- package/es/wind/index.js.map +1 -1
- package/es/wind/models/utils.d.ts +12 -12
- package/es/wind/models/utils.js +6 -5
- package/es/wind/models/utils.js.map +1 -1
- package/es/wind/models/wind.js.map +1 -1
- package/es/wind/models/windRender.js.map +1 -1
- package/lib/Geometry/index.js +4 -1
- package/lib/Geometry/index.js.map +1 -1
- package/lib/Geometry/models/billboard.js +227 -0
- package/lib/Geometry/models/billboard.js.map +1 -0
- package/lib/Geometry/models/index.js +4 -1
- package/lib/Geometry/models/index.js.map +1 -1
- package/lib/Geometry/models/sprite.js +2 -2
- package/lib/core/BaseLayer.js.map +1 -1
- package/lib/core/LayerGroup.js +5 -0
- package/lib/core/LayerGroup.js.map +1 -1
- package/lib/core/interface.js.map +1 -1
- package/lib/image/models/image.js.map +1 -1
- package/lib/index.js +29 -8
- package/lib/index.js.map +1 -1
- package/lib/line/models/arc.js +4 -5
- package/lib/line/models/arc.js.map +1 -1
- package/lib/line/models/arc_3d.js +4 -6
- package/lib/line/models/arc_3d.js.map +1 -1
- package/lib/line/models/arcmini.js +5 -6
- package/lib/line/models/arcmini.js.map +1 -1
- package/lib/line/models/great_circle.js +3 -4
- package/lib/line/models/great_circle.js.map +1 -1
- package/lib/line/models/line.js +3 -4
- package/lib/line/models/line.js.map +1 -1
- package/lib/line/models/linearline.js +3 -4
- package/lib/line/models/linearline.js.map +1 -1
- package/lib/line/models/simpleLine.js +8 -9
- package/lib/line/models/simpleLine.js.map +1 -1
- package/lib/line/models/wall.js +5 -6
- package/lib/line/models/wall.js.map +1 -1
- package/lib/mask/index.js.map +1 -1
- package/lib/mask/models/fill.js.map +1 -1
- package/lib/plugins/DataMappingPlugin.js +17 -9
- package/lib/plugins/DataMappingPlugin.js.map +1 -1
- package/lib/plugins/FeatureScalePlugin.js +43 -33
- package/lib/plugins/FeatureScalePlugin.js.map +1 -1
- package/lib/plugins/ShaderUniformPlugin.js +12 -0
- package/lib/plugins/ShaderUniformPlugin.js.map +1 -1
- package/lib/point/models/extrude.js +3 -5
- package/lib/point/models/extrude.js.map +1 -1
- package/lib/point/models/fill.js +3 -5
- package/lib/point/models/fill.js.map +1 -1
- package/lib/point/models/fillmage.js +7 -23
- package/lib/point/models/fillmage.js.map +1 -1
- package/lib/point/models/icon-font.js +1 -1
- package/lib/point/models/image.js +4 -5
- package/lib/point/models/image.js.map +1 -1
- package/lib/point/models/normal.js +1 -3
- package/lib/point/models/normal.js.map +1 -1
- package/lib/point/models/radar.js +5 -19
- package/lib/point/models/radar.js.map +1 -1
- package/lib/point/models/simplePoint.js +5 -7
- package/lib/point/models/simplePoint.js.map +1 -1
- package/lib/point/models/text.js +4 -5
- package/lib/point/models/text.js.map +1 -1
- package/lib/polygon/models/extrude.js +3 -5
- package/lib/polygon/models/extrude.js.map +1 -1
- package/lib/polygon/models/fill.js +37 -13
- package/lib/polygon/models/fill.js.map +1 -1
- package/lib/polygon/models/ocean.js +3 -5
- package/lib/polygon/models/ocean.js.map +1 -1
- package/lib/polygon/models/water.js +3 -5
- package/lib/polygon/models/water.js.map +1 -1
- package/lib/raster/index.js +16 -6
- package/lib/raster/index.js.map +1 -1
- package/lib/raster/models/index.js +4 -1
- package/lib/raster/models/index.js.map +1 -1
- package/lib/raster/models/raste-tile.js +294 -0
- package/lib/raster/models/raste-tile.js.map +1 -0
- package/lib/raster/models/raster.js +2 -0
- package/lib/raster/models/raster.js.map +1 -1
- package/lib/wind/index.js.map +1 -1
- package/lib/wind/models/utils.js +6 -5
- package/lib/wind/models/utils.js.map +1 -1
- package/lib/wind/models/wind.js.map +1 -1
- package/lib/wind/models/windRender.js.map +1 -1
- package/package.json +7 -6
- package/es/imagetile/index.d.ts +0 -22
- package/es/imagetile/index.js +0 -82
- package/es/imagetile/index.js.map +0 -1
- package/es/imagetile/models/imagetile.d.ts +0 -12
- package/es/imagetile/models/imagetile.js +0 -133
- package/es/imagetile/models/imagetile.js.map +0 -1
- package/es/imagetile/models/index.d.ts +0 -5
- package/es/imagetile/models/index.js +0 -6
- package/es/imagetile/models/index.js.map +0 -1
- package/es/imagetile/utils/ImageTile.d.ts +0 -20
- package/es/imagetile/utils/ImageTile.js +0 -92
- package/es/imagetile/utils/ImageTile.js.map +0 -1
- package/es/imagetile/utils/Tile.d.ts +0 -27
- package/es/imagetile/utils/Tile.js +0 -313
- package/es/imagetile/utils/Tile.js.map +0 -1
- package/es/imagetile/utils/lruCache.d.ts +0 -20
- package/es/imagetile/utils/lruCache.js +0 -105
- package/es/imagetile/utils/lruCache.js.map +0 -1
- package/es/imagetile/utils/tileCache.d.ts +0 -8
- package/es/imagetile/utils/tileCache.js +0 -50
- package/es/imagetile/utils/tileCache.js.map +0 -1
- package/lib/imagetile/index.js +0 -95
- package/lib/imagetile/index.js.map +0 -1
- package/lib/imagetile/models/imagetile.js +0 -146
- package/lib/imagetile/models/imagetile.js.map +0 -1
- package/lib/imagetile/models/index.js +0 -17
- package/lib/imagetile/models/index.js.map +0 -1
- package/lib/imagetile/utils/ImageTile.js +0 -101
- package/lib/imagetile/utils/ImageTile.js.map +0 -1
- package/lib/imagetile/utils/Tile.js +0 -316
- package/lib/imagetile/utils/Tile.js.map +0 -1
- package/lib/imagetile/utils/lruCache.js +0 -109
- package/lib/imagetile/utils/lruCache.js.map +0 -1
- package/lib/imagetile/utils/tileCache.js +0 -58
- package/lib/imagetile/utils/tileCache.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/wind/models/windRender.ts"],"names":["getColorRamp","colors","canvas","document","createElement","ctx","getContext","width","height","gradient","createLinearGradient","Object","keys","stop","addColorStop","fillStyle","fillRect","Uint8Array","getImageData","data","bindAttribute","gl","buffer","attribute","numComponents","bindBuffer","ARRAY_BUFFER","enableVertexAttribArray","vertexAttribPointer","FLOAT","bindFramebuffer","framebuffer","texture","FRAMEBUFFER","framebufferTexture2D","COLOR_ATTACHMENT0","TEXTURE_2D","Wind","options","glContext","imageWidth","imageHeight","fadeOpacity","speedFactor","dropRate","dropRateBump","rampColors","init","drawProgram","glUtils","createProgram","drawVert","drawFrag","fullScreenProgram","fullScreenVert","fullScreenFrag","updateProgram","updateVert","updateFrag","quadBuffer","createBuffer","Float32Array","createFramebuffer","colorRampTexture","createTexture","LINEAR","emptyPixels","backgroundTexture","NEAREST","screenTexture","particleRes","particleStateResolution","Math","ceil","sqrt","numParticles","numParticlesSize","particleState","i","length","floor","random","particleStateTexture0","particleStateTexture1","particleIndices","i$1","particleIndexBuffer","windData","windTexture","createDataTexture","image","num","uMin","uMax","vMin","vMax","isColorChanged","deleteTexture","item","key","Number","bindTexture","drawScreen","updateParticles","d","pixels","w","h","viewport","drawFullTexture","drawParticles","disable","BLEND","readPixels","RGBA","UNSIGNED_BYTE","temp","opacity","program","useProgram","a_pos","uniform1i","u_screen","uniform1f","u_opacity","drawArrays","TRIANGLES","a_index","u_wind","u_particles","u_color_ramp","u_particles_res","uniform2f","u_wind_min","u_wind_max","POINTS","u_rand_seed","u_wind_res","u_speed_factor","u_drop_rate","u_drop_rate_bump","deleteBuffer","deleteFramebuffer","deleteShader","vertexShader","fragmentShader","deleteProgram"],"mappings":"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","sourcesContent":["import * as glUtils from './utils';\nimport {\n drawFrag,\n drawVert,\n fullScreenFrag,\n fullScreenVert,\n updateFrag,\n updateVert,\n} from './windShader';\n\nfunction getColorRamp(colors: { [key: number]: string }) {\n let canvas = document.createElement('canvas') as HTMLCanvasElement;\n const ctx = canvas.getContext('2d') as CanvasRenderingContext2D;\n\n canvas.width = 256;\n canvas.height = 1;\n\n const gradient = ctx.createLinearGradient(0, 0, 256, 0);\n for (const stop of Object.keys(colors)) {\n gradient.addColorStop(+stop, colors[+stop]);\n }\n\n ctx.fillStyle = gradient;\n ctx.fillRect(0, 0, 256, 1);\n\n // @ts-ignore dispose canvas element\n canvas = null;\n\n return new Uint8Array(ctx.getImageData(0, 0, 256, 1).data);\n}\n\nfunction bindAttribute(\n gl: WebGLRenderingContext,\n buffer: any,\n attribute: any,\n numComponents: any,\n) {\n gl.bindBuffer(gl.ARRAY_BUFFER, buffer);\n gl.enableVertexAttribArray(attribute);\n gl.vertexAttribPointer(attribute, numComponents, gl.FLOAT, false, 0, 0);\n}\n\nfunction bindFramebuffer(\n gl: WebGLRenderingContext,\n framebuffer: any,\n texture: any,\n) {\n gl.bindFramebuffer(gl.FRAMEBUFFER, framebuffer);\n if (texture) {\n gl.framebufferTexture2D(\n gl.FRAMEBUFFER,\n gl.COLOR_ATTACHMENT0,\n gl.TEXTURE_2D,\n texture,\n 0,\n );\n }\n}\n\nexport interface IWindData {\n uMin: number;\n uMax: number;\n vMin: number;\n vMax: number;\n image: HTMLImageElement;\n}\n\nexport interface IWind {\n width: number;\n height: number;\n\n fadeOpacity: number;\n speedFactor: number;\n dropRate: number;\n dropRateBump: number;\n\n setWind: (windData: IWindData) => void;\n draw: () => { d: Uint8Array; w: number; h: number };\n updateParticelNum: (num: number) => void;\n updateWindDir: (\n uMin: number,\n uMax: number,\n vMin: number,\n vMax: number,\n ) => void;\n updateColorRampTexture: (rampColors: { [key: number]: string }) => void;\n\n reSize: (width: number, height: number) => void;\n destroy: () => void;\n}\n\nexport interface IWindProps {\n glContext: WebGLRenderingContext;\n imageWidth: number;\n imageHeight: number;\n fadeOpacity: number;\n speedFactor: number;\n dropRate: number;\n dropRateBump: number;\n rampColors: { [key: number]: string };\n}\n\nexport class Wind {\n public width: number = 512;\n public height: number = 512;\n\n public pixels: Uint8Array;\n\n public fadeOpacity: number;\n public speedFactor: number;\n public dropRate: number;\n public dropRateBump: number;\n private gl: WebGLRenderingContext;\n private drawProgram: WebGLProgram;\n private fullScreenProgram: WebGLProgram;\n private updateProgram: WebGLProgram;\n\n private rampColors: { [key: number]: string };\n\n private numParticles: number = 65536;\n private numParticlesSize: number;\n private particleStateResolution: number;\n\n private quadBuffer: WebGLBuffer | null;\n private particleIndexBuffer: WebGLBuffer | null;\n\n private framebuffer: WebGLFramebuffer | null;\n\n private colorRampTexture: WebGLTexture | null;\n private backgroundTexture: WebGLTexture | null;\n private screenTexture: WebGLTexture | null;\n private particleStateTexture0: WebGLTexture | null;\n private particleStateTexture1: WebGLTexture | null;\n private windTexture: WebGLTexture | null;\n\n private windData: IWindData;\n\n constructor(options: IWindProps) {\n this.gl = options.glContext;\n this.width = options.imageWidth;\n this.height = options.imageHeight;\n this.fadeOpacity = options.fadeOpacity;\n this.speedFactor = options.speedFactor;\n this.dropRate = options.dropRate;\n this.dropRateBump = options.dropRateBump;\n\n this.rampColors = options.rampColors;\n this.init();\n }\n\n public init() {\n const gl = this.gl;\n\n this.fadeOpacity = 0.996; // how fast the particle trails fade on each frame\n this.speedFactor = 0.25; // how fast the particles move\n this.dropRate = 0.003; // how often the particles move to a random place\n this.dropRateBump = 0.01; // drop rate increase relative to individual particle speed\n\n this.drawProgram = glUtils.createProgram(gl, drawVert, drawFrag);\n this.fullScreenProgram = glUtils.createProgram(\n gl,\n fullScreenVert,\n fullScreenFrag,\n );\n this.updateProgram = glUtils.createProgram(gl, updateVert, updateFrag);\n\n this.quadBuffer = glUtils.createBuffer(\n gl,\n new Float32Array([0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1]),\n );\n\n this.framebuffer = gl.createFramebuffer();\n\n this.colorRampTexture = glUtils.createTexture(\n this.gl,\n this.gl.LINEAR,\n getColorRamp(this.rampColors),\n 16,\n 16,\n );\n\n const emptyPixels = new Uint8Array(this.width * this.height * 4);\n\n // screen textures to hold the drawn screen for the previous and the current frame\n\n this.backgroundTexture = glUtils.createTexture(\n gl,\n gl.NEAREST,\n emptyPixels,\n this.width,\n this.height,\n );\n this.screenTexture = glUtils.createTexture(\n gl,\n gl.NEAREST,\n emptyPixels,\n this.width,\n this.height,\n );\n\n // we create a square texture where each pixel will hold a particle position encoded as RGBA\n const particleRes = (this.particleStateResolution = Math.ceil(\n Math.sqrt(this.numParticles),\n ));\n // particleRes size\n this.numParticlesSize = particleRes * particleRes;\n\n const particleState = new Uint8Array(this.numParticlesSize * 4);\n for (let i = 0; i < particleState.length; i++) {\n particleState[i] = Math.floor(Math.random() * 256); // randomize the initial particle positions\n }\n // textures to hold the particle state for the current and the next frame\n this.particleStateTexture0 = glUtils.createTexture(\n gl,\n gl.NEAREST,\n particleState,\n particleRes,\n particleRes,\n );\n this.particleStateTexture1 = glUtils.createTexture(\n gl,\n gl.NEAREST,\n particleState,\n particleRes,\n particleRes,\n );\n\n const particleIndices = new Float32Array(this.numParticlesSize);\n for (let i$1 = 0; i$1 < this.numParticlesSize; i$1++) {\n particleIndices[i$1] = i$1;\n }\n this.particleIndexBuffer = glUtils.createBuffer(gl, particleIndices);\n }\n\n public setWind(windData: IWindData) {\n this.windData = windData;\n this.windTexture = glUtils.createDataTexture(\n this.gl,\n this.gl.LINEAR,\n windData.image,\n );\n }\n\n /**\n * 更新风场粒子数量\n * @param num\n */\n public updateParticelNum(num: number) {\n const gl = this.gl;\n if (num !== this.numParticles) {\n this.numParticles = num; // params number\n\n // we create a square texture where each pixel will hold a particle position encoded as RGBA\n const particleRes = (this.particleStateResolution = Math.ceil(\n Math.sqrt(this.numParticles),\n ));\n this.numParticlesSize = particleRes * particleRes;\n\n const particleState = new Uint8Array(this.numParticlesSize * 4);\n for (let i = 0; i < particleState.length; i++) {\n particleState[i] = Math.floor(Math.random() * 256); // randomize the initial particle positions\n }\n // textures to hold the particle state for the current and the next frame\n this.particleStateTexture0 = glUtils.createTexture(\n gl,\n gl.NEAREST,\n particleState,\n particleRes,\n particleRes,\n );\n this.particleStateTexture1 = glUtils.createTexture(\n gl,\n gl.NEAREST,\n particleState,\n particleRes,\n particleRes,\n );\n\n const particleIndices = new Float32Array(this.numParticlesSize);\n for (let i$1 = 0; i$1 < this.numParticlesSize; i$1++) {\n particleIndices[i$1] = i$1;\n }\n this.particleIndexBuffer = glUtils.createBuffer(gl, particleIndices);\n }\n }\n\n /**\n * 更新风场风向风速\n * @param uMin\n * @param uMax\n * @param vMin\n * @param vMax\n */\n public updateWindDir(uMin: number, uMax: number, vMin: number, vMax: number) {\n this.windData.uMin = uMin;\n this.windData.uMax = uMax;\n this.windData.vMin = vMin;\n this.windData.vMax = vMax;\n }\n\n /**\n * update rampColors\n * @param rampColors\n */\n public updateColorRampTexture(rampColors: { [key: number]: string }) {\n if (this.isColorChanged(rampColors)) {\n this.rampColors = rampColors;\n\n const gl = this.gl;\n gl.deleteTexture(this.colorRampTexture);\n this.colorRampTexture = glUtils.createTexture(\n gl,\n gl.LINEAR,\n getColorRamp(rampColors),\n 16,\n 16,\n );\n }\n }\n\n public isColorChanged(rampColors: { [key: number]: string }): boolean {\n const keys = Object.keys(rampColors);\n for (const item of keys) {\n const key = Number(item);\n // exist new key -> color need update\n if (!this.rampColors[key]) {\n return true;\n }\n // value changed -> color need update\n if (this.rampColors[key] && this.rampColors[key] !== rampColors[key]) {\n return true;\n }\n }\n return false;\n }\n\n public reSize(width: number, height: number) {\n if (width !== this.width || height !== this.height) {\n const gl = this.gl;\n gl.deleteTexture(this.backgroundTexture);\n gl.deleteTexture(this.screenTexture);\n\n this.width = width;\n this.height = height;\n const emptyPixels = new Uint8Array(width * height * 4);\n // screen textures to hold the drawn screen for the previous and the current frame\n this.backgroundTexture = glUtils.createTexture(\n gl,\n gl.NEAREST,\n emptyPixels,\n width,\n height,\n );\n this.screenTexture = glUtils.createTexture(\n gl,\n gl.NEAREST,\n emptyPixels,\n width,\n height,\n );\n }\n }\n\n public draw() {\n if (this.windData?.image) {\n const gl = this.gl;\n\n glUtils.bindTexture(gl, this.windTexture, 0);\n glUtils.bindTexture(gl, this.particleStateTexture0, 1);\n\n this.drawScreen(); // draw Particles into framebuffer\n this.updateParticles();\n\n return { d: this.pixels, w: this.width, h: this.height };\n } else {\n return { d: new Uint8Array([0, 0, 0, 0]), w: 1, h: 1 };\n }\n }\n\n public drawScreen() {\n const gl = this.gl;\n\n // draw the screen into a temporary framebuffer to retain it as the background on the next frame\n bindFramebuffer(gl, this.framebuffer, this.screenTexture);\n\n gl.viewport(0, 0, this.width, this.height);\n\n this.drawFullTexture(this.backgroundTexture, this.fadeOpacity);\n this.drawParticles();\n\n gl.disable(gl.BLEND);\n\n this.pixels = new Uint8Array(4 * this.width * this.height);\n gl.readPixels(\n 0,\n 0,\n this.width,\n this.height,\n gl.RGBA,\n gl.UNSIGNED_BYTE,\n this.pixels,\n );\n\n bindFramebuffer(gl, null, null);\n gl.viewport(0, 0, this.gl.canvas.width, this.gl.canvas.height);\n\n // save the current screen as the background for the next frame\n const temp = this.backgroundTexture;\n this.backgroundTexture = this.screenTexture;\n this.screenTexture = temp;\n }\n\n public drawFullTexture(texture: any, opacity: number) {\n const gl = this.gl;\n const program = this.fullScreenProgram as any;\n gl.useProgram(program);\n\n // bindAttribute(gl, this.quadBuffer, program.a_pos, 2);\n\n gl.bindBuffer(gl.ARRAY_BUFFER, this.quadBuffer);\n gl.vertexAttribPointer(program.a_pos, 2, gl.FLOAT, false, 0, 0);\n gl.enableVertexAttribArray(program.a_pos);\n\n gl.bindBuffer(gl.ARRAY_BUFFER, null);\n\n glUtils.bindTexture(gl, texture, 2);\n gl.uniform1i(program.u_screen, 2);\n gl.uniform1f(program.u_opacity, opacity);\n\n gl.drawArrays(gl.TRIANGLES, 0, 6);\n // gl.drawArrays(gl.POINTS, 0, 6);\n }\n\n public drawParticles() {\n const gl = this.gl;\n const program = this.drawProgram as any;\n gl.useProgram(program);\n\n bindAttribute(gl, this.particleIndexBuffer, program.a_index, 1);\n glUtils.bindTexture(gl, this.colorRampTexture, 2);\n\n gl.uniform1i(program.u_wind, 0);\n gl.uniform1i(program.u_particles, 1);\n gl.uniform1i(program.u_color_ramp, 2);\n\n gl.uniform1f(program.u_particles_res, this.particleStateResolution);\n gl.uniform2f(program.u_wind_min, this.windData.uMin, this.windData.vMin);\n gl.uniform2f(program.u_wind_max, this.windData.uMax, this.windData.vMax);\n\n gl.drawArrays(gl.POINTS, 0, this.numParticlesSize);\n }\n\n public updateParticles() {\n const gl = this.gl;\n bindFramebuffer(gl, this.framebuffer, this.particleStateTexture1);\n gl.viewport(\n 0,\n 0,\n this.particleStateResolution,\n this.particleStateResolution,\n );\n\n const program = this.updateProgram as any;\n gl.useProgram(program);\n\n bindAttribute(gl, this.quadBuffer, program.a_pos, 2);\n\n gl.uniform1i(program.u_wind, 0);\n gl.uniform1i(program.u_particles, 1);\n\n gl.uniform1f(program.u_rand_seed, Math.random());\n gl.uniform2f(\n program.u_wind_res,\n this.windData.image.width * 2,\n this.windData.image.height * 2,\n );\n gl.uniform2f(program.u_wind_min, this.windData.uMin, this.windData.vMin);\n gl.uniform2f(program.u_wind_max, this.windData.uMax, this.windData.vMax);\n gl.uniform1f(program.u_speed_factor, this.speedFactor);\n gl.uniform1f(program.u_drop_rate, this.dropRate);\n gl.uniform1f(program.u_drop_rate_bump, this.dropRateBump);\n\n gl.drawArrays(gl.TRIANGLES, 0, 6);\n\n // swap the particle state textures so the new one becomes the current one\n const temp = this.particleStateTexture0;\n this.particleStateTexture0 = this.particleStateTexture1;\n this.particleStateTexture1 = temp;\n\n bindFramebuffer(gl, null, null);\n\n // gl.viewport(0, 0, this.gl.canvas.width, this.gl.canvas.height);\n }\n\n public destroy() {\n // private drawProgram: WebGLProgram;\n // private fullScreenProgram: WebGLProgram;\n // private updateProgram: WebGLProgram;\n\n // private quadBuffer: WebGLBuffer | null;\n // private particleIndexBuffer: WebGLBuffer | null;\n\n // private framebuffer: WebGLFramebuffer | null;\n\n // private colorRampTexture: WebGLTexture | null;\n // private backgroundTexture: WebGLTexture | null;\n // private screenTexture: WebGLTexture | null;\n // private particleStateTexture0: WebGLTexture | null;\n // private particleStateTexture1: WebGLTexture | null;\n // private windTexture: WebGLTexture | null;\n\n this.gl.deleteBuffer(this.quadBuffer);\n this.gl.deleteBuffer(this.particleIndexBuffer);\n\n this.gl.deleteFramebuffer(this.framebuffer);\n\n // @ts-ignore\n this.gl.deleteShader(this.drawProgram.vertexShader);\n // @ts-ignore\n this.gl.deleteShader(this.drawProgram.fragmentShader);\n this.gl.deleteProgram(this.drawProgram);\n\n // @ts-ignore\n this.gl.deleteShader(this.fullScreenProgram.vertexShader);\n // @ts-ignore\n this.gl.deleteShader(this.fullScreenProgram.fragmentShader);\n this.gl.deleteProgram(this.fullScreenProgram);\n\n // @ts-ignore\n this.gl.deleteShader(this.updateProgram.vertexShader);\n // @ts-ignore\n this.gl.deleteShader(this.updateProgram.fragmentShader);\n this.gl.deleteProgram(this.updateProgram);\n\n this.gl.deleteTexture(this.colorRampTexture);\n this.gl.deleteTexture(this.backgroundTexture);\n this.gl.deleteTexture(this.screenTexture);\n this.gl.deleteTexture(this.particleStateTexture0);\n this.gl.deleteTexture(this.particleStateTexture1);\n this.gl.deleteTexture(this.windTexture);\n }\n}\n"],"file":"windRender.js"}
|
|
1
|
+
{"version":3,"sources":["../../../src/wind/models/windRender.ts"],"names":["getColorRamp","colors","canvas","document","createElement","ctx","getContext","width","height","gradient","createLinearGradient","Object","keys","stop","addColorStop","fillStyle","fillRect","Uint8Array","getImageData","data","bindAttribute","gl","buffer","attribute","numComponents","bindBuffer","ARRAY_BUFFER","enableVertexAttribArray","vertexAttribPointer","FLOAT","bindFramebuffer","framebuffer","texture","FRAMEBUFFER","framebufferTexture2D","COLOR_ATTACHMENT0","TEXTURE_2D","Wind","options","glContext","imageWidth","imageHeight","fadeOpacity","speedFactor","dropRate","dropRateBump","rampColors","init","drawProgram","glUtils","createProgram","drawVert","drawFrag","fullScreenProgram","fullScreenVert","fullScreenFrag","updateProgram","updateVert","updateFrag","quadBuffer","createBuffer","Float32Array","createFramebuffer","colorRampTexture","createTexture","LINEAR","emptyPixels","backgroundTexture","NEAREST","screenTexture","particleRes","particleStateResolution","Math","ceil","sqrt","numParticles","numParticlesSize","particleState","i","length","floor","random","particleStateTexture0","particleStateTexture1","particleIndices","i$1","particleIndexBuffer","windData","windTexture","createDataTexture","image","num","uMin","uMax","vMin","vMax","isColorChanged","deleteTexture","item","key","Number","bindTexture","drawScreen","updateParticles","d","pixels","w","h","viewport","drawFullTexture","drawParticles","disable","BLEND","readPixels","RGBA","UNSIGNED_BYTE","temp","opacity","program","useProgram","a_pos","uniform1i","u_screen","uniform1f","u_opacity","drawArrays","TRIANGLES","a_index","u_wind","u_particles","u_color_ramp","u_particles_res","uniform2f","u_wind_min","u_wind_max","POINTS","u_rand_seed","u_wind_res","u_speed_factor","u_drop_rate","u_drop_rate_bump","deleteBuffer","deleteFramebuffer","deleteShader","vertexShader","fragmentShader","deleteProgram"],"mappings":"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","sourcesContent":["import * as glUtils from './utils';\nimport {\n drawFrag,\n drawVert,\n fullScreenFrag,\n fullScreenVert,\n updateFrag,\n updateVert,\n} from './windShader';\n\nfunction getColorRamp(colors: { [key: number]: string }) {\n let canvas = document.createElement('canvas') as HTMLCanvasElement;\n const ctx = canvas.getContext('2d') as CanvasRenderingContext2D;\n\n canvas.width = 256;\n canvas.height = 1;\n\n const gradient = ctx.createLinearGradient(0, 0, 256, 0);\n for (const stop of Object.keys(colors)) {\n gradient.addColorStop(+stop, colors[+stop]);\n }\n\n ctx.fillStyle = gradient;\n ctx.fillRect(0, 0, 256, 1);\n\n // @ts-ignore dispose canvas element\n canvas = null;\n\n return new Uint8Array(ctx.getImageData(0, 0, 256, 1).data);\n}\n\nfunction bindAttribute(\n gl: WebGLRenderingContext,\n buffer: any,\n attribute: any,\n numComponents: any,\n) {\n gl.bindBuffer(gl.ARRAY_BUFFER, buffer);\n gl.enableVertexAttribArray(attribute);\n gl.vertexAttribPointer(attribute, numComponents, gl.FLOAT, false, 0, 0);\n}\n\nfunction bindFramebuffer(\n gl: WebGLRenderingContext,\n framebuffer: any,\n texture: any,\n) {\n gl.bindFramebuffer(gl.FRAMEBUFFER, framebuffer);\n if (texture) {\n gl.framebufferTexture2D(\n gl.FRAMEBUFFER,\n gl.COLOR_ATTACHMENT0,\n gl.TEXTURE_2D,\n texture,\n 0,\n );\n }\n}\n\nexport interface IWindData {\n uMin: number;\n uMax: number;\n vMin: number;\n vMax: number;\n image: HTMLImageElement;\n}\n\nexport interface IWind {\n width: number;\n height: number;\n\n fadeOpacity: number;\n speedFactor: number;\n dropRate: number;\n dropRateBump: number;\n\n setWind: (windData: IWindData) => void;\n draw: () => { d: Uint8Array; w: number; h: number };\n updateParticelNum: (num: number) => void;\n updateWindDir: (\n uMin: number,\n uMax: number,\n vMin: number,\n vMax: number,\n ) => void;\n updateColorRampTexture: (rampColors: { [key: number]: string }) => void;\n\n reSize: (width: number, height: number) => void;\n destroy: () => void;\n}\n\nexport interface IWindProps {\n glContext: WebGLRenderingContext;\n imageWidth: number;\n imageHeight: number;\n fadeOpacity: number;\n speedFactor: number;\n dropRate: number;\n dropRateBump: number;\n rampColors: { [key: number]: string };\n}\n\nexport class Wind {\n public width: number = 512;\n public height: number = 512;\n\n public pixels: Uint8Array;\n\n public fadeOpacity: number;\n public speedFactor: number;\n public dropRate: number;\n public dropRateBump: number;\n private gl: WebGLRenderingContext;\n private drawProgram: WebGLProgram;\n private fullScreenProgram: WebGLProgram;\n private updateProgram: WebGLProgram;\n\n private rampColors: { [key: number]: string };\n\n private numParticles: number = 65536;\n private numParticlesSize: number;\n private particleStateResolution: number;\n\n private quadBuffer: WebGLBuffer | null;\n private particleIndexBuffer: WebGLBuffer | null;\n\n private framebuffer: WebGLFramebuffer | null;\n\n private colorRampTexture: WebGLTexture | null;\n private backgroundTexture: WebGLTexture | null;\n private screenTexture: WebGLTexture | null;\n private particleStateTexture0: WebGLTexture | null;\n private particleStateTexture1: WebGLTexture | null;\n private windTexture: WebGLTexture | null;\n\n private windData: IWindData;\n\n constructor(options: IWindProps) {\n this.gl = options.glContext;\n this.width = options.imageWidth;\n this.height = options.imageHeight;\n this.fadeOpacity = options.fadeOpacity;\n this.speedFactor = options.speedFactor;\n this.dropRate = options.dropRate;\n this.dropRateBump = options.dropRateBump;\n\n this.rampColors = options.rampColors;\n this.init();\n }\n\n public init() {\n const gl = this.gl;\n\n this.fadeOpacity = 0.996; // how fast the particle trails fade on each frame\n this.speedFactor = 0.25; // how fast the particles move\n this.dropRate = 0.003; // how often the particles move to a random place\n this.dropRateBump = 0.01; // drop rate increase relative to individual particle speed\n\n this.drawProgram = glUtils.createProgram(\n gl,\n drawVert,\n drawFrag,\n ) as WebGLProgram;\n this.fullScreenProgram = glUtils.createProgram(\n gl,\n fullScreenVert,\n fullScreenFrag,\n ) as WebGLProgram;\n this.updateProgram = glUtils.createProgram(\n gl,\n updateVert,\n updateFrag,\n ) as WebGLProgram;\n\n this.quadBuffer = glUtils.createBuffer(\n gl,\n new Float32Array([0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1]),\n );\n\n this.framebuffer = gl.createFramebuffer();\n\n this.colorRampTexture = glUtils.createTexture(\n this.gl,\n this.gl.LINEAR,\n getColorRamp(this.rampColors),\n 16,\n 16,\n );\n\n const emptyPixels = new Uint8Array(this.width * this.height * 4);\n\n // screen textures to hold the drawn screen for the previous and the current frame\n\n this.backgroundTexture = glUtils.createTexture(\n gl,\n gl.NEAREST,\n emptyPixels,\n this.width,\n this.height,\n );\n this.screenTexture = glUtils.createTexture(\n gl,\n gl.NEAREST,\n emptyPixels,\n this.width,\n this.height,\n );\n\n // we create a square texture where each pixel will hold a particle position encoded as RGBA\n const particleRes = (this.particleStateResolution = Math.ceil(\n Math.sqrt(this.numParticles),\n ));\n // particleRes size\n this.numParticlesSize = particleRes * particleRes;\n\n const particleState = new Uint8Array(this.numParticlesSize * 4);\n for (let i = 0; i < particleState.length; i++) {\n particleState[i] = Math.floor(Math.random() * 256); // randomize the initial particle positions\n }\n // textures to hold the particle state for the current and the next frame\n this.particleStateTexture0 = glUtils.createTexture(\n gl,\n gl.NEAREST,\n particleState,\n particleRes,\n particleRes,\n );\n this.particleStateTexture1 = glUtils.createTexture(\n gl,\n gl.NEAREST,\n particleState,\n particleRes,\n particleRes,\n );\n\n const particleIndices = new Float32Array(this.numParticlesSize);\n for (let i$1 = 0; i$1 < this.numParticlesSize; i$1++) {\n particleIndices[i$1] = i$1;\n }\n this.particleIndexBuffer = glUtils.createBuffer(gl, particleIndices);\n }\n\n public setWind(windData: IWindData) {\n this.windData = windData;\n this.windTexture = glUtils.createDataTexture(\n this.gl,\n this.gl.LINEAR,\n windData.image,\n );\n }\n\n /**\n * 更新风场粒子数量\n * @param num\n */\n public updateParticelNum(num: number) {\n const gl = this.gl;\n if (num !== this.numParticles) {\n this.numParticles = num; // params number\n\n // we create a square texture where each pixel will hold a particle position encoded as RGBA\n const particleRes = (this.particleStateResolution = Math.ceil(\n Math.sqrt(this.numParticles),\n ));\n this.numParticlesSize = particleRes * particleRes;\n\n const particleState = new Uint8Array(this.numParticlesSize * 4);\n for (let i = 0; i < particleState.length; i++) {\n particleState[i] = Math.floor(Math.random() * 256); // randomize the initial particle positions\n }\n // textures to hold the particle state for the current and the next frame\n this.particleStateTexture0 = glUtils.createTexture(\n gl,\n gl.NEAREST,\n particleState,\n particleRes,\n particleRes,\n );\n this.particleStateTexture1 = glUtils.createTexture(\n gl,\n gl.NEAREST,\n particleState,\n particleRes,\n particleRes,\n );\n\n const particleIndices = new Float32Array(this.numParticlesSize);\n for (let i$1 = 0; i$1 < this.numParticlesSize; i$1++) {\n particleIndices[i$1] = i$1;\n }\n this.particleIndexBuffer = glUtils.createBuffer(gl, particleIndices);\n }\n }\n\n /**\n * 更新风场风向风速\n * @param uMin\n * @param uMax\n * @param vMin\n * @param vMax\n */\n public updateWindDir(uMin: number, uMax: number, vMin: number, vMax: number) {\n this.windData.uMin = uMin;\n this.windData.uMax = uMax;\n this.windData.vMin = vMin;\n this.windData.vMax = vMax;\n }\n\n /**\n * update rampColors\n * @param rampColors\n */\n public updateColorRampTexture(rampColors: { [key: number]: string }) {\n if (this.isColorChanged(rampColors)) {\n this.rampColors = rampColors;\n\n const gl = this.gl;\n gl.deleteTexture(this.colorRampTexture);\n this.colorRampTexture = glUtils.createTexture(\n gl,\n gl.LINEAR,\n getColorRamp(rampColors),\n 16,\n 16,\n );\n }\n }\n\n public isColorChanged(rampColors: { [key: number]: string }): boolean {\n const keys = Object.keys(rampColors);\n for (const item of keys) {\n const key = Number(item);\n // exist new key -> color need update\n if (!this.rampColors[key]) {\n return true;\n }\n // value changed -> color need update\n if (this.rampColors[key] && this.rampColors[key] !== rampColors[key]) {\n return true;\n }\n }\n return false;\n }\n\n public reSize(width: number, height: number) {\n if (width !== this.width || height !== this.height) {\n const gl = this.gl;\n gl.deleteTexture(this.backgroundTexture);\n gl.deleteTexture(this.screenTexture);\n\n this.width = width;\n this.height = height;\n const emptyPixels = new Uint8Array(width * height * 4);\n // screen textures to hold the drawn screen for the previous and the current frame\n this.backgroundTexture = glUtils.createTexture(\n gl,\n gl.NEAREST,\n emptyPixels,\n width,\n height,\n );\n this.screenTexture = glUtils.createTexture(\n gl,\n gl.NEAREST,\n emptyPixels,\n width,\n height,\n );\n }\n }\n\n public draw() {\n if (this.windData?.image) {\n const gl = this.gl;\n\n glUtils.bindTexture(gl, this.windTexture as WebGLTexture, 0);\n glUtils.bindTexture(gl, this.particleStateTexture0 as WebGLTexture, 1);\n\n this.drawScreen(); // draw Particles into framebuffer\n this.updateParticles();\n\n return { d: this.pixels, w: this.width, h: this.height };\n } else {\n return { d: new Uint8Array([0, 0, 0, 0]), w: 1, h: 1 };\n }\n }\n\n public drawScreen() {\n const gl = this.gl;\n\n // draw the screen into a temporary framebuffer to retain it as the background on the next frame\n bindFramebuffer(gl, this.framebuffer, this.screenTexture);\n\n gl.viewport(0, 0, this.width, this.height);\n\n this.drawFullTexture(this.backgroundTexture, this.fadeOpacity);\n this.drawParticles();\n\n gl.disable(gl.BLEND);\n\n this.pixels = new Uint8Array(4 * this.width * this.height);\n gl.readPixels(\n 0,\n 0,\n this.width,\n this.height,\n gl.RGBA,\n gl.UNSIGNED_BYTE,\n this.pixels,\n );\n\n bindFramebuffer(gl, null, null);\n gl.viewport(0, 0, this.gl.canvas.width, this.gl.canvas.height);\n\n // save the current screen as the background for the next frame\n const temp = this.backgroundTexture;\n this.backgroundTexture = this.screenTexture;\n this.screenTexture = temp;\n }\n\n public drawFullTexture(texture: any, opacity: number) {\n const gl = this.gl;\n const program = this.fullScreenProgram as any;\n gl.useProgram(program);\n\n // bindAttribute(gl, this.quadBuffer, program.a_pos, 2);\n\n gl.bindBuffer(gl.ARRAY_BUFFER, this.quadBuffer);\n gl.vertexAttribPointer(program.a_pos, 2, gl.FLOAT, false, 0, 0);\n gl.enableVertexAttribArray(program.a_pos);\n\n gl.bindBuffer(gl.ARRAY_BUFFER, null);\n\n glUtils.bindTexture(gl, texture, 2);\n gl.uniform1i(program.u_screen, 2);\n gl.uniform1f(program.u_opacity, opacity);\n\n gl.drawArrays(gl.TRIANGLES, 0, 6);\n // gl.drawArrays(gl.POINTS, 0, 6);\n }\n\n public drawParticles() {\n const gl = this.gl;\n const program = this.drawProgram as any;\n gl.useProgram(program);\n\n bindAttribute(gl, this.particleIndexBuffer, program.a_index, 1);\n glUtils.bindTexture(gl, this.colorRampTexture as WebGLTexture, 2);\n\n gl.uniform1i(program.u_wind, 0);\n gl.uniform1i(program.u_particles, 1);\n gl.uniform1i(program.u_color_ramp, 2);\n\n gl.uniform1f(program.u_particles_res, this.particleStateResolution);\n gl.uniform2f(program.u_wind_min, this.windData.uMin, this.windData.vMin);\n gl.uniform2f(program.u_wind_max, this.windData.uMax, this.windData.vMax);\n\n gl.drawArrays(gl.POINTS, 0, this.numParticlesSize);\n }\n\n public updateParticles() {\n const gl = this.gl;\n bindFramebuffer(gl, this.framebuffer, this.particleStateTexture1);\n gl.viewport(\n 0,\n 0,\n this.particleStateResolution,\n this.particleStateResolution,\n );\n\n const program = this.updateProgram as any;\n gl.useProgram(program);\n\n bindAttribute(gl, this.quadBuffer, program.a_pos, 2);\n\n gl.uniform1i(program.u_wind, 0);\n gl.uniform1i(program.u_particles, 1);\n\n gl.uniform1f(program.u_rand_seed, Math.random());\n gl.uniform2f(\n program.u_wind_res,\n this.windData.image.width * 2,\n this.windData.image.height * 2,\n );\n gl.uniform2f(program.u_wind_min, this.windData.uMin, this.windData.vMin);\n gl.uniform2f(program.u_wind_max, this.windData.uMax, this.windData.vMax);\n gl.uniform1f(program.u_speed_factor, this.speedFactor);\n gl.uniform1f(program.u_drop_rate, this.dropRate);\n gl.uniform1f(program.u_drop_rate_bump, this.dropRateBump);\n\n gl.drawArrays(gl.TRIANGLES, 0, 6);\n\n // swap the particle state textures so the new one becomes the current one\n const temp = this.particleStateTexture0;\n this.particleStateTexture0 = this.particleStateTexture1;\n this.particleStateTexture1 = temp;\n\n bindFramebuffer(gl, null, null);\n\n // gl.viewport(0, 0, this.gl.canvas.width, this.gl.canvas.height);\n }\n\n public destroy() {\n // private drawProgram: WebGLProgram;\n // private fullScreenProgram: WebGLProgram;\n // private updateProgram: WebGLProgram;\n\n // private quadBuffer: WebGLBuffer | null;\n // private particleIndexBuffer: WebGLBuffer | null;\n\n // private framebuffer: WebGLFramebuffer | null;\n\n // private colorRampTexture: WebGLTexture | null;\n // private backgroundTexture: WebGLTexture | null;\n // private screenTexture: WebGLTexture | null;\n // private particleStateTexture0: WebGLTexture | null;\n // private particleStateTexture1: WebGLTexture | null;\n // private windTexture: WebGLTexture | null;\n\n this.gl.deleteBuffer(this.quadBuffer);\n this.gl.deleteBuffer(this.particleIndexBuffer);\n\n this.gl.deleteFramebuffer(this.framebuffer);\n\n // @ts-ignore\n this.gl.deleteShader(this.drawProgram.vertexShader);\n // @ts-ignore\n this.gl.deleteShader(this.drawProgram.fragmentShader);\n this.gl.deleteProgram(this.drawProgram);\n\n // @ts-ignore\n this.gl.deleteShader(this.fullScreenProgram.vertexShader);\n // @ts-ignore\n this.gl.deleteShader(this.fullScreenProgram.fragmentShader);\n this.gl.deleteProgram(this.fullScreenProgram);\n\n // @ts-ignore\n this.gl.deleteShader(this.updateProgram.vertexShader);\n // @ts-ignore\n this.gl.deleteShader(this.updateProgram.fragmentShader);\n this.gl.deleteProgram(this.updateProgram);\n\n this.gl.deleteTexture(this.colorRampTexture);\n this.gl.deleteTexture(this.backgroundTexture);\n this.gl.deleteTexture(this.screenTexture);\n this.gl.deleteTexture(this.particleStateTexture0);\n this.gl.deleteTexture(this.particleStateTexture1);\n this.gl.deleteTexture(this.windTexture);\n }\n}\n"],"file":"windRender.js"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@antv/l7-layers",
|
|
3
|
-
"version": "2.8.
|
|
3
|
+
"version": "2.8.37",
|
|
4
4
|
"description": "L7's collection of built-in layers",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"module": "es/index.js",
|
|
@@ -23,15 +23,15 @@
|
|
|
23
23
|
"author": "xiaoiver",
|
|
24
24
|
"license": "ISC",
|
|
25
25
|
"dependencies": {
|
|
26
|
-
"@antv/
|
|
27
|
-
"@antv/l7-
|
|
28
|
-
"@antv/l7-
|
|
29
|
-
"@antv/l7-utils": "^2.8.34",
|
|
26
|
+
"@antv/l7-core": "^2.8.37",
|
|
27
|
+
"@antv/l7-source": "^2.8.37",
|
|
28
|
+
"@antv/l7-utils": "^2.8.37",
|
|
30
29
|
"@babel/runtime": "^7.7.7",
|
|
31
30
|
"@mapbox/martini": "^0.2.0",
|
|
32
31
|
"@turf/meta": "^6.0.2",
|
|
33
32
|
"d3-array": "1",
|
|
34
33
|
"d3-color": "^1.4.0",
|
|
34
|
+
"d3-interpolate": "2",
|
|
35
35
|
"d3-scale": "2",
|
|
36
36
|
"earcut": "^2.2.1",
|
|
37
37
|
"eventemitter3": "^4.0.0",
|
|
@@ -47,12 +47,13 @@
|
|
|
47
47
|
"devDependencies": {
|
|
48
48
|
"@types/d3-array": "^2.0.0",
|
|
49
49
|
"@types/d3-color": "^1.2.2",
|
|
50
|
+
"@types/d3-interpolate": "2.0.2",
|
|
50
51
|
"@types/d3-scale": "^2.1.1",
|
|
51
52
|
"@types/earcut": "^2.1.0",
|
|
52
53
|
"@types/gl-matrix": "^2.4.5",
|
|
53
54
|
"@types/lodash": "^4.14.138"
|
|
54
55
|
},
|
|
55
|
-
"gitHead": "
|
|
56
|
+
"gitHead": "0bba063b65ba328a428be978b347a48daafd2994",
|
|
56
57
|
"publishConfig": {
|
|
57
58
|
"access": "public"
|
|
58
59
|
}
|
package/es/imagetile/index.d.ts
DELETED
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import LayerGroup from '../core/LayerGroup';
|
|
2
|
-
import { ImageTileModelType } from './models/index';
|
|
3
|
-
interface IImageLayerStyleOptions {
|
|
4
|
-
opacity: number;
|
|
5
|
-
}
|
|
6
|
-
export default class ImageTileLayer extends LayerGroup<IImageLayerStyleOptions> {
|
|
7
|
-
type: string;
|
|
8
|
-
buildModels(): void;
|
|
9
|
-
rebuildModels(): void;
|
|
10
|
-
protected getConfigSchema(): {
|
|
11
|
-
properties: {
|
|
12
|
-
opacity: {
|
|
13
|
-
type: string;
|
|
14
|
-
minimum: number;
|
|
15
|
-
maximum: number;
|
|
16
|
-
};
|
|
17
|
-
};
|
|
18
|
-
};
|
|
19
|
-
protected getDefaultConfig(): {};
|
|
20
|
-
protected getModelType(): ImageTileModelType;
|
|
21
|
-
}
|
|
22
|
-
export {};
|
package/es/imagetile/index.js
DELETED
|
@@ -1,82 +0,0 @@
|
|
|
1
|
-
import _classCallCheck from "@babel/runtime/helpers/classCallCheck";
|
|
2
|
-
import _createClass from "@babel/runtime/helpers/createClass";
|
|
3
|
-
import _assertThisInitialized from "@babel/runtime/helpers/assertThisInitialized";
|
|
4
|
-
import _inherits from "@babel/runtime/helpers/inherits";
|
|
5
|
-
import _possibleConstructorReturn from "@babel/runtime/helpers/possibleConstructorReturn";
|
|
6
|
-
import _getPrototypeOf from "@babel/runtime/helpers/getPrototypeOf";
|
|
7
|
-
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
8
|
-
|
|
9
|
-
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
|
|
10
|
-
|
|
11
|
-
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; } }
|
|
12
|
-
|
|
13
|
-
import LayerGroup from '../core/LayerGroup';
|
|
14
|
-
import ImageTileModels from './models/index';
|
|
15
|
-
|
|
16
|
-
var ImageTileLayer = function (_LayerGroup) {
|
|
17
|
-
_inherits(ImageTileLayer, _LayerGroup);
|
|
18
|
-
|
|
19
|
-
var _super = _createSuper(ImageTileLayer);
|
|
20
|
-
|
|
21
|
-
function ImageTileLayer() {
|
|
22
|
-
var _this;
|
|
23
|
-
|
|
24
|
-
_classCallCheck(this, ImageTileLayer);
|
|
25
|
-
|
|
26
|
-
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
27
|
-
args[_key] = arguments[_key];
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
_this = _super.call.apply(_super, [this].concat(args));
|
|
31
|
-
|
|
32
|
-
_defineProperty(_assertThisInitialized(_this), "type", 'ImageTileLayer');
|
|
33
|
-
|
|
34
|
-
return _this;
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
_createClass(ImageTileLayer, [{
|
|
38
|
-
key: "buildModels",
|
|
39
|
-
value: function buildModels() {
|
|
40
|
-
var modelType = this.getModelType();
|
|
41
|
-
this.layerModel = new ImageTileModels[modelType](this);
|
|
42
|
-
this.models = this.layerModel.initModels();
|
|
43
|
-
}
|
|
44
|
-
}, {
|
|
45
|
-
key: "rebuildModels",
|
|
46
|
-
value: function rebuildModels() {
|
|
47
|
-
this.models = this.layerModel.buildModels();
|
|
48
|
-
}
|
|
49
|
-
}, {
|
|
50
|
-
key: "getConfigSchema",
|
|
51
|
-
value: function getConfigSchema() {
|
|
52
|
-
return {
|
|
53
|
-
properties: {
|
|
54
|
-
opacity: {
|
|
55
|
-
type: 'number',
|
|
56
|
-
minimum: 0,
|
|
57
|
-
maximum: 1
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
};
|
|
61
|
-
}
|
|
62
|
-
}, {
|
|
63
|
-
key: "getDefaultConfig",
|
|
64
|
-
value: function getDefaultConfig() {
|
|
65
|
-
var type = this.getModelType();
|
|
66
|
-
var defaultConfig = {
|
|
67
|
-
imageTile: {}
|
|
68
|
-
};
|
|
69
|
-
return defaultConfig[type];
|
|
70
|
-
}
|
|
71
|
-
}, {
|
|
72
|
-
key: "getModelType",
|
|
73
|
-
value: function getModelType() {
|
|
74
|
-
return 'imageTile';
|
|
75
|
-
}
|
|
76
|
-
}]);
|
|
77
|
-
|
|
78
|
-
return ImageTileLayer;
|
|
79
|
-
}(LayerGroup);
|
|
80
|
-
|
|
81
|
-
export { ImageTileLayer as default };
|
|
82
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/imagetile/index.ts"],"names":["LayerGroup","ImageTileModels","ImageTileLayer","modelType","getModelType","layerModel","models","initModels","buildModels","properties","opacity","type","minimum","maximum","defaultConfig","imageTile"],"mappings":";;;;;;;;;;;;AAAA,OAAOA,UAAP,MAAuB,oBAAvB;AACA,OAAOC,eAAP,MAAoD,gBAApD;;IAIqBC,c;;;;;;;;;;;;;;;;2DAGG,gB;;;;;;;WACtB,uBAAqB;AACnB,UAAMC,SAAS,GAAG,KAAKC,YAAL,EAAlB;AACA,WAAKC,UAAL,GAAkB,IAAIJ,eAAe,CAACE,SAAD,CAAnB,CAA+B,IAA/B,CAAlB;AACA,WAAKG,MAAL,GAAc,KAAKD,UAAL,CAAgBE,UAAhB,EAAd;AACD;;;WACD,yBAAuB;AACrB,WAAKD,MAAL,GAAc,KAAKD,UAAL,CAAgBG,WAAhB,EAAd;AACD;;;WACD,2BAA4B;AAC1B,aAAO;AACLC,QAAAA,UAAU,EAAE;AACVC,UAAAA,OAAO,EAAE;AACPC,YAAAA,IAAI,EAAE,QADC;AAEPC,YAAAA,OAAO,EAAE,CAFF;AAGPC,YAAAA,OAAO,EAAE;AAHF;AADC;AADP,OAAP;AASD;;;WACD,4BAA6B;AAC3B,UAAMF,IAAI,GAAG,KAAKP,YAAL,EAAb;AACA,UAAMU,aAAa,GAAG;AACpBC,QAAAA,SAAS,EAAE;AADS,OAAtB;AAGA,aAAOD,aAAa,CAACH,IAAD,CAApB;AACD;;;WAED,wBAA6C;AAC3C,aAAO,WAAP;AACD;;;;EAjCyCX,U;;SAAvBE,c","sourcesContent":["import LayerGroup from '../core/LayerGroup';\nimport ImageTileModels, { ImageTileModelType } from './models/index';\ninterface IImageLayerStyleOptions {\n opacity: number;\n}\nexport default class ImageTileLayer extends LayerGroup<\n IImageLayerStyleOptions\n> {\n public type: string = 'ImageTileLayer';\n public buildModels() {\n const modelType = this.getModelType();\n this.layerModel = new ImageTileModels[modelType](this);\n this.models = this.layerModel.initModels();\n }\n public rebuildModels() {\n this.models = this.layerModel.buildModels();\n }\n protected getConfigSchema() {\n return {\n properties: {\n opacity: {\n type: 'number',\n minimum: 0,\n maximum: 1,\n },\n },\n };\n }\n protected getDefaultConfig() {\n const type = this.getModelType();\n const defaultConfig = {\n imageTile: {},\n };\n return defaultConfig[type];\n }\n\n protected getModelType(): ImageTileModelType {\n return 'imageTile';\n }\n}\n"],"file":"index.js"}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import { IModelUniform } from '@antv/l7-core';
|
|
2
|
-
import BaseModel from '../../core/BaseModel';
|
|
3
|
-
export default class ImageTileModel extends BaseModel {
|
|
4
|
-
tileLayer: any;
|
|
5
|
-
private timestamp;
|
|
6
|
-
getUninforms(): IModelUniform;
|
|
7
|
-
tile(): void;
|
|
8
|
-
initModels(): never[];
|
|
9
|
-
clearModels(): void;
|
|
10
|
-
buildModels(): never[];
|
|
11
|
-
protected registerBuiltinAttributes(): void;
|
|
12
|
-
}
|
|
@@ -1,133 +0,0 @@
|
|
|
1
|
-
import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
|
|
2
|
-
import _classCallCheck from "@babel/runtime/helpers/classCallCheck";
|
|
3
|
-
import _createClass from "@babel/runtime/helpers/createClass";
|
|
4
|
-
import _assertThisInitialized from "@babel/runtime/helpers/assertThisInitialized";
|
|
5
|
-
import _inherits from "@babel/runtime/helpers/inherits";
|
|
6
|
-
import _possibleConstructorReturn from "@babel/runtime/helpers/possibleConstructorReturn";
|
|
7
|
-
import _getPrototypeOf from "@babel/runtime/helpers/getPrototypeOf";
|
|
8
|
-
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
9
|
-
|
|
10
|
-
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
|
|
11
|
-
|
|
12
|
-
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; } }
|
|
13
|
-
|
|
14
|
-
import BaseModel from '../../core/BaseModel';
|
|
15
|
-
import Tile from '../utils/Tile';
|
|
16
|
-
|
|
17
|
-
var ImageTileModel = function (_BaseModel) {
|
|
18
|
-
_inherits(ImageTileModel, _BaseModel);
|
|
19
|
-
|
|
20
|
-
var _super = _createSuper(ImageTileModel);
|
|
21
|
-
|
|
22
|
-
function ImageTileModel() {
|
|
23
|
-
var _this;
|
|
24
|
-
|
|
25
|
-
_classCallCheck(this, ImageTileModel);
|
|
26
|
-
|
|
27
|
-
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
28
|
-
args[_key] = arguments[_key];
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
_this = _super.call.apply(_super, [this].concat(args));
|
|
32
|
-
|
|
33
|
-
_defineProperty(_assertThisInitialized(_this), "tileLayer", void 0);
|
|
34
|
-
|
|
35
|
-
_defineProperty(_assertThisInitialized(_this), "timestamp", void 0);
|
|
36
|
-
|
|
37
|
-
return _this;
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
_createClass(ImageTileModel, [{
|
|
41
|
-
key: "getUninforms",
|
|
42
|
-
value: function getUninforms() {
|
|
43
|
-
return {};
|
|
44
|
-
}
|
|
45
|
-
}, {
|
|
46
|
-
key: "tile",
|
|
47
|
-
value: function tile() {
|
|
48
|
-
var _this$mapService$getB = this.mapService.getBounds(),
|
|
49
|
-
_this$mapService$getB2 = _slicedToArray(_this$mapService$getB, 2),
|
|
50
|
-
WS = _this$mapService$getB2[0],
|
|
51
|
-
EN = _this$mapService$getB2[1];
|
|
52
|
-
|
|
53
|
-
var NE = {
|
|
54
|
-
lng: EN[0],
|
|
55
|
-
lat: EN[1]
|
|
56
|
-
};
|
|
57
|
-
var SW = {
|
|
58
|
-
lng: WS[0],
|
|
59
|
-
lat: WS[1]
|
|
60
|
-
};
|
|
61
|
-
this.tileLayer.calCurrentTiles({
|
|
62
|
-
NE: NE,
|
|
63
|
-
SW: SW,
|
|
64
|
-
tileCenter: this.mapService.getCenter(),
|
|
65
|
-
currentZoom: this.mapService.getZoom(),
|
|
66
|
-
minSourceZoom: this.mapService.getMinZoom(),
|
|
67
|
-
minZoom: this.mapService.getMinZoom(),
|
|
68
|
-
maxZoom: this.mapService.getMaxZoom()
|
|
69
|
-
});
|
|
70
|
-
}
|
|
71
|
-
}, {
|
|
72
|
-
key: "initModels",
|
|
73
|
-
value: function initModels() {
|
|
74
|
-
var _this2 = this;
|
|
75
|
-
|
|
76
|
-
this.layer.zIndex = -999;
|
|
77
|
-
|
|
78
|
-
var _ref = this.layer.getLayerConfig(),
|
|
79
|
-
_ref$resolution = _ref.resolution,
|
|
80
|
-
resolution = _ref$resolution === void 0 ? 'low' : _ref$resolution,
|
|
81
|
-
_ref$maxSourceZoom = _ref.maxSourceZoom,
|
|
82
|
-
maxSourceZoom = _ref$maxSourceZoom === void 0 ? 17 : _ref$maxSourceZoom;
|
|
83
|
-
|
|
84
|
-
var source = this.layer.getSource();
|
|
85
|
-
|
|
86
|
-
if (source.data.tileurl) {
|
|
87
|
-
this.tileLayer = new Tile({
|
|
88
|
-
url: source.data.tileurl,
|
|
89
|
-
layerService: this.layerService,
|
|
90
|
-
layer: this.layer,
|
|
91
|
-
resolution: resolution,
|
|
92
|
-
maxSourceZoom: maxSourceZoom,
|
|
93
|
-
crstype: 'epsg3857'
|
|
94
|
-
});
|
|
95
|
-
this.tile();
|
|
96
|
-
this.mapService.on('mapchange', function (e) {
|
|
97
|
-
if (_this2.timestamp) {
|
|
98
|
-
clearTimeout(_this2.timestamp);
|
|
99
|
-
_this2.timestamp = null;
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
_this2.timestamp = setTimeout(function () {
|
|
103
|
-
if (_this2.mapService.getZoom() >= 2.0) {
|
|
104
|
-
_this2.tile();
|
|
105
|
-
}
|
|
106
|
-
}, 500);
|
|
107
|
-
});
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
return [];
|
|
111
|
-
}
|
|
112
|
-
}, {
|
|
113
|
-
key: "clearModels",
|
|
114
|
-
value: function clearModels() {
|
|
115
|
-
this.tileLayer.removeTiles();
|
|
116
|
-
}
|
|
117
|
-
}, {
|
|
118
|
-
key: "buildModels",
|
|
119
|
-
value: function buildModels() {
|
|
120
|
-
return this.initModels();
|
|
121
|
-
}
|
|
122
|
-
}, {
|
|
123
|
-
key: "registerBuiltinAttributes",
|
|
124
|
-
value: function registerBuiltinAttributes() {
|
|
125
|
-
return;
|
|
126
|
-
}
|
|
127
|
-
}]);
|
|
128
|
-
|
|
129
|
-
return ImageTileModel;
|
|
130
|
-
}(BaseModel);
|
|
131
|
-
|
|
132
|
-
export { ImageTileModel as default };
|
|
133
|
-
//# sourceMappingURL=imagetile.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/imagetile/models/imagetile.ts"],"names":["BaseModel","Tile","ImageTileModel","mapService","getBounds","WS","EN","NE","lng","lat","SW","tileLayer","calCurrentTiles","tileCenter","getCenter","currentZoom","getZoom","minSourceZoom","getMinZoom","minZoom","maxZoom","getMaxZoom","layer","zIndex","getLayerConfig","resolution","maxSourceZoom","source","getSource","data","tileurl","url","layerService","crstype","tile","on","e","timestamp","clearTimeout","setTimeout","removeTiles","initModels"],"mappings":";;;;;;;;;;;;;AACA,OAAOA,SAAP,MAAsB,sBAAtB;AACA,OAAOC,IAAP,MAAiB,eAAjB;;IAOqBC,c;;;;;;;;;;;;;;;;;;;;;;;;;WAGnB,wBAAqC;AACnC,aAAO,EAAP;AACD;;;WAGD,gBAAc;AACZ,kCAAiB,KAAKC,UAAL,CAAgBC,SAAhB,EAAjB;AAAA;AAAA,UAAOC,EAAP;AAAA,UAAWC,EAAX;;AACA,UAAMC,EAAE,GAAG;AAAEC,QAAAA,GAAG,EAAEF,EAAE,CAAC,CAAD,CAAT;AAAcG,QAAAA,GAAG,EAAEH,EAAE,CAAC,CAAD;AAArB,OAAX;AACA,UAAMI,EAAE,GAAG;AAAEF,QAAAA,GAAG,EAAEH,EAAE,CAAC,CAAD,CAAT;AAAcI,QAAAA,GAAG,EAAEJ,EAAE,CAAC,CAAD;AAArB,OAAX;AACA,WAAKM,SAAL,CAAeC,eAAf,CAA+B;AAC7BL,QAAAA,EAAE,EAAFA,EAD6B;AAE7BG,QAAAA,EAAE,EAAFA,EAF6B;AAG7BG,QAAAA,UAAU,EAAE,KAAKV,UAAL,CAAgBW,SAAhB,EAHiB;AAI7BC,QAAAA,WAAW,EAAE,KAAKZ,UAAL,CAAgBa,OAAhB,EAJgB;AAK7BC,QAAAA,aAAa,EAAE,KAAKd,UAAL,CAAgBe,UAAhB,EALc;AAM7BC,QAAAA,OAAO,EAAE,KAAKhB,UAAL,CAAgBe,UAAhB,EANoB;AAO7BE,QAAAA,OAAO,EAAE,KAAKjB,UAAL,CAAgBkB,UAAhB;AAPoB,OAA/B;AASD;;;WAED,sBAAoB;AAAA;;AAElB,WAAKC,KAAL,CAAWC,MAAX,GAAoB,CAAC,GAArB;;AACA,iBAGI,KAAKD,KAAL,CAAWE,cAAX,EAHJ;AAAA,iCACEC,UADF;AAAA,UACEA,UADF,gCACe,KADf;AAAA,oCAEEC,aAFF;AAAA,UAEEA,aAFF,mCAEkB,EAFlB;;AAIA,UAAMC,MAAM,GAAG,KAAKL,KAAL,CAAWM,SAAX,EAAf;;AAEA,UAAID,MAAM,CAACE,IAAP,CAAYC,OAAhB,EAAyB;AACvB,aAAKnB,SAAL,GAAiB,IAAIV,IAAJ,CAAS;AACxB8B,UAAAA,GAAG,EAAEJ,MAAM,CAACE,IAAP,CAAYC,OADO;AAExBE,UAAAA,YAAY,EAAE,KAAKA,YAFK;AAGxBV,UAAAA,KAAK,EAAE,KAAKA,KAHY;AAIxBG,UAAAA,UAAU,EAAVA,UAJwB;AAKxBC,UAAAA,aAAa,EAAbA,aALwB;AAOxBO,UAAAA,OAAO,EAAE;AAPe,SAAT,CAAjB;AAWA,aAAKC,IAAL;AAEA,aAAK/B,UAAL,CAAgBgC,EAAhB,CAAmB,WAAnB,EAAgC,UAACC,CAAD,EAAO;AACrC,cAAI,MAAI,CAACC,SAAT,EAAoB;AAClBC,YAAAA,YAAY,CAAC,MAAI,CAACD,SAAN,CAAZ;AACA,YAAA,MAAI,CAACA,SAAL,GAAiB,IAAjB;AACD;;AAED,UAAA,MAAI,CAACA,SAAL,GAAiBE,UAAU,CAAC,YAAM;AAEhC,gBAAI,MAAI,CAACpC,UAAL,CAAgBa,OAAhB,MAA6B,GAAjC,EAAsC;AACpC,cAAA,MAAI,CAACkB,IAAL;AACD;AACF,WAL0B,EAKxB,GALwB,CAA3B;AAMD,SAZD;AAaD;;AAED,aAAO,EAAP;AACD;;;WAED,uBAAqB;AACnB,WAAKvB,SAAL,CAAe6B,WAAf;AACD;;;WAED,uBAAqB;AACnB,aAAO,KAAKC,UAAL,EAAP;AACD;;;WAED,qCAAsC;AACpC;AACD;;;;EA1EyCzC,S;;SAAvBE,c","sourcesContent":["import { gl, IModelUniform } from '@antv/l7-core';\nimport BaseModel from '../../core/BaseModel';\nimport Tile from '../utils/Tile';\n\ninterface IImageLayerStyleOptions {\n resolution: string;\n maxSourceZoom: number;\n}\n\nexport default class ImageTileModel extends BaseModel {\n public tileLayer: any;\n private timestamp: number | null;\n public getUninforms(): IModelUniform {\n return {};\n }\n\n // 瓦片方法\n public tile() {\n const [WS, EN] = this.mapService.getBounds();\n const NE = { lng: EN[0], lat: EN[1] };\n const SW = { lng: WS[0], lat: WS[1] };\n this.tileLayer.calCurrentTiles({\n NE,\n SW,\n tileCenter: this.mapService.getCenter(),\n currentZoom: this.mapService.getZoom(),\n minSourceZoom: this.mapService.getMinZoom(),\n minZoom: this.mapService.getMinZoom(),\n maxZoom: this.mapService.getMaxZoom(),\n });\n }\n\n public initModels() {\n // TODO: 瓦片组件默认在最下层\n this.layer.zIndex = -999;\n const {\n resolution = 'low',\n maxSourceZoom = 17,\n } = this.layer.getLayerConfig() as IImageLayerStyleOptions;\n const source = this.layer.getSource();\n // 当存在 url 的时候生效\n if (source.data.tileurl) {\n this.tileLayer = new Tile({\n url: source.data.tileurl,\n layerService: this.layerService,\n layer: this.layer,\n resolution,\n maxSourceZoom,\n // Tip: 当前为 default\n crstype: 'epsg3857',\n });\n\n // TODO: 首次加载的时候请求瓦片\n this.tile();\n\n this.mapService.on('mapchange', (e) => {\n if (this.timestamp) {\n clearTimeout(this.timestamp);\n this.timestamp = null;\n }\n // @ts-ignore 节流\n this.timestamp = setTimeout(() => {\n // TODO: 瓦片地图最大层级为 2\n if (this.mapService.getZoom() >= 2.0) {\n this.tile();\n }\n }, 500);\n });\n }\n\n return [];\n }\n\n public clearModels() {\n this.tileLayer.removeTiles();\n }\n\n public buildModels() {\n return this.initModels();\n }\n\n protected registerBuiltinAttributes() {\n return;\n }\n}\n"],"file":"imagetile.js"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/imagetile/models/index.ts"],"names":["ImageTileModel","ImageTileModels","imageTile"],"mappings":"AAAA,OAAOA,cAAP,MAA2B,aAA3B;AAGA,IAAMC,eAAqD,GAAG;AAC5DC,EAAAA,SAAS,EAAEF;AADiD,CAA9D;AAIA,eAAeC,eAAf","sourcesContent":["import ImageTileModel from './imagetile';\nexport type ImageTileModelType = 'imageTile';\n\nconst ImageTileModels: { [key in ImageTileModelType]: any } = {\n imageTile: ImageTileModel,\n};\n\nexport default ImageTileModels;\n"],"file":"index.js"}
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import { LngLatBounds } from '@antv/geo-coord';
|
|
2
|
-
import { Container } from 'inversify';
|
|
3
|
-
interface IUrlParams {
|
|
4
|
-
x: number;
|
|
5
|
-
y: number;
|
|
6
|
-
z: number;
|
|
7
|
-
s?: string;
|
|
8
|
-
}
|
|
9
|
-
export default class ImageTile {
|
|
10
|
-
tile: number[];
|
|
11
|
-
name: string;
|
|
12
|
-
imageLayer: any;
|
|
13
|
-
constructor(key: string, url: string, container: Container, sceneContainer: Container);
|
|
14
|
-
destroy(): void;
|
|
15
|
-
getTileURL(urlParams: IUrlParams, path: string): string;
|
|
16
|
-
tileLnglatBounds(tile: number[]): LngLatBounds;
|
|
17
|
-
tile2lng(x: number, z: number): number;
|
|
18
|
-
tile2lat(y: number, z: number): number;
|
|
19
|
-
}
|
|
20
|
-
export {};
|
|
@@ -1,92 +0,0 @@
|
|
|
1
|
-
import _classCallCheck from "@babel/runtime/helpers/classCallCheck";
|
|
2
|
-
import _createClass from "@babel/runtime/helpers/createClass";
|
|
3
|
-
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
4
|
-
import { toLngLatBounds } from '@antv/geo-coord';
|
|
5
|
-
import ImageLayer from '../../image';
|
|
6
|
-
var r2d = 180 / Math.PI;
|
|
7
|
-
var tileURLRegex = /\{([zxy])\}/g;
|
|
8
|
-
|
|
9
|
-
var ImageTile = function () {
|
|
10
|
-
function ImageTile(key, url, container, sceneContainer) {
|
|
11
|
-
_classCallCheck(this, ImageTile);
|
|
12
|
-
|
|
13
|
-
_defineProperty(this, "tile", void 0);
|
|
14
|
-
|
|
15
|
-
_defineProperty(this, "name", void 0);
|
|
16
|
-
|
|
17
|
-
_defineProperty(this, "imageLayer", void 0);
|
|
18
|
-
|
|
19
|
-
this.name = key;
|
|
20
|
-
this.tile = key.split('_').map(function (v) {
|
|
21
|
-
return Number(v);
|
|
22
|
-
});
|
|
23
|
-
var urlParams = {
|
|
24
|
-
x: this.tile[0],
|
|
25
|
-
y: this.tile[1],
|
|
26
|
-
z: this.tile[2]
|
|
27
|
-
};
|
|
28
|
-
var imageSrc = this.getTileURL(urlParams, url);
|
|
29
|
-
var lnglatBounds = this.tileLnglatBounds(this.tile);
|
|
30
|
-
var west = lnglatBounds.getWest();
|
|
31
|
-
var south = lnglatBounds.getSouth();
|
|
32
|
-
var east = lnglatBounds.getEast();
|
|
33
|
-
var north = lnglatBounds.getNorth();
|
|
34
|
-
var imageLayer = new ImageLayer({
|
|
35
|
-
zIndex: -999
|
|
36
|
-
});
|
|
37
|
-
imageLayer.source(imageSrc, {
|
|
38
|
-
parser: {
|
|
39
|
-
type: 'image',
|
|
40
|
-
extent: [west, south, east, north]
|
|
41
|
-
}
|
|
42
|
-
});
|
|
43
|
-
imageLayer.setContainer(container, sceneContainer);
|
|
44
|
-
imageLayer.init();
|
|
45
|
-
this.imageLayer = imageLayer;
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
_createClass(ImageTile, [{
|
|
49
|
-
key: "destroy",
|
|
50
|
-
value: function destroy() {
|
|
51
|
-
this.imageLayer.clearModels();
|
|
52
|
-
this.imageLayer.destroy();
|
|
53
|
-
}
|
|
54
|
-
}, {
|
|
55
|
-
key: "getTileURL",
|
|
56
|
-
value: function getTileURL(urlParams, path) {
|
|
57
|
-
if (!urlParams.s) {
|
|
58
|
-
urlParams.s = String.fromCharCode(97 + Math.floor(Math.random() * 3));
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
tileURLRegex.lastIndex = 0;
|
|
62
|
-
return path.replace(tileURLRegex, function (value, key) {
|
|
63
|
-
return urlParams[key];
|
|
64
|
-
});
|
|
65
|
-
}
|
|
66
|
-
}, {
|
|
67
|
-
key: "tileLnglatBounds",
|
|
68
|
-
value: function tileLnglatBounds(tile) {
|
|
69
|
-
var e = this.tile2lng(tile[0] + 1, tile[2]);
|
|
70
|
-
var w = this.tile2lng(tile[0], tile[2]);
|
|
71
|
-
var s = this.tile2lat(tile[1] + 1, tile[2]);
|
|
72
|
-
var n = this.tile2lat(tile[1], tile[2]);
|
|
73
|
-
return toLngLatBounds([w, n], [e, s]);
|
|
74
|
-
}
|
|
75
|
-
}, {
|
|
76
|
-
key: "tile2lng",
|
|
77
|
-
value: function tile2lng(x, z) {
|
|
78
|
-
return x / Math.pow(2, z) * 360 - 180;
|
|
79
|
-
}
|
|
80
|
-
}, {
|
|
81
|
-
key: "tile2lat",
|
|
82
|
-
value: function tile2lat(y, z) {
|
|
83
|
-
var n = Math.PI - 2 * Math.PI * y / Math.pow(2, z);
|
|
84
|
-
return r2d * Math.atan(0.5 * (Math.exp(n) - Math.exp(-n)));
|
|
85
|
-
}
|
|
86
|
-
}]);
|
|
87
|
-
|
|
88
|
-
return ImageTile;
|
|
89
|
-
}();
|
|
90
|
-
|
|
91
|
-
export { ImageTile as default };
|
|
92
|
-
//# sourceMappingURL=ImageTile.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/imagetile/utils/ImageTile.ts"],"names":["toLngLatBounds","ImageLayer","r2d","Math","PI","tileURLRegex","ImageTile","key","url","container","sceneContainer","name","tile","split","map","v","Number","urlParams","x","y","z","imageSrc","getTileURL","lnglatBounds","tileLnglatBounds","west","getWest","south","getSouth","east","getEast","north","getNorth","imageLayer","zIndex","source","parser","type","extent","setContainer","init","clearModels","destroy","path","s","String","fromCharCode","floor","random","lastIndex","replace","value","e","tile2lng","w","tile2lat","n","pow","atan","exp"],"mappings":"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","sourcesContent":["import { LngLatBounds, toBounds, toLngLatBounds } from '@antv/geo-coord';\nimport { Container } from 'inversify';\nimport ImageLayer from '../../image';\n\ninterface IUrlParams {\n x: number;\n y: number;\n z: number;\n s?: string;\n}\n\nconst r2d = 180 / Math.PI;\nconst tileURLRegex = /\\{([zxy])\\}/g;\n\nexport default class ImageTile {\n public tile: number[]; // 当前图片瓦片的索引\n public name: string;\n public imageLayer: any;\n constructor(\n key: string,\n url: string,\n container: Container,\n sceneContainer: Container,\n ) {\n this.name = key;\n this.tile = key.split('_').map((v) => Number(v));\n\n const urlParams = {\n x: this.tile[0],\n y: this.tile[1],\n z: this.tile[2],\n };\n const imageSrc = this.getTileURL(urlParams, url);\n\n const lnglatBounds = this.tileLnglatBounds(this.tile);\n const west = lnglatBounds.getWest();\n const south = lnglatBounds.getSouth();\n const east = lnglatBounds.getEast();\n const north = lnglatBounds.getNorth();\n\n const imageLayer = new ImageLayer({ zIndex: -999 });\n imageLayer.source(\n // 'https://gw.alipayobjects.com/zos/rmsportal/FnHFeFklTzKDdUESRNDv.jpg',\n imageSrc,\n {\n parser: {\n type: 'image',\n // extent: [121.168, 30.2828, 121.384, 30.4219],\n extent: [west, south, east, north],\n },\n },\n );\n\n imageLayer.setContainer(container, sceneContainer);\n imageLayer.init();\n\n this.imageLayer = imageLayer;\n }\n\n public destroy() {\n this.imageLayer.clearModels();\n this.imageLayer.destroy();\n }\n\n public getTileURL(urlParams: IUrlParams, path: string) {\n if (!urlParams.s) {\n // Default to a random choice of a, b or c\n urlParams.s = String.fromCharCode(97 + Math.floor(Math.random() * 3));\n }\n\n tileURLRegex.lastIndex = 0;\n return path.replace(tileURLRegex, (value, key: any) => {\n // @ts-ignore\n return urlParams[key];\n });\n }\n\n // Get tile bounds in WGS84 coordinates\n public tileLnglatBounds(tile: number[]) {\n const e = this.tile2lng(tile[0] + 1, tile[2]);\n const w = this.tile2lng(tile[0], tile[2]);\n const s = this.tile2lat(tile[1] + 1, tile[2]);\n const n = this.tile2lat(tile[1], tile[2]);\n return toLngLatBounds([w, n], [e, s]);\n }\n\n public tile2lng(x: number, z: number) {\n return (x / Math.pow(2, z)) * 360 - 180;\n }\n\n public tile2lat(y: number, z: number) {\n const n = Math.PI - (2 * Math.PI * y) / Math.pow(2, z);\n return r2d * Math.atan(0.5 * (Math.exp(n) - Math.exp(-n)));\n }\n}\n"],"file":"ImageTile.js"}
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
import { Bounds } from '@antv/geo-coord';
|
|
2
|
-
import { ILayerGroup, ILayerService, ILngLat } from '@antv/l7-core';
|
|
3
|
-
export default class Tile {
|
|
4
|
-
tileList: any;
|
|
5
|
-
tileCache: any;
|
|
6
|
-
updateTileList: any[];
|
|
7
|
-
tileZoom: number;
|
|
8
|
-
noPruneRange: any;
|
|
9
|
-
url: string;
|
|
10
|
-
resolution: number;
|
|
11
|
-
maxSourceZoom: number;
|
|
12
|
-
crstype: string;
|
|
13
|
-
currentCrs: any;
|
|
14
|
-
layerService: ILayerService;
|
|
15
|
-
layer: ILayerGroup;
|
|
16
|
-
constructor(props: any);
|
|
17
|
-
calCurrentTiles(oprions: any): void;
|
|
18
|
-
pxBoundsToTileRange(pixelBounds: any): Bounds;
|
|
19
|
-
getPixelBounds(NE: ILngLat, SW: ILngLat, tileCenter: ILngLat, tileZoom: number, crs: any): Bounds;
|
|
20
|
-
pruneTiles(): void;
|
|
21
|
-
requestTile(key: string): void;
|
|
22
|
-
retainParent(x: number, y: number, z: number, minZoom: number): any;
|
|
23
|
-
retainChildren(x: number, y: number, z: number, maxZoom: number): void;
|
|
24
|
-
destroyTile(tile: any): void;
|
|
25
|
-
removeOutTiles(): void;
|
|
26
|
-
removeTiles(): void;
|
|
27
|
-
}
|