@skzz/components-gis 0.1.5 → 0.1.6

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 (37) hide show
  1. package/dist/assets/twinPreviewWorker-DvpSZYqE.js +3 -0
  2. package/dist/assets/twinTextureMipWorker-BWoFEUdX.js +3 -0
  3. package/dist/index.d.ts +5 -4
  4. package/dist/index.es.js +380 -360
  5. package/dist/index.umd.js +209 -5
  6. package/dist/tw2Parser-Dxs5xGvB.js +115 -0
  7. package/dist/zz-layer/zz-layer-shp-zzts/shpZztsBounds.d.ts +19 -0
  8. package/dist/zz-layer/zz-layer-shp-zzts/shpZztsGeometry.d.ts +27 -0
  9. package/dist/zz-layer/zz-layer-shp-zzts/shpZztsGeometryWorker.d.ts +1 -0
  10. package/dist/zz-layer/zz-layer-shp-zzts/shpZztsPreviewBudget.d.ts +78 -0
  11. package/dist/zz-layer/zz-layer-shp-zzts/shpZztsRenderer.d.ts +217 -22
  12. package/dist/zz-layer/zz-layer-shp-zzts/shpZztsViewState.d.ts +20 -0
  13. package/dist/zz-layer/zz-layer-zzts3dv2/entityGridV2.d.ts +277 -0
  14. package/dist/zz-layer/zz-layer-zzts3dv2/index.vue.d.ts +1 -1
  15. package/dist/zz-layer/zz-layer-zzts3dv2/tw2Parser.d.ts +7 -0
  16. package/dist/zz-layer/zz-layer-zzts3dv2/twinAdaptiveMesh.d.ts +3 -0
  17. package/dist/zz-layer/zz-layer-zzts3dv2/twinCoarseLod.d.ts +4 -0
  18. package/dist/zz-layer/zz-layer-zzts3dv2/twinEnvironmentLighting.d.ts +16 -0
  19. package/dist/zz-layer/zz-layer-zzts3dv2/twinImagePixels.d.ts +6 -0
  20. package/dist/zz-layer/zz-layer-zzts3dv2/twinPagedIndex.d.ts +8 -0
  21. package/dist/zz-layer/zz-layer-zzts3dv2/twinParsePool.d.ts +10 -0
  22. package/dist/zz-layer/zz-layer-zzts3dv2/twinPreviewWorker.d.ts +1 -1
  23. package/dist/zz-layer/zz-layer-zzts3dv2/twinRegionalIndex.d.ts +23 -0
  24. package/dist/zz-layer/zz-layer-zzts3dv2/twinResourceBatch.d.ts +34 -0
  25. package/dist/zz-layer/zz-layer-zzts3dv2/twinTextureAppearance.d.ts +89 -0
  26. package/dist/zz-layer/zz-layer-zzts3dv2/twinTextureMipWorker.d.ts +1 -0
  27. package/dist/zz-layer/zz-layer-zzts3dv2/twinVisualRuntime.d.ts +107 -0
  28. package/dist/zz-layer-shp-zzts-Dr3Gxeba.js +1881 -0
  29. package/dist/{zz-layer-zzts3d-DqZmLdW3.js → zz-layer-zzts3d-CsIWse3P.js} +1 -1
  30. package/dist/{zz-layer-zzts3d-las-hNa-nqxq.js → zz-layer-zzts3d-las-D3w01aGe.js} +6 -5
  31. package/dist/{zz-layer-zzts3d-point-DrB5Uuwa.js → zz-layer-zzts3d-point-BjaTPTqj.js} +6 -4
  32. package/dist/zz-layer-zzts3dv2-DFXCOaMe.js +4019 -0
  33. package/dist/{zzts3dLayerSignature-Cnu6KIys.js → zzts3dLayerSignature-DzrPeJTd.js} +2 -0
  34. package/package.json +4 -3
  35. package/dist/assets/twinPreviewWorker-COILIqOa.js +0 -1
  36. package/dist/zz-layer-shp-zzts-D8BjI5tI.js +0 -1323
  37. package/dist/zz-layer-zzts3dv2-D5udnVGT.js +0 -913
@@ -0,0 +1,115 @@
1
+ import { t as e } from "./pako.esm-D6zcBi67.js";
2
+ //#region src/zz-layer/zz-layer-zzts3dv2/tw2Parser.js
3
+ var t = 64 * 1024 * 1024, n = 2e5;
4
+ function r(e, t) {
5
+ if (!e) throw Error(`TW2 ${t}`);
6
+ }
7
+ function i(t, n) {
8
+ if (t[0] !== 31 || t[1] !== 139) return t;
9
+ let i = [], a = 0, o = new e.Inflate({ chunkSize: 65536 });
10
+ o.onData = (e) => {
11
+ a += e.byteLength, r(a <= n, "解压数据超过限制"), i.push(e);
12
+ }, o.push(t, !0), r(!o.err && o.ended, "gzip 数据无效");
13
+ let s = new Uint8Array(a), c = 0;
14
+ for (let e of i) s.set(e, c), c += e.length;
15
+ return s;
16
+ }
17
+ function a(e, a, o = t, s = n) {
18
+ o = Math.min(Number(o) || 67108864, t), s = Math.min(Number(s) || 2e5, n);
19
+ let c = e instanceof Uint8Array ? e : new Uint8Array(e);
20
+ r(c.byteLength <= o, "编码数据超过限制");
21
+ let l = i(c, o);
22
+ r(l.byteLength >= 16 && l.byteLength <= o, "分片数据大小无效");
23
+ let u = new DataView(l.buffer, l.byteOffset, l.byteLength);
24
+ r(u.getUint32(0, !0) === 3299156, "magic 不匹配");
25
+ let d = u.getUint16(4, !0), f = u.getUint8(6), p = u.getUint32(12, !0);
26
+ r([
27
+ 1,
28
+ 2,
29
+ 3
30
+ ].includes(d), "协议版本不受支持"), r(f >= 1 && f <= 5, "LOD 无效"), r(a == null || Number(a) === f, "请求 LOD 与文件不一致"), r(p <= s, "实体数量超过限制"), d === 3 && r(u.getUint16(10, !0) > 0 && u.getUint16(8, !0) < u.getUint16(10, !0), "分片编号无效");
31
+ let m = [], h = 16, g = f <= 3 ? .01 : 1;
32
+ for (let e = 0; e < p; e++) {
33
+ let e = h, t = d === 1 ? 16 : d === 2 ? 48 : 96;
34
+ r(h + t <= l.length, "实体头越界");
35
+ let n = u.getBigUint64(h + (d === 1 ? 0 : 8), !0), i = d === 1 ? u.getUint32(h + 8, !0) / 3 : u.getUint32(h + 16, !0), a = u.getUint32(h + (d === 1 ? 12 : 20), !0), o = d === 1 ? 0 : u.getUint32(h + 24, !0), s = d === 1 ? 0 : u.getUint32(h + 32, !0), c = d === 1 ? 0 : u.getUint32(h + 36, !0), f = d === 3 ? u.getUint32(h + 40, !0) : 0, p = d === 3 ? u.getUint32(h + 44, !0) : 0, _ = d === 3 ? u.getUint32(h + 76, !0) : 0;
36
+ r(Number.isInteger(i) && i >= 0 && a % 3 == 0, "几何数量无效");
37
+ for (let [e, t] of [
38
+ [s, 2],
39
+ [c, 4],
40
+ [f, 3],
41
+ [p, 4],
42
+ [_, 2]
43
+ ]) r(e === 0 || e === i * t, "属性长度无效");
44
+ let v = i * 12 + a * 4 + s * 4 + c + f * 4 + p * 4 + _ * 4 + o * 16, y = d === 1 ? t + v : u.getUint32(h, !0);
45
+ r(y === t + v && e + y <= l.length, "实体记录长度无效");
46
+ let b = d === 1 ? void 0 : l.slice(h + 28, h + 32), x = [
47
+ 0,
48
+ 0,
49
+ 0
50
+ ], S = 0;
51
+ if (d === 3) {
52
+ r(u.getUint32(h + 80, !0) === 96 && u.getUint32(h + 84, !0) === 0 && u.getBigUint64(h + 88, !0) === 0n, "v3 头无效");
53
+ let e = u.getUint32(h + 4, !0), t = [
54
+ s,
55
+ c,
56
+ f,
57
+ p,
58
+ _
59
+ ];
60
+ r((e & -32) == 0 && t.every((t, n) => !!(e & 1 << n) == t > 0), "属性标记不一致"), x = [
61
+ u.getFloat64(h + 48, !0),
62
+ u.getFloat64(h + 56, !0),
63
+ u.getFloat64(h + 64, !0)
64
+ ], S = u.getFloat32(h + 72, !0), r(x.every(Number.isFinite) && Number.isFinite(S) && S >= 0, "局部坐标原点或误差无效");
65
+ }
66
+ h += t;
67
+ let C = new Float64Array(i * 3);
68
+ for (let e = 0; e < C.length; e++) {
69
+ let t = d === 3 ? u.getFloat32(h, !0) : u.getInt32(h, !0) * g;
70
+ r(Number.isFinite(t), "位置非有限数"), C[e] = t + x[e % 3], h += 4;
71
+ }
72
+ let w = new Uint32Array(a);
73
+ for (let e = 0; e < a; e++) w[e] = u.getUint32(h, !0), h += 4, r(w[e] < i, "索引越界");
74
+ let T = (e) => {
75
+ if (!e) return null;
76
+ let t = new Float32Array(e);
77
+ for (let n = 0; n < e; n++) t[n] = u.getFloat32(h, !0), h += 4, r(Number.isFinite(t[n]), "属性非有限数");
78
+ return t;
79
+ }, E = T(s), D = c ? l.slice(h, h + c) : null;
80
+ h += c;
81
+ let O = T(f), k = T(p), A = T(_);
82
+ if (k) for (let e = 3; e < k.length; e += 4) r(Math.abs(Math.abs(k[e]) - 1) < .001, "切线手性无效");
83
+ let j = [];
84
+ for (let e = 0; e < o; e++) {
85
+ let e = u.getUint32(h + 4, !0), t = u.getUint32(h + 8, !0);
86
+ r(e % 3 == 0 && t % 3 == 0 && e + t <= a, "子网格索引范围无效"), j.push({
87
+ materialId: u.getUint32(h, !0),
88
+ firstIndex: e,
89
+ indexCount: t,
90
+ fallback: l.slice(h + 12, h + 16)
91
+ }), h += 16;
92
+ }
93
+ let M = {
94
+ id: n,
95
+ positions: C,
96
+ indices: w
97
+ };
98
+ d >= 2 && Object.assign(M, {
99
+ uv: E,
100
+ color: D,
101
+ subMeshes: j,
102
+ fallback: b
103
+ }), d === 3 && Object.assign(M, {
104
+ normals: O,
105
+ tangents: k,
106
+ uv1: A,
107
+ origin: x,
108
+ geometricErrorMeters: S,
109
+ version: d
110
+ }), m.push(M);
111
+ }
112
+ return r(h === l.length, "分片包含未知内容"), m;
113
+ }
114
+ //#endregion
115
+ export { n, a as r, t };
@@ -0,0 +1,19 @@
1
+ /** GeoSOT/Cesium both represent a date-line crossing as west > east. */
2
+ export function normalizePreviewBounds(range: any): {
3
+ west: number;
4
+ south: number;
5
+ east: number;
6
+ north: number;
7
+ } | null;
8
+ /**
9
+ * Intersect wrapped ranges without treating the date line as an empty viewport.
10
+ * Two long arcs can intersect in two disconnected pieces. The existing planner
11
+ * accepts one rectangle, so return their smallest conservative circular envelope;
12
+ * this can include extra coverage, but never drops one of the actual intersections.
13
+ */
14
+ export function intersectPreviewBounds(first: any, second: any): {
15
+ west: number;
16
+ south: number;
17
+ east: number;
18
+ north: number;
19
+ } | null;
@@ -0,0 +1,27 @@
1
+ /**
2
+ * 从三角网索引提取边界折线:被仅 1 个三角形引用的边即边界边,
3
+ * 再按邻接关系连接成折线/闭合环,供面要素边线渲染。
4
+ * 内部边被 2 个三角形共享不会出现;非流形/自交网格退化时贪心连接,视觉仍正确。
5
+ */
6
+ export function extractBoundaryPolylines(indices: any, vertexCount: any): number[][];
7
+ /**
8
+ * 解析矢量瓦片二进制数据。
9
+ *
10
+ * 后端统一使用小端序(LE)组装:
11
+ * 外层: [tileCount(4B LE)][dataLen(4B LE)][rawTileData]
12
+ *
13
+ * rawTileData 存在三种格式(通过 dataLen 自动检测):
14
+ * V2(带 featureId + geometryKind): [fidLen(4B)][fid(UTF-8)][kind:1B][posLen(4B)][idxLen(4B)][positions][indices]
15
+ * 新格式(带 featureId,无 geometryKind): [fidLen(4B)][fid(UTF-8)][posLen(4B)][idxLen(4B)][positions][indices]
16
+ * 旧格式(无 featureId): [posLen(4B)][idxLen(4B)][positions][indices]
17
+ *
18
+ * 前端通过 slice + TypedArray 直接映射 LE 二进制数据,无需逐元素循环做字节序转换。
19
+ */
20
+ export function parseVectorTileData(rawData: any): any[];
21
+ /**
22
+ * 虚拟线样式专用:V2 线由左右成对顶点、每段两个三角形组成。
23
+ * 按明确索引模式还原中心线,MultiLine 的独立段分别返回;无法确认格式时保留原网格。
24
+ */
25
+ export function extractVirtualLinePaths(geometry: any): number[][][];
26
+ export function decodeTile(data: any): any[];
27
+ export function geometryBatches(geometries: any, maxFeatures?: number): any[][];
@@ -0,0 +1,78 @@
1
+ /**
2
+ * One renderer view round: plan 1 + first tile attempts 15 + colors 2 + retries 2.
3
+ * This counts renderer HTTP calls only, excluding upstream metadata/style and base maps.
4
+ * A failed or already dispatched cancelled call stays charged. Each retry is a new call.
5
+ * releaseReserved(kind) donates unused slots to retries after that phase has finished;
6
+ * the plan/color/tile hard caps remain intact. Unused slots never cause extra tile calls.
7
+ */
8
+ export function createPreviewRequestBudget({ maxRequests, reserve }?: {
9
+ maxRequests?: number | undefined;
10
+ reserve?: {} | undefined;
11
+ }): {
12
+ maxRequests: number;
13
+ limits: Readonly<{
14
+ plan: any;
15
+ color: any;
16
+ tile: number;
17
+ retry: number;
18
+ }>;
19
+ signal: AbortSignal;
20
+ readonly used: number;
21
+ readonly remaining: number;
22
+ readonly usedByKind: {
23
+ plan: number;
24
+ tile: number;
25
+ color: number;
26
+ retry: number;
27
+ };
28
+ available(kind?: string): number;
29
+ consume(kind?: string): void;
30
+ releaseReserved(kind: any): void;
31
+ cancel(reason: any): void;
32
+ };
33
+ /**
34
+ * FIFO page-wide HTTP pool. An active abort keeps its permit until the transport
35
+ * settles, even if the task ignores abort: cancellation must not create extra load.
36
+ */
37
+ export function createPreviewRequestPool({ concurrency, maxQueued, }?: {
38
+ concurrency?: number | undefined;
39
+ maxQueued?: number | undefined;
40
+ }): {
41
+ concurrency: number;
42
+ maxQueued: number;
43
+ readonly active: number;
44
+ readonly queued: number;
45
+ run(task: any, { signal }?: {}): Promise<any>;
46
+ };
47
+ /**
48
+ * Await cache lookup before calling. task(signal) dispatches exactly one HTTP call.
49
+ * Charge immediately before dispatch, after obtaining a permit and checking abort.
50
+ * Sync throws remain charged because a transport may have already dispatched.
51
+ */
52
+ export function runBudgetedPreviewRequest({ budget, signal }: {
53
+ budget: any;
54
+ signal: any;
55
+ }, task: any, { kind, pool }?: {
56
+ kind?: string | undefined;
57
+ pool?: {
58
+ concurrency: number;
59
+ maxQueued: number;
60
+ readonly active: number;
61
+ readonly queued: number;
62
+ run(task: any, { signal }?: {}): Promise<any>;
63
+ } | undefined;
64
+ }): Promise<any>;
65
+ /** Legacy empty plans are ambiguous. Only an explicit no-data state can clear a view. */
66
+ export function classifyPreviewPlan(payload: any): "ready" | "failed" | "no-data" | "deferred";
67
+ /** All planned tiles must have succeeded and explicitly decoded to empty geometry. */
68
+ export function areAllPreviewTilesEmpty(results: any): boolean;
69
+ export const SHP_ZZTS_PREVIEW_MAX_REQUESTS: 20;
70
+ export const SHP_ZZTS_PREVIEW_CONCURRENCY: 4;
71
+ export const SHP_ZZTS_PREVIEW_MAX_QUEUED: 128;
72
+ export namespace sharedPreviewRequestPool {
73
+ export { concurrency };
74
+ export { maxQueued };
75
+ export const active: number;
76
+ export const queued: number;
77
+ export function run(task: any, { signal }?: {}): Promise<any>;
78
+ }
@@ -1,11 +1,7 @@
1
1
  import { IndexedDBManager } from '@skzz/libs-base';
2
2
  /** 透明度/栈位变化可原地更新;瓦片地址、范围、配色变化需要重建 */
3
3
  export function canReuseShpZztsLayer(layer: any, options?: {}): boolean;
4
- export function initLayer(viewer: any, options: any): Promise<ShpZztsLayer | null>;
5
- export function removeLayer(id: any): void;
6
- export function getLayer(id: any): any;
7
- export function removeAllLayers(): void;
8
- declare class ShpZztsLayer {
4
+ export class ShpZztsLayer {
9
5
  constructor(viewer: any, options?: {});
10
6
  viewer: any;
11
7
  id: any;
@@ -18,6 +14,8 @@ declare class ShpZztsLayer {
18
14
  fetchConcurrency: number;
19
15
  bulkTileThreshold: number;
20
16
  pointSize: number;
17
+ virtualLineStyle: any;
18
+ virtualPointStyle: any;
21
19
  displayRange: {
22
20
  west: number;
23
21
  south: number;
@@ -46,8 +44,45 @@ declare class ShpZztsLayer {
46
44
  lodPrimitives: Map<any, any>;
47
45
  transitionAnimId: number | null;
48
46
  tileCache: Map<any, any>;
47
+ geometryWorker: any;
48
+ geometryTasks: Map<any, any>;
49
+ geometryTaskId: number;
49
50
  bulkCache: Map<any, any>;
50
51
  activeAbort: AbortController | null;
52
+ _previewContext: {
53
+ budget: {
54
+ maxRequests: number;
55
+ limits: Readonly<{
56
+ plan: any;
57
+ color: any;
58
+ tile: number;
59
+ retry: number;
60
+ }>;
61
+ signal: AbortSignal;
62
+ readonly used: number;
63
+ readonly remaining: number;
64
+ readonly usedByKind: {
65
+ plan: number;
66
+ tile: number;
67
+ color: number;
68
+ retry: number;
69
+ };
70
+ available(kind?: string): number;
71
+ consume(kind?: string): void;
72
+ releaseReserved(kind: any): void;
73
+ cancel(reason: any): void;
74
+ };
75
+ signal: AbortSignal;
76
+ rawBytes: number;
77
+ bounded: boolean;
78
+ } | null;
79
+ _activePreviewLoad: any;
80
+ previewStatus: {
81
+ state: string;
82
+ requests: number;
83
+ };
84
+ _statusElement: HTMLDivElement | null;
85
+ onPreviewStatus: any;
51
86
  renderRequestToken: number;
52
87
  debounceTimer: number | null;
53
88
  destroyed: boolean;
@@ -64,14 +99,6 @@ declare class ShpZztsLayer {
64
99
  lodLevel: any;
65
100
  geometries: any;
66
101
  colorMap: Map<any, any>;
67
- } | {
68
- lodLevel: any;
69
- geometries: any;
70
- colorMap: Map<any, any>;
71
- } | {
72
- lodLevel: any;
73
- geometries: any[];
74
- colorMap: Map<any, any>;
75
102
  } | null;
76
103
  _hiddenRebuildPending: boolean;
77
104
  _hiddenRebuildQueued: boolean;
@@ -83,14 +110,120 @@ declare class ShpZztsLayer {
83
110
  _normAlpha(val: any): number;
84
111
  /** 解析外部传入的颜色,未配置时回退默认淡蓝色 */
85
112
  _resolveColor(): Cesium.Color;
113
+ _setPreviewStatus(state: any, message?: string, context?: {
114
+ budget: {
115
+ maxRequests: number;
116
+ limits: Readonly<{
117
+ plan: any;
118
+ color: any;
119
+ tile: number;
120
+ retry: number;
121
+ }>;
122
+ signal: AbortSignal;
123
+ readonly used: number;
124
+ readonly remaining: number;
125
+ readonly usedByKind: {
126
+ plan: number;
127
+ tile: number;
128
+ color: number;
129
+ retry: number;
130
+ };
131
+ available(kind?: string): number;
132
+ consume(kind?: string): void;
133
+ releaseReserved(kind: any): void;
134
+ cancel(reason: any): void;
135
+ };
136
+ signal: AbortSignal;
137
+ rawBytes: number;
138
+ bounded: boolean;
139
+ } | null): void;
140
+ _previewRequest(config: any, context?: {
141
+ budget: {
142
+ maxRequests: number;
143
+ limits: Readonly<{
144
+ plan: any;
145
+ color: any;
146
+ tile: number;
147
+ retry: number;
148
+ }>;
149
+ signal: AbortSignal;
150
+ readonly used: number;
151
+ readonly remaining: number;
152
+ readonly usedByKind: {
153
+ plan: number;
154
+ tile: number;
155
+ color: number;
156
+ retry: number;
157
+ };
158
+ available(kind?: string): number;
159
+ consume(kind?: string): void;
160
+ releaseReserved(kind: any): void;
161
+ cancel(reason: any): void;
162
+ };
163
+ signal: AbortSignal;
164
+ rawBytes: number;
165
+ bounded: boolean;
166
+ } | null, kind?: string): Promise<any>;
86
167
  isServiceColorEnabled(): boolean;
87
168
  _collectFeatureIds(geoms?: any[]): string[];
88
169
  /** 只读内存配色缓存,不打网。渐进上屏在瓦片查色之后调用。 */
89
170
  _colorMapFromCache(geoms?: any[]): Map<any, any>;
90
171
  _ingestModelColorRows(rows?: any[]): number;
91
172
  _resetServiceColorIndex(): void;
92
- _fetchAllServiceColors(): Promise<number>;
93
- _ensureServiceColorIndex(): any;
173
+ _fetchAllServiceColors(context?: {
174
+ budget: {
175
+ maxRequests: number;
176
+ limits: Readonly<{
177
+ plan: any;
178
+ color: any;
179
+ tile: number;
180
+ retry: number;
181
+ }>;
182
+ signal: AbortSignal;
183
+ readonly used: number;
184
+ readonly remaining: number;
185
+ readonly usedByKind: {
186
+ plan: number;
187
+ tile: number;
188
+ color: number;
189
+ retry: number;
190
+ };
191
+ available(kind?: string): number;
192
+ consume(kind?: string): void;
193
+ releaseReserved(kind: any): void;
194
+ cancel(reason: any): void;
195
+ };
196
+ signal: AbortSignal;
197
+ rawBytes: number;
198
+ bounded: boolean;
199
+ } | null): Promise<number>;
200
+ _ensureServiceColorIndex(context?: {
201
+ budget: {
202
+ maxRequests: number;
203
+ limits: Readonly<{
204
+ plan: any;
205
+ color: any;
206
+ tile: number;
207
+ retry: number;
208
+ }>;
209
+ signal: AbortSignal;
210
+ readonly used: number;
211
+ readonly remaining: number;
212
+ readonly usedByKind: {
213
+ plan: number;
214
+ tile: number;
215
+ color: number;
216
+ retry: number;
217
+ };
218
+ available(kind?: string): number;
219
+ consume(kind?: string): void;
220
+ releaseReserved(kind: any): void;
221
+ cancel(reason: any): void;
222
+ };
223
+ signal: AbortSignal;
224
+ rawBytes: number;
225
+ bounded: boolean;
226
+ } | null): any;
94
227
  _cssToCesiumColor(css: any): Cesium.Color | null;
95
228
  /** 配色到齐后原地改已上屏图元颜色,不拆建 */
96
229
  _applyServiceColorsInPlace(): void;
@@ -130,7 +263,7 @@ declare class ShpZztsLayer {
130
263
  */
131
264
  _swapFirstPaintGeoms(geoms: any, lodLevel: any, isActive: any): Promise<any>;
132
265
  /**
133
- * 同 LOD 双缓冲换挂:新图元先 defer 构建,就绪后同帧移除旧图元再挂新图元。
266
+ * 同 LOD 双缓冲换挂:新图元分帧隐藏预热,就绪后同帧移除旧图元并显示新图元。
134
267
  * 令牌失效时只丢弃半成品,不拆当前画面。
135
268
  */
136
269
  _swapLodPrimitives(lodLevel: any, newEntries: any, isActive: any): boolean;
@@ -139,6 +272,8 @@ declare class ShpZztsLayer {
139
272
  _readIdbBuffer(id: any): Promise<ArrayBuffer | SharedArrayBuffer | undefined>;
140
273
  _writeIdbBuffer(id: any, data: any): void;
141
274
  _parseTileBuffer(data: any): any[];
275
+ _decodeTileAsync(data: any, signal: any): Promise<any>;
276
+ _stopGeometryWorker(error: any): void;
142
277
  /**
143
278
  * 图例显隐变化:用最近一次成功加载的视窗数据(_lastViewData)双缓冲重建——
144
279
  * 全程不发 calTiles/瓦片请求;新图元在旧图元保持显示期间构建,就绪后同帧换挂,画面无空白期。
@@ -151,24 +286,80 @@ declare class ShpZztsLayer {
151
286
  * 多次 flush 的图元累积到同一列表(lodPrimitives 只认这个列表),
152
287
  * 不传则使用本次调用的局部列表(一次性渲染路径)。
153
288
  * @param renderOptions {deferScene, onComplete} 双缓冲重建选项:
154
- * deferScene=true 时图元只构建不挂场景,全部就绪后由 onComplete 统一同帧换挂。
289
+ * deferScene=true 时逐批隐藏挂载,全部就绪后由 onComplete 统一切换显示。
155
290
  */
156
291
  _renderBatched(geometries: any, lodLevel: any, initialAlpha: any, onReady: any, colorMap: any, entriesSink: any, renderOptions?: any): any;
157
- _getVectorTileData(geosot: any, level: any, signal: any): Promise<{
292
+ _getVectorTileData(geosot: any, level: any, signal: any, context?: {
293
+ budget: {
294
+ maxRequests: number;
295
+ limits: Readonly<{
296
+ plan: any;
297
+ color: any;
298
+ tile: number;
299
+ retry: number;
300
+ }>;
301
+ signal: AbortSignal;
302
+ readonly used: number;
303
+ readonly remaining: number;
304
+ readonly usedByKind: {
305
+ plan: number;
306
+ tile: number;
307
+ color: number;
308
+ retry: number;
309
+ };
310
+ available(kind?: string): number;
311
+ consume(kind?: string): void;
312
+ releaseReserved(kind: any): void;
313
+ cancel(reason: any): void;
314
+ };
315
+ signal: AbortSignal;
316
+ rawBytes: number;
317
+ bounded: boolean;
318
+ } | null, kind?: string): Promise<{
158
319
  geosot: any;
159
- data: any;
320
+ data: ArrayBuffer;
160
321
  }>;
161
322
  /**
162
323
  * 拉取单个瓦片并解析为几何体(内存 LRU → IndexedDB → HTTP)。
163
324
  * 空瓦片也缓存(空数组 / 空 ArrayBuffer):该格网本 LOD 无要素,回看不再重复请求。
164
325
  */
165
- _fetchTileGeometries(geosot: any, level: any, signal: any): Promise<any>;
326
+ _fetchTileGeometries(geosot: any, level: any, signal: any, context?: {
327
+ budget: {
328
+ maxRequests: number;
329
+ limits: Readonly<{
330
+ plan: any;
331
+ color: any;
332
+ tile: number;
333
+ retry: number;
334
+ }>;
335
+ signal: AbortSignal;
336
+ readonly used: number;
337
+ readonly remaining: number;
338
+ readonly usedByKind: {
339
+ plan: number;
340
+ tile: number;
341
+ color: number;
342
+ retry: number;
343
+ };
344
+ available(kind?: string): number;
345
+ consume(kind?: string): void;
346
+ releaseReserved(kind: any): void;
347
+ cancel(reason: any): void;
348
+ };
349
+ signal: AbortSignal;
350
+ rawBytes: number;
351
+ bounded: boolean;
352
+ } | null, kind?: string): Promise<any>;
353
+ _rememberTileGeometries(key: any, geometries: any): any;
166
354
  /**
167
355
  * 整图层批量拉取:新后端 /layer/3d/getVectorLayerData 一次返回该 LOD 全部要素。
168
356
  * 与逐瓦片响应同一信封格式,复用同一解析器;结果按 LOD 缓存(仅缓存非空结果)。
169
357
  */
170
358
  _getLayerGeometries(level: any, signal: any): Promise<any>;
171
- loadAndRender(): Promise<void>;
359
+ _commitPreviewRecords(records: any, geometries: any, lodLevel: any, isActive: any): Promise<any>;
360
+ _lastTileRecords: any;
361
+ loadAndRender(): any;
362
+ _loadAndRender(bounds: any): Promise<void>;
172
363
  _onCameraMoveEnd(): void;
173
364
  _setupMoveHandler(): void;
174
365
  _teardownMoveHandler(): void;
@@ -177,8 +368,12 @@ declare class ShpZztsLayer {
177
368
  /** 更新图层配置(颜色、透明度、栈位等) */
178
369
  updateOptions(options?: {}): void;
179
370
  }
180
- export const shpZztsManager: ShpZztsManager;
371
+ export function initLayer(viewer: any, options: any): Promise<ShpZztsLayer | null>;
372
+ export function removeLayer(id: any): void;
373
+ export function getLayer(id: any): any;
374
+ export function removeAllLayers(): void;
181
375
  import * as Cesium from 'cesium';
376
+ export const shpZztsManager: ShpZztsManager;
182
377
  declare class ShpZztsManager {
183
378
  layers: Map<any, any>;
184
379
  createLayer(viewer: any, options?: {}): Promise<ShpZztsLayer | null>;
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Successful new tiles replace their regions, including successful empty tiles.
3
+ * Retain old tiles only where a failed new tile may overlap, regardless of LOD.
4
+ * Missing/invalid bounds conservatively retain old coverage. Fresh trusted feature
5
+ * IDs take precedence; legacy untrusted IDs must not collapse unrelated features.
6
+ */
7
+ export function composePreviewRecords(successRecords: any, failedTiles: any, previousRecords?: any[]): {
8
+ records: any[];
9
+ geometries: any[];
10
+ };
11
+ /** Check the complete composed view before building primitives; never truncate it. */
12
+ export function assertPreviewGeometryBudget(geometries: any, { maxBytes, maxTriangles, }?: {
13
+ maxBytes?: number | undefined;
14
+ maxTriangles?: number | undefined;
15
+ }): {
16
+ bytes: number;
17
+ triangles: number;
18
+ };
19
+ export const SHP_ZZTS_PREVIEW_MAX_GEOMETRY_BYTES: number;
20
+ export const SHP_ZZTS_PREVIEW_MAX_TRIANGLES: 3000000;