m4-w-fast 1.0.16 → 1.1.0

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.
Files changed (31) hide show
  1. package/README.md +133 -153
  2. package/dist/index.cjs +1 -1
  3. package/dist/index.js +1 -1
  4. package/dist/index.mjs +1 -1
  5. package/dist/intersect.worker.js +2 -2
  6. package/dist/isoBands.worker.js +1 -1
  7. package/dist/m4-w-fast.umd.js +1 -1
  8. package/dist/raster-overlay/color.js +1 -1
  9. package/dist/raster-overlay/core.js +1 -1
  10. package/dist/raster-overlay/index.cjs +2 -2
  11. package/dist/raster-overlay/index.d.ts +2 -1
  12. package/dist/raster-overlay/index.js +1 -1
  13. package/dist/raster-overlay/index.mjs +2 -2
  14. package/dist/raster-overlay/leaflet-renderers/cpuRenderer.js +1 -1
  15. package/dist/raster-overlay/leaflet-renderers/createRenderer.js +1 -1
  16. package/dist/raster-overlay/leaflet-renderers/rasterRendererUtils.d.ts +52 -0
  17. package/dist/raster-overlay/leaflet-renderers/rasterRendererUtils.js +1 -0
  18. package/dist/raster-overlay/leaflet-renderers/renderer.d.ts +7 -3
  19. package/dist/raster-overlay/leaflet-renderers/webgl2Renderer.d.ts +6 -3
  20. package/dist/raster-overlay/leaflet-renderers/webgl2Renderer.js +1 -1
  21. package/dist/raster-overlay/leaflet-renderers/webglRenderer.js +1 -1
  22. package/dist/raster-overlay/leaflet-renderers/webgpuRenderer.d.ts +114 -0
  23. package/dist/raster-overlay/leaflet-renderers/webgpuRenderer.js +1 -1
  24. package/dist/raster-overlay/leafletLayer.d.ts +19 -4
  25. package/dist/raster-overlay/leafletLayer.js +1 -1
  26. package/dist/raster-overlay/m4-w-raster-overlay.umd.js +2 -2
  27. package/dist/raster-overlay/query.d.ts +11 -0
  28. package/dist/raster-overlay/query.js +1 -0
  29. package/dist/raster-overlay/types.d.ts +123 -2
  30. package/dist/readFile.js +1 -1
  31. package/package.json +2 -1
package/README.md CHANGED
@@ -1,29 +1,28 @@
1
1
  # m4文件绘图程序
2
2
 
3
3
  ![img.png](img.png)
4
+ ![img_1.png](img_1.png)
4
5
 
5
6
  ### 更新说明
6
- - v1.0.1: 修复了安装在vite环境打包时woker不正常工作的问题
7
- - v1.0.2: 新增了一个可以单独获取某一个break的等值面方法 `getIsoBandsByLayerBreak(breaks: number[], break: number)`
8
- - **注意: 这个方法只用于取单等值面, 如果你需要获取所有等值面, 还是用 `getIsoBandsFast` 或者 `getIsoBandsFastByWorker` 方法**
9
- - v1.0.3:
10
- - 添加了m4文件换行符的兼容
11
- - 增加了配置项在解析的时候将开氏度转换为摄氏度 (K -> ℃) (-272.15)
12
- - `read.start({ convertTemKtoC: true })`
13
- - v1.0.4:
14
- - 提供了一个 `setParams(params: ParamsConfig, config?: ReadConfig)` 方法, 用于设置动态参数, 而非固定从文件获取数据
15
- - 拆解了 `start()` 方法中的 `json: JSONData[]` 拼装, 如果需要json数据, 可以调用 `getJsonData()` 方法获取
16
- - **注意: 这里获取到的数据,和`start(config? ReadConfig)`或`setParams(params: ParamsConfig, config?: ReadConfig)`中的config有关**
17
- - 扩展了 `ReadConfig` 配置项, 新增:
18
- - `plusOffset?: number` 数据偏移量, 默认无偏移
19
- - ~~`getIsoBandsFastByWorker()` 和 `clipDataByJson()` 方法新增了 `useCpuCount` 参数, 用于设置`CPU`使用数量, 默认为`navigator.hardwareConcurrency - 4`~~
20
- - v1.0.5:
21
- - `.start()`方法提供了一个Promise.reject的错误回调, 用于捕获文件读取错误
22
- - 优化了在少数情况下, 绘图会出现有值但没有被绘制的问题
23
- - v1.0.6:
24
- - 优化`getIsoBandsFast()`的绘图效果, 基于面积排序的结果存在一些未达预期的效果, 后续可能会撤销`getIsoBandsFastByWorker()`方法
25
- - v1.0.7:
26
- - 修复`getIsoBandsFast()`的结果在裁剪时不匹配的问题
7
+ - v1.1.0
8
+ - 正式启动主推 `leaflet canvas图层`方案
9
+ - 现已支持`webgl2`, `webgpu`
10
+ - 增加了 `tooltip`属性, `raster:hover`,`raster:click`事件, 用于拾取当前鼠标所在的格点数据
11
+ - 裁图在计划中...
12
+ - v1.0.13
13
+ - 新增了基于`leaflet` + `webgl2`的绘图方案, 这个方案可以使用`tif`, `micaps4`, `setParams()`的方式获取到一个图层, 图层在变化的时候会进行重采样和插值, 理论上可以流畅的过滤数据或者放大不虚
14
+ - 后续计划增加`AMap`, `webgl`, `webgpu`方案.
15
+ - 裁剪数据也在计划中, 目前已知裁图在边界上会有锯齿状的边缘
16
+ - v1.0.12
17
+ - 新增 `getIsoBandsFastByMask(breaks: number[])` 方法, 和`getIsoBandsFast()`方法类似, 区别在于他做了数据挖孔, 可以给图层设置透明度而不影响图层的叠加效果
18
+ - v1.0.11
19
+ - 修复了在 `vite8` 环境下的验证问题, 导出更加严格
20
+ - v1.0.10
21
+ - 修复了 `getIsoBandsCanvas` 方法在`lat格距`为负值时结果不正确的问题
22
+ - v1.0.9:
23
+ - 新增`buildGridLineCanvas(options?: CanvasOptions)` 用于输出一个基于数据栅格的 `HTMLCanvasElement`, 只是个格子
24
+ - 新增`buildGridCanvas(breaks: number[], colors: (number[] | string)[], options?: CanvasOptions): HTMLCanvasElement | null` 用于输出一个基于数据栅格的 `HTMLCanvasElement`, 有填色
25
+ - 新增`buildGridCanvasClipByJson(breaks: number[], colors: (number[] | string)[], json: FeatureCollection, options?: CanvasOptions): HTMLCanvasElement | null` 用于输出一个基于数据栅格的 `HTMLCanvasElement`, 有填色并裁剪
27
26
  - v1.0.8:
28
27
  - 修复`getIsoBandsFast()`的返回类型兼容问题
29
28
  - 新增`getIsoBandsCanvas(breaks: number[], colors: (number[] | string)[], options?: CanvasOptions)` 用于输出一个 `HTMLCanvasElement` 方便做图片操作
@@ -31,60 +30,104 @@
31
30
  - ~~新增`buildGridCanvas(options?: CanvasOptions)` 用于输出一个基于数据栅格的 `HTMLCanvasElement`, 只是个格子~~
32
31
  - 新增`updateGridCanvas(points: Point[], updateVal: number)` 用于更新格点数据
33
32
  - 新增 `umd` 版本支持, 可以直接通过 `script` 标签引入使用, 全局注册变量命名为 `M4WFast`
34
- - v1.0.9:
35
- - 新增`buildGridLineCanvas(options?: CanvasOptions)` 用于输出一个基于数据栅格的 `HTMLCanvasElement`, 只是个格子
36
- - 新增`buildGridCanvas(breaks: number[], colors: (number[] | string)[], options?: CanvasOptions): HTMLCanvasElement | null` 用于输出一个基于数据栅格的 `HTMLCanvasElement`, 有填色
37
- - 新增`buildGridCanvasClipByJson(breaks: number[], colors: (number[] | string)[], json: FeatureCollection, options?: CanvasOptions): HTMLCanvasElement | null` 用于输出一个基于数据栅格的 `HTMLCanvasElement`, 有填色并裁剪
38
- - v1.0.10
39
- - 修复了 `getIsoBandsCanvas` 方法在`lat格距`为负值时结果不正确的问题
40
- - v1.0.11
41
- - 修复了在 `vite8` 环境下的验证问题, 导出更加严格
42
- - v1.0.12
43
- - 新增 `getIsoBandsFastByMask(breaks: number[])` 方法, 和`getIsoBandsFast()`方法类似, 区别在于他做了数据挖孔, 可以给图层设置透明度而不影响图层的叠加效果
44
- - v1.0.13
45
- - 新增了基于`leaflet` + `webgl2`的绘图方案, 这个方案可以使用`tif`, `micaps4`, `setParams()`的方式获取到一个图层, 图层在变化的时候会进行重采样和插值, 理论上可以流畅的过滤数据或者放大不虚
46
- - 后续计划增加`AMap`, `webgl`, `webgpu`方案.
47
- - 裁剪数据也在计划中, 目前已知裁图在边界上会有锯齿状的边缘
33
+ - v1.0.7:
34
+ - 修复`getIsoBandsFast()`的结果在裁剪时不匹配的问题
35
+ - v1.0.6:
36
+ - 优化`getIsoBandsFast()`的绘图效果, 基于面积排序的结果存在一些未达预期的效果, 后续可能会撤销`getIsoBandsFastByWorker()`方法
37
+ - v1.0.5:
38
+ - `.start()`方法提供了一个Promise.reject的错误回调, 用于捕获文件读取错误
39
+ - 优化了在少数情况下, 绘图会出现有值但没有被绘制的问题
40
+ - v1.0.4:
41
+ - 提供了一个 `setParams(params: ParamsConfig, config?: ReadConfig)` 方法, 用于设置动态参数, 而非固定从文件获取数据
42
+ - 拆解了 `start()` 方法中的 `json: JSONData[]` 拼装, 如果需要json数据, 可以调用 `getJsonData()` 方法获取
43
+ - **注意: 这里获取到的数据,和`start(config? ReadConfig)`或`setParams(params: ParamsConfig, config?: ReadConfig)`中的config有关**
44
+ - 扩展了 `ReadConfig` 配置项, 新增:
45
+ - `plusOffset?: number` 数据偏移量, 默认无偏移
46
+ - ~~`getIsoBandsFastByWorker()` 和 `clipDataByJson()` 方法新增了 `useCpuCount` 参数, 用于设置`CPU`使用数量, 默认为`navigator.hardwareConcurrency - 4`~~
47
+ - v1.0.3:
48
+ - 添加了m4文件换行符的兼容
49
+ - 增加了配置项在解析的时候将开氏度转换为摄氏度 (K -> ℃) (-272.15)
50
+ - `read.start({ convertTemKtoC: true })`
51
+ - v1.0.2: 新增了一个可以单独获取某一个break的等值面方法 `getIsoBandsByLayerBreak(breaks: number[], break: number)`
52
+ - **注意: 这个方法只用于取单等值面, 如果你需要获取所有等值面, 还是用 `getIsoBandsFast` 或者 `getIsoBandsFastByWorker` 方法**
53
+ - v1.0.1: 修复了安装在vite环境打包时woker不正常工作的问题
48
54
 
49
- ### 类型参照
50
- > ReadConfig
51
55
 
52
- | 参数 | 说明 | 类型 | 默认值 |
53
- |----|----|-----------|-------|
54
- | convertTemKtoC | 是否将温度从开氏度转换为摄氏度 | `boolean` | false |
55
- | plusOffset | 数据偏移量 | `number` | 无 |
56
+ ### 使用
57
+
58
+ 1. 安装这个库
59
+ ```shell
60
+ npm i m4-w-fast
61
+ ```
56
62
 
57
63
  ---
64
+ # leaflet canvas图层
65
+ - 理论上可以流畅的过滤数据或者放大不虚, 这可能是当前包体中显示最优的方案
66
+ - 现已支持 webgl2, webgpu
58
67
 
59
- > ParamsConfig
68
+ ```ts
69
+ const grid = await loadRasterGrid({
70
+ type: 'tif',
71
+ url: 'xxx'
72
+ })
60
73
 
61
- | 参数 | 说明 | 类型 | 默认值 |
62
- |--------|----|------------|-----|
63
- | values | 数据值数组 | `number[]` | [] |
64
- | nx | 栅格列数 | `number` | 0 |
65
- | ny | 栅格行数 | `number` | 0 |
66
- | minLng | 最小经度 | `number` | 0 |
67
- | minLat | 最小纬度 | `number` | 0 |
68
- | gjLng | 经度分辨率 | `number` | 0 |
69
- | gjLat | 纬度分辨率 | `number` | 0 |
74
+ // micaps4
75
+ // const grid = await loadRasterGrid({
76
+ // type: 'micaps4',
77
+ // url: 'xxx'
78
+ // })
70
79
 
71
- ---
80
+ // params
81
+ // const grid = await loadRasterGrid({
82
+ // type: 'params',
83
+ // params: {
84
+ // values: Array.from({ length: 512 * 256 }, () => Math.random() * 60 - 30),
85
+ // nx: 512,
86
+ // ny: 256,
87
+ // minLng: 70,
88
+ // minLat: 15,
89
+ // gjLng: 0.1,
90
+ // gjLat: 0.1,
91
+ // flipY: true, //是否翻转数据
92
+ // valueScale: 1
93
+ // }
94
+ // })
72
95
 
73
- > JSONData
96
+ const layer = createRasterLeafletLayer({
97
+ rendererType: 'webgl2',
98
+ grid,
99
+ colorStops: legend, // {min: number, max:number, color: string}[]
100
+ colorRange: {
101
+ minValue: Number(minInput.value), // 过滤的最小值
102
+ maxValue: Number(maxInput.value) // 过滤的最大值
103
+ },
104
+ opacity: 1,
105
+ renderMode: 'step',
106
+ pane: 'raster-pane',
107
+ tooltip: {
108
+ enabled: true,
109
+ formatter: (result) => {
110
+ return `<div>${result.value.toFixed(2)}</div>`
111
+ }
112
+ }
113
+ })
74
114
 
75
- | 参数 | 说明 | 类型 | 默认值 |
76
- |---|---|---|---|
77
- | lng | 经度 | `number` | 0 |
78
- | lat | 纬度 | `number` | 0 |
79
- | val | 数据值 | `number` | 0 |
115
+ // layer.setColorRange({ minValue, maxValue }) 动态变化
80
116
 
81
- ### 使用
117
+ layer.on('raster:hover', event => {
118
+ console.log(event.result)
119
+ })
120
+
121
+ layer.on('raster:click', event => {
122
+ console.log(event.result)
123
+ })
82
124
 
83
- 1. 安装这个库
84
- ```shell
85
- npm i m4-w-fast
86
125
  ```
87
126
 
127
+ ---
128
+
129
+ # geojson图层
130
+
88
131
  2. 使用示例
89
132
  ```vue
90
133
  <script lang="ts" setup>
@@ -123,55 +166,6 @@ const init = async() => {
123
166
  </script>
124
167
  ```
125
168
 
126
- 3. webWorker使用示例 (worker主要用来裁切文件)
127
- - **注意!`getIsoBandsFastByWorker()`即将弃用!, 请使用`getIsoBandsFast()`**
128
- ```vue
129
- <script lang="ts" setup>
130
- import * as L from 'leaflet'
131
- import 'leaflet/dist/leaflet.css'
132
- import ReadFileM4Fast from 'm4-w-fast'
133
- import { getIsoWorkerUrl, getIntersectWorkerUrl } from 'm4-w-fast/worker-urls'
134
- import isoWorkerUrl from 'm4-w-fast/isoBands.worker.js?url'
135
- import intersectWorkerUrl from 'm4-w-fast/intersect.worker.js?url'
136
-
137
- import geojson from './620000.json'
138
- import type { FeatureCollection } from 'geojson'
139
-
140
- const file = '' // 这里是你的m4文件路径
141
-
142
- const init = async() => {
143
- const read = new ReadFileM4Fast(file)
144
- await read.start()
145
- // 此时, 你已经有解析过的数据了
146
-
147
- // 开始计算等值面
148
- const break = [] // 这里取决于你的色标分级
149
-
150
- // 如果数据量实在是大, 可以考虑用他来计算, 但是实测 180w条数据下也没必要用他
151
- const isoBands = await read.getIsoBandsFastByWorker(break, isoWorkerUrl)
152
-
153
- // 根据边界裁切文件
154
- const intersection = await read.clipDataByJson(isoBands, geojson as FeatureCollection, intersectWorkerUrl)
155
-
156
- // 叠加绘图 leaflet为例
157
- L.geoJson(intersection, {
158
- style(feature) {
159
- if (!feature) return {}
160
- const z = feature.properties.z
161
- const rgba = read.getColorFast(z, level, color)
162
- return {
163
- weight: 3,
164
- opacity: 1,
165
- color: 'red',
166
- stroke: false, // 如果你需要等值线开启他
167
- fillColor: rgba,
168
- fillOpacity: 0.5
169
- }
170
- }
171
- }).addTo(map)
172
-
173
- ```
174
-
175
169
  3. 获取某一个break的等值面示例
176
170
  ```typescript
177
171
  clearMap()
@@ -207,52 +201,38 @@ read.setParams({
207
201
 
208
202
  ```
209
203
 
210
- ### leaflet图层
211
- - 理论上可以流畅的过滤数据或者放大不虚, 这可能是当前包体中显示最优的方案
204
+ ### 类型参照
205
+ > ReadConfig
212
206
 
213
- ```ts
214
- const grid = await loadRasterGrid({
215
- type: 'tif',
216
- url: 'xxx'
217
- })
207
+ | 参数 | 说明 | 类型 | 默认值 |
208
+ |----|----|-----------|-------|
209
+ | convertTemKtoC | 是否将温度从开氏度转换为摄氏度 | `boolean` | false |
210
+ | plusOffset | 数据偏移量 | `number` | 无 |
218
211
 
219
- // micaps4
220
- // const grid = await loadRasterGrid({
221
- // type: 'micaps4',
222
- // url: 'xxx'
223
- // })
212
+ ---
224
213
 
225
- // params
226
- // const grid = await loadRasterGrid({
227
- // type: 'params',
228
- // params: {
229
- // values: Array.from({ length: 512 * 256 }, () => Math.random() * 60 - 30),
230
- // nx: 512,
231
- // ny: 256,
232
- // minLng: 70,
233
- // minLat: 15,
234
- // gjLng: 0.1,
235
- // gjLat: 0.1,
236
- // flipY: true, //是否翻转数据
237
- // valueScale: 1
238
- // }
239
- // })
214
+ > ParamsConfig
240
215
 
241
- const layer = createRasterLeafletLayer({
242
- rendererType: 'webgl2',
243
- grid,
244
- colorStops: legend, // {min: number, max:number, color: string}[]
245
- colorRange: {
246
- minValue: Number(minInput.value), // 过滤的最小值
247
- maxValue: Number(maxInput.value) // 过滤的最大值
248
- },
249
- opacity: 1,
250
- renderMode: 'step',
251
- pane: 'raster-pane'
252
- })
216
+ | 参数 | 说明 | 类型 | 默认值 |
217
+ |--------|----|------------|-----|
218
+ | values | 数据值数组 | `number[]` | [] |
219
+ | nx | 栅格列数 | `number` | 0 |
220
+ | ny | 栅格行数 | `number` | 0 |
221
+ | minLng | 最小经度 | `number` | 0 |
222
+ | minLat | 最小纬度 | `number` | 0 |
223
+ | gjLng | 经度分辨率 | `number` | 0 |
224
+ | gjLat | 纬度分辨率 | `number` | 0 |
225
+
226
+ ---
227
+
228
+ > JSONData
229
+
230
+ | 参数 | 说明 | 类型 | 默认值 |
231
+ |---|---|---|---|
232
+ | lng | 经度 | `number` | 0 |
233
+ | lat | 纬度 | `number` | 0 |
234
+ | val | 数据值 | `number` | 0 |
253
235
 
254
- // layer.setColorRange({ minValue, maxValue }) 动态变化
255
- ```
256
236
 
257
237
  #### @author: wangrl
258
- #### 维护随缘
238
+ #### @email: a790283379@outlook.com