qqsl-ngx-cesium 0.0.1
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/README.md +163 -0
- package/esm2020/map/cesium-defaults.mjs +23 -0
- package/esm2020/map/cesium-map.component.mjs +1544 -0
- package/esm2020/map/cesium-map.module.mjs +18 -0
- package/esm2020/map/fluid-map-layer-renderer.mjs +407 -0
- package/esm2020/map/fluid-map-layer.model.mjs +2 -0
- package/esm2020/map/mesh-geometry-builder.mjs +261 -0
- package/esm2020/map/mesh.model.mjs +2 -0
- package/esm2020/map/public-api.mjs +10 -0
- package/esm2020/map/qqsl-ngx-cesium-map.mjs +5 -0
- package/esm2020/map/river-debug-overlay.mjs +341 -0
- package/esm2020/map/river-depth-field.mjs +416 -0
- package/esm2020/map/river-depth-overlay-material.mjs +174 -0
- package/esm2020/map/river-flow-field.mjs +919 -0
- package/esm2020/map/river-mesh-builder.mjs +1694 -0
- package/esm2020/map/river-solid-material.mjs +547 -0
- package/esm2020/map/river-surface-appearance.mjs +56 -0
- package/esm2020/map/river-surface-sample-debug-overlay.mjs +129 -0
- package/esm2020/public-api.mjs +5 -0
- package/esm2020/qqsl-ngx-cesium.mjs +5 -0
- package/fesm2015/qqsl-ngx-cesium-map.mjs +6558 -0
- package/fesm2015/qqsl-ngx-cesium-map.mjs.map +1 -0
- package/fesm2015/qqsl-ngx-cesium.mjs +6562 -0
- package/fesm2015/qqsl-ngx-cesium.mjs.map +1 -0
- package/fesm2020/qqsl-ngx-cesium-map.mjs +6499 -0
- package/fesm2020/qqsl-ngx-cesium-map.mjs.map +1 -0
- package/fesm2020/qqsl-ngx-cesium.mjs +6503 -0
- package/fesm2020/qqsl-ngx-cesium.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/map/cesium-defaults.d.ts +23 -0
- package/map/cesium-map.component.d.ts +308 -0
- package/map/cesium-map.module.d.ts +8 -0
- package/map/fluid-map-layer-renderer.d.ts +45 -0
- package/map/fluid-map-layer.model.d.ts +77 -0
- package/map/index.d.ts +5 -0
- package/map/mesh-geometry-builder.d.ts +60 -0
- package/map/mesh.model.d.ts +172 -0
- package/map/public-api.d.ts +9 -0
- package/map/river-debug-overlay.d.ts +90 -0
- package/map/river-depth-field.d.ts +39 -0
- package/map/river-depth-overlay-material.d.ts +59 -0
- package/map/river-flow-field.d.ts +148 -0
- package/map/river-mesh-builder.d.ts +236 -0
- package/map/river-solid-material.d.ts +42 -0
- package/map/river-surface-appearance.d.ts +7 -0
- package/map/river-surface-sample-debug-overlay.d.ts +25 -0
- package/package.json +40 -0
- package/public-api.d.ts +1 -0
package/README.md
ADDED
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
# qqsl-ngx-cesium 使用文档
|
|
2
|
+
|
|
3
|
+
`qqsl-ngx-cesium` 是一套基于 Angular + Cesium 的地图/河流渲染组件库,当前主组件为 `NgxCesiumMapComponent`。
|
|
4
|
+
|
|
5
|
+
## 1. 依赖说明
|
|
6
|
+
|
|
7
|
+
- Angular 15.x
|
|
8
|
+
- `cesium@1.118.2`
|
|
9
|
+
- `@angular/common`、`@angular/core`
|
|
10
|
+
|
|
11
|
+
库内部默认会读取 Cesium 资源目录:
|
|
12
|
+
|
|
13
|
+
```ts
|
|
14
|
+
export const CESIUM_ASSET_BASE_URL = '/assets/cesium';
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
所以宿主项目需要提前准备 Cesium 静态资源。
|
|
18
|
+
|
|
19
|
+
## 2. 最小接入
|
|
20
|
+
|
|
21
|
+
### 2.1 引入模块
|
|
22
|
+
|
|
23
|
+
```ts
|
|
24
|
+
import { NgxCesiumMapModule } from 'qqsl-ngx-cesium/map';
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
如果你的项目是 standalone 组件:
|
|
28
|
+
|
|
29
|
+
```ts
|
|
30
|
+
imports: [NgxCesiumMapModule]
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
### 2.2 模板使用
|
|
34
|
+
|
|
35
|
+
```html
|
|
36
|
+
<ngx-cesium-map
|
|
37
|
+
style="width: 100%; height: 100%;"
|
|
38
|
+
[center]="center"
|
|
39
|
+
[riverPath]="riverPath"
|
|
40
|
+
[meshList]="meshList"
|
|
41
|
+
[flowSpeedPoints]="flowSpeedPoints"
|
|
42
|
+
[riverDepthPoints]="riverDepthPoints"
|
|
43
|
+
[tilesetUrl]="tilesetUrl"
|
|
44
|
+
></ngx-cesium-map>
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
### 2.3 常用输入
|
|
48
|
+
|
|
49
|
+
- `center`:初始相机中心点
|
|
50
|
+
- `riverPath`:河道轮廓点
|
|
51
|
+
- `riverWidth`:河宽
|
|
52
|
+
- `meshList`:模型列表
|
|
53
|
+
- `flowSpeedPoints`:分段流速边界点
|
|
54
|
+
- `riverDepthPoints`:水深散点数组,每项为 `{ lng: number | string, lat: number | string, depth: number | string }`
|
|
55
|
+
- `tilesetUrl`:倾斜摄影地址
|
|
56
|
+
- `showRiverDepthGradient`:水深渐变层开关
|
|
57
|
+
- `showFlowSpeedPoints`:流速调试点开关
|
|
58
|
+
- `riverDepthStyle`:水深图层样式。默认 `depthRangeMode: 'auto'`,按当前有效水深动态拉伸色带;如需固定 `0-15m`,传 `{ depthRangeMode: 'fixed', fixedDepthRange: { min: 0, max: 15 } }`
|
|
59
|
+
|
|
60
|
+
## 3. 开发联调方案
|
|
61
|
+
|
|
62
|
+
如果目标是“组件库代码改动后,外部项目立刻看到变化,而且不需要先打包”,推荐直接走源码联调,不走 `ng build` / `yalc`。
|
|
63
|
+
|
|
64
|
+
### 方案 A:同一工作区联调
|
|
65
|
+
|
|
66
|
+
这个仓库里已经配置好了路径别名:
|
|
67
|
+
|
|
68
|
+
- `qqsl-ngx-cesium` -> `./dist/qqsl-ngx-cesium`
|
|
69
|
+
- `qqsl-ngx-cesium/*` -> `./projects/qqsl-ngx-cesium/*`
|
|
70
|
+
|
|
71
|
+
所以在同仓库里的 demo 或其他应用中,可以直接从源码路径导入:
|
|
72
|
+
|
|
73
|
+
```ts
|
|
74
|
+
import { NgxCesiumMapModule } from 'qqsl-ngx-cesium/map';
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
联调时只需要运行宿主应用的开发服务,例如:
|
|
78
|
+
|
|
79
|
+
```bash
|
|
80
|
+
npm run start
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
这样你修改 `projects/qqsl-ngx-cesium/**` 下的代码后,宿主应用会在重新编译时直接吃到最新源码,不需要先构建库包。
|
|
84
|
+
|
|
85
|
+
### 方案 B:其他项目联调,但不打包
|
|
86
|
+
|
|
87
|
+
如果是另一个独立项目,推荐把这个库源码以本地目录或符号链接的方式接进来,再在消费项目的 `tsconfig` 里把包名指向源码目录。
|
|
88
|
+
|
|
89
|
+
示例思路:
|
|
90
|
+
|
|
91
|
+
```json
|
|
92
|
+
{
|
|
93
|
+
"compilerOptions": {
|
|
94
|
+
"paths": {
|
|
95
|
+
"qqsl-ngx-cesium": ["<本地源码路径>/projects/qqsl-ngx-cesium"],
|
|
96
|
+
"qqsl-ngx-cesium/*": ["<本地源码路径>/projects/qqsl-ngx-cesium/*"]
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
然后在消费项目里直接引入:
|
|
103
|
+
|
|
104
|
+
```ts
|
|
105
|
+
import { NgxCesiumMapModule } from 'qqsl-ngx-cesium/map';
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
这类方式的核心是“源码直连”,不是 npm 包安装,所以组件库文件一改,消费项目重新编译后就能看到更新。
|
|
109
|
+
|
|
110
|
+
### 联调建议
|
|
111
|
+
|
|
112
|
+
- 宿主项目保持 `ng serve` 常驻
|
|
113
|
+
- 组件库不要先 `ng build qqsl-ngx-cesium`
|
|
114
|
+
- 需要稳定观察变化时,优先改源码路径联调,而不是推 `dist`
|
|
115
|
+
|
|
116
|
+
## 4. 生产使用方案
|
|
117
|
+
|
|
118
|
+
生产环境建议走标准库发布流程:
|
|
119
|
+
|
|
120
|
+
1. 构建库:
|
|
121
|
+
|
|
122
|
+
```bash
|
|
123
|
+
npm run build:qqsl-ngx-cesium
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
2. 发布到 npm:
|
|
127
|
+
|
|
128
|
+
```bash
|
|
129
|
+
npm run publish:qqsl-ngx-cesium
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
3. 在业务项目中安装并使用:
|
|
133
|
+
|
|
134
|
+
```ts
|
|
135
|
+
import { NgxCesiumMapModule } from 'qqsl-ngx-cesium';
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
如果你的消费项目需要保持和当前仓库一致的源码引用习惯,也可以继续用 `qqsl-ngx-cesium/map`,但前提是你的构建/发布方式已经把该路径纳入可解析范围;生产环境更推荐以包根入口为准。
|
|
139
|
+
|
|
140
|
+
## 5. 运行时注意点
|
|
141
|
+
|
|
142
|
+
- 需要提前准备 Cesium 静态资源,并保证 `CESIUM_ASSET_BASE_URL` 可访问
|
|
143
|
+
- 如果使用倾斜摄影,`tilesetUrl` 要保证跨域和鉴权可用
|
|
144
|
+
- `flowSpeedPoints` 的语义是“从当前边界开始,到下一个边界之前”这一段使用当前点的速度
|
|
145
|
+
- `showFlowSpeedPoints`、`showRiverSamplePoints`、`showRiverDepthGradient` 这些开关适合联调阶段打开
|
|
146
|
+
- `riverDepthPoints` 现在按散点渲染水深,组件会用 KNN + IDW 对水面网格做平滑插值;落在河道外的散点会被忽略。可以参考 `projects/qqsl-ngx-cesium/map/test-depth-data.ts`
|
|
147
|
+
|
|
148
|
+
水深散点示例:
|
|
149
|
+
|
|
150
|
+
```ts
|
|
151
|
+
const riverDepthPoints = [
|
|
152
|
+
{ lng: 120, lat: '12', depth: 20 },
|
|
153
|
+
{ lng: 120.001, lat: 12.001, depth: 12.5 },
|
|
154
|
+
];
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
## 6. 示例入口
|
|
158
|
+
|
|
159
|
+
仓库里的示例页面可以参考:
|
|
160
|
+
|
|
161
|
+
- `projects/demo/src/app/pages/cesium/cesium-test.component.ts`
|
|
162
|
+
|
|
163
|
+
它演示了 `NgxCesiumMapModule` 的基本接入方式,也包含了水深、流速、倾斜摄影等常用输入。
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export const CESIUM_ASSET_BASE_URL = '/assets/cesium';
|
|
2
|
+
export const CESIUM_ION_ACCESS_TOKEN = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiJjMTk2YzRhNy05MmRmLTRkMWYtOTc3Mi1iMjI1ZWM1Y2MyZDkiLCJpZCI6NDExNTU4LCJpYXQiOjE3NzQ5MjMwNzB9.Qe_Do-L3pr0etJ4l_rhXoTQGFNgIqASs3ngsKgtRdoQ';
|
|
3
|
+
export const cesiumDefaultCenter = {
|
|
4
|
+
lng: 120.237,
|
|
5
|
+
lat: 30.247,
|
|
6
|
+
height: 3500,
|
|
7
|
+
};
|
|
8
|
+
export const defaultRiverWidth = 900;
|
|
9
|
+
export const defaultRiverSpeed = 0.35;
|
|
10
|
+
export const defaultRiverSegmentSpeed = 1.2;
|
|
11
|
+
export const defaultRiverFoamStrength = 1.15;
|
|
12
|
+
export const defaultRiverWaterColor = '#1b6f9b';
|
|
13
|
+
export const defaultRiverChannelTextureUrl = 'https://i.mji.rip/2026/04/01/ac37e20edaef28e633d67708daa5ee80.jpeg';
|
|
14
|
+
export const defaultRiverEntityHeight = 0;
|
|
15
|
+
// 河床层高度 = baseHeight + defaultRiverBedOffset。
|
|
16
|
+
// 负值表示河床在基准面之下,正值表示之上。
|
|
17
|
+
// 必须小于 waterOffset,否则几何体零厚度导致 z-fighting,水面波浪效果消失。
|
|
18
|
+
export const defaultRiverBedOffset = 0;
|
|
19
|
+
// 河面层高度 = baseHeight + defaultRiverSurfaceOffset。
|
|
20
|
+
// 正值表示水面在基准面之上。河流实体厚度 = waterOffset - bedOffset。
|
|
21
|
+
export const defaultRiverSurfaceOffset = 3;
|
|
22
|
+
export const defaultRiverBankFadeWidth = 4;
|
|
23
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2VzaXVtLWRlZmF1bHRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvcXFzbC1uZ3gtY2VzaXVtL21hcC9jZXNpdW0tZGVmYXVsdHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBWUEsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsZ0JBQWdCLENBQUM7QUFDdEQsTUFBTSxDQUFDLE1BQU0sdUJBQXVCLEdBQUcsdUxBQXVMLENBQUM7QUFDL04sTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQW9CO0lBQ2xELEdBQUcsRUFBRSxPQUFPO0lBQ1osR0FBRyxFQUFFLE1BQU07SUFDWCxNQUFNLEVBQUUsSUFBSTtDQUNiLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxHQUFHLENBQUM7QUFDckMsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxDQUFDO0FBQ3RDLE1BQU0sQ0FBQyxNQUFNLHdCQUF3QixHQUFHLEdBQUcsQ0FBQztBQUM1QyxNQUFNLENBQUMsTUFBTSx3QkFBd0IsR0FBRyxJQUFJLENBQUM7QUFDN0MsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQUcsU0FBUyxDQUFDO0FBQ2hELE1BQU0sQ0FBQyxNQUFNLDZCQUE2QixHQUFHLG9FQUFvRSxDQUFDO0FBQ2xILE1BQU0sQ0FBQyxNQUFNLHdCQUF3QixHQUFHLENBQUMsQ0FBQztBQUMxQyw4Q0FBOEM7QUFDOUMsdUJBQXVCO0FBQ3ZCLG1EQUFtRDtBQUNuRCxNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBRyxDQUFDLENBQUM7QUFDdkMsa0RBQWtEO0FBQ2xELGlEQUFpRDtBQUNqRCxNQUFNLENBQUMsTUFBTSx5QkFBeUIsR0FBRyxDQUFDLENBQUM7QUFDM0MsTUFBTSxDQUFDLE1BQU0seUJBQXlCLEdBQUcsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBDZXNpdW1NYXBDZW50ZXIge1xuICBsbmc6IG51bWJlcjtcbiAgbGF0OiBudW1iZXI7XG4gIGhlaWdodD86IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDZXNpdW1NYXBQb2ludCB7XG4gIGxuZzogbnVtYmVyO1xuICBsYXQ6IG51bWJlcjtcbiAgaGVpZ2h0PzogbnVtYmVyO1xufVxuXG5leHBvcnQgY29uc3QgQ0VTSVVNX0FTU0VUX0JBU0VfVVJMID0gJy9hc3NldHMvY2VzaXVtJztcbmV4cG9ydCBjb25zdCBDRVNJVU1fSU9OX0FDQ0VTU19UT0tFTiA9ICdleUpoYkdjaU9pSklVekkxTmlJc0luUjVjQ0k2SWtwWFZDSjkuZXlKcWRHa2lPaUpqTVRrMll6UmhOeTA1TW1SbUxUUmtNV1l0T1RjM01pMWlNakkxWldNMVkyTXlaRGtpTENKcFpDSTZOREV4TlRVNExDSnBZWFFpT2pFM056UTVNak13TnpCOS5RZV9Eby1MM3ByMGV0SjRsX3JoWG9UUUdGTmdJcUFTczNuZ3NLZ3RSZG9RJztcbmV4cG9ydCBjb25zdCBjZXNpdW1EZWZhdWx0Q2VudGVyOiBDZXNpdW1NYXBDZW50ZXIgPSB7XG4gIGxuZzogMTIwLjIzNyxcbiAgbGF0OiAzMC4yNDcsXG4gIGhlaWdodDogMzUwMCxcbn07XG5cbmV4cG9ydCBjb25zdCBkZWZhdWx0Uml2ZXJXaWR0aCA9IDkwMDtcbmV4cG9ydCBjb25zdCBkZWZhdWx0Uml2ZXJTcGVlZCA9IDAuMzU7XG5leHBvcnQgY29uc3QgZGVmYXVsdFJpdmVyU2VnbWVudFNwZWVkID0gMS4yO1xuZXhwb3J0IGNvbnN0IGRlZmF1bHRSaXZlckZvYW1TdHJlbmd0aCA9IDEuMTU7XG5leHBvcnQgY29uc3QgZGVmYXVsdFJpdmVyV2F0ZXJDb2xvciA9ICcjMWI2ZjliJztcbmV4cG9ydCBjb25zdCBkZWZhdWx0Uml2ZXJDaGFubmVsVGV4dHVyZVVybCA9ICdodHRwczovL2kubWppLnJpcC8yMDI2LzA0LzAxL2FjMzdlMjBlZGFlZjI4ZTYzM2Q2NzcwOGRhYTVlZTgwLmpwZWcnO1xuZXhwb3J0IGNvbnN0IGRlZmF1bHRSaXZlckVudGl0eUhlaWdodCA9IDA7XG4vLyDmsrPluorlsYLpq5jluqYgPSBiYXNlSGVpZ2h0ICsgZGVmYXVsdFJpdmVyQmVkT2Zmc2V044CCXG4vLyDotJ/lgLzooajnpLrmsrPluorlnKjln7rlh4bpnaLkuYvkuIvvvIzmraPlgLzooajnpLrkuYvkuIrjgIJcbi8vIOW/hemhu+Wwj+S6jiB3YXRlck9mZnNldO+8jOWQpuWImeWHoOS9leS9k+mbtuWOmuW6puWvvOiHtCB6LWZpZ2h0aW5n77yM5rC06Z2i5rOi5rWq5pWI5p6c5raI5aSx44CCXG5leHBvcnQgY29uc3QgZGVmYXVsdFJpdmVyQmVkT2Zmc2V0ID0gMDtcbi8vIOays+mdouWxgumrmOW6piA9IGJhc2VIZWlnaHQgKyBkZWZhdWx0Uml2ZXJTdXJmYWNlT2Zmc2V044CCXG4vLyDmraPlgLzooajnpLrmsLTpnaLlnKjln7rlh4bpnaLkuYvkuIrjgILmsrPmtYHlrp7kvZPljprluqYgPSB3YXRlck9mZnNldCAtIGJlZE9mZnNldOOAglxuZXhwb3J0IGNvbnN0IGRlZmF1bHRSaXZlclN1cmZhY2VPZmZzZXQgPSAzO1xuZXhwb3J0IGNvbnN0IGRlZmF1bHRSaXZlckJhbmtGYWRlV2lkdGggPSA0O1xuIl19
|