@soonspacejs/plugin-tiles 2.16.8 → 2.16.10
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/dist/index.esm.js
CHANGED
|
@@ -1,11 +1,14 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { TilesRenderer as
|
|
3
|
-
import { GLTFLoader as
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
|
|
1
|
+
import w, { BaseMesh as Xe } from "soonspacejs";
|
|
2
|
+
import { TilesRenderer as D } from "um-3d-tiles-renderer";
|
|
3
|
+
import { GLTFLoader as ae } from "three/examples/jsm/loaders/GLTFLoader.js";
|
|
4
|
+
import { CesiumIonOverlay as qe, TilesFadePlugin as le, UpdateOnChangePlugin as ce, QuantizedMeshPlugin as K, ImageOverlayPlugin as Ne, XYZTilesOverlay as Fe, ReorientationPlugin as he, StyledGeoJSONOverlay as ye, TMSTilesOverlay as Ze, UrlTemplateTilesOverlay as Ke, WMSTilesOverlay as et, WMTSCapabilitiesLoader as tt, WMTSTilesOverlay as rt, CesiumIonAuthPlugin as De } from "um-3d-tiles-renderer/plugins";
|
|
5
|
+
import { QuadKeyImageSource as it } from "um-3d-tiles-renderer/src/three/plugins/images/sources/QuadKeyImageSource.js";
|
|
6
|
+
import { TMSImageSource as st } from "um-3d-tiles-renderer/src/three/plugins/images/sources/TMSImageSource.js";
|
|
7
|
+
import { XYZImageSource as nt } from "um-3d-tiles-renderer/src/three/plugins/images/sources/XYZImageSource.js";
|
|
8
|
+
import { MathUtils as v, MeshBasicMaterial as Ue, Color as Y, Box3 as de, Sphere as $, Vector3 as l, Matrix4 as f, Quaternion as Ge, TextureLoader as ot, Raycaster as at, PerspectiveCamera as we, MeshStandardMaterial as lt, ShaderMaterial as ve } from "three";
|
|
9
|
+
import { CesiumGroundTextPrimitive as B, CesiumGroundPolylinePrimitive as J, CesiumGroundPointPrimitive as z, CesiumGroundPolygonPrimitive as _e, CesiumGroundCirclePrimitive as Me, initializeApproximateTerrainHeights as ct, updateTerrainLogDepthUniforms as ht, CesiumGlobeDepth as dt, CESIUM_GROUND_NON_PICKABLE_LAYER as ut } from "cesium-to-three/ground";
|
|
10
|
+
import { createFineArrow as ee, createCurvedArrow as Be, createSwallowtailAttackArrow as We, createAttackArrow as ze, createAssaultDirectionArrow as Je } from "cesium-to-three/arrow";
|
|
11
|
+
class gt {
|
|
9
12
|
constructor(e) {
|
|
10
13
|
this.parser = e, this.name = "KHR_texture_basisu_patch";
|
|
11
14
|
}
|
|
@@ -13,13 +16,198 @@ class qe {
|
|
|
13
16
|
const t = this.parser, r = t.json, n = r.textures[e].source, o = r.images[n];
|
|
14
17
|
if (!o || o.mimeType !== "image/ktx2")
|
|
15
18
|
return null;
|
|
16
|
-
const
|
|
17
|
-
if (!
|
|
18
|
-
throw new Error(`${
|
|
19
|
-
return t.loadTextureImage(e, n,
|
|
19
|
+
const a = t.options.ktx2Loader;
|
|
20
|
+
if (!a)
|
|
21
|
+
throw new Error(`${w.utils.consoleSspTitle}请使用 setModelKtx2DecoderPath 设置 ktx2 解压库路径`);
|
|
22
|
+
return t.loadTextureImage(e, n, a);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
const Oe = /* @__PURE__ */ new WeakSet();
|
|
26
|
+
function W(s) {
|
|
27
|
+
const e = s, t = e.manager, r = t.getHandler.bind(t);
|
|
28
|
+
let i;
|
|
29
|
+
t.getHandler = (a) => {
|
|
30
|
+
const h = r(a);
|
|
31
|
+
return h || !/^path\.(?:gltf|glb)$/.test(a) ? h : i ||= w.utils.configureGLTFLoader(new ae(t));
|
|
32
|
+
}, e.fetchData = (a, h) => w.utils.fetchResource(a, h);
|
|
33
|
+
const n = e.registerPlugin;
|
|
34
|
+
e.registerPlugin = function(a) {
|
|
35
|
+
return (a.name === "CESIUM_ION_AUTH_PLUGIN" || a.name === "GOOGLE_CLOUD_AUTH_PLUGIN") && je(a.auth), n.call(this, a);
|
|
36
|
+
};
|
|
37
|
+
const o = e.parseTile;
|
|
38
|
+
return e.parseTile = async function(a, h, c, d, g) {
|
|
39
|
+
const p = await He(a, d, { ...this.fetchOptions, signal: g }, this.manager, (m, _) => this.invokeOnePlugin((y) => y.fetchData?.(m, _)));
|
|
40
|
+
return this.manager.getHandler("path.gltf")?.setRequestHeader(this.fetchOptions.headers || {}), o.call(this, p, h, c, d, g);
|
|
41
|
+
}, s;
|
|
42
|
+
}
|
|
43
|
+
async function $e(s, e) {
|
|
44
|
+
const t = await w.utils.fetchResource(s, e);
|
|
45
|
+
if (/layer\.json(?:[?#]|$)/.test(s) && t.ok) {
|
|
46
|
+
const r = await t.json();
|
|
47
|
+
return r.metadataAvailability = -1, new Response(JSON.stringify(r), { status: t.status, statusText: t.statusText, headers: t.headers });
|
|
20
48
|
}
|
|
49
|
+
return t;
|
|
21
50
|
}
|
|
22
|
-
|
|
51
|
+
function x(s) {
|
|
52
|
+
const e = s;
|
|
53
|
+
if (Oe.has(e)) return s;
|
|
54
|
+
if (Oe.add(e), e.auth && je(e.auth), !e.auth)
|
|
55
|
+
e.fetch = function(t, r) {
|
|
56
|
+
return w.utils.fetchResource(this.preprocessURL ? this.preprocessURL(t) : t, r);
|
|
57
|
+
};
|
|
58
|
+
else {
|
|
59
|
+
const t = e.fetch;
|
|
60
|
+
e.fetch = function(r, i) {
|
|
61
|
+
return this.externalType ? w.utils.fetchResource(this.preprocessURL ? this.preprocessURL(r) : r, i) : t.call(this, r, i);
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
return e.imageSource && (e.imageSource.fetchData = (...t) => e.fetch(...t)), s;
|
|
65
|
+
}
|
|
66
|
+
function je(s) {
|
|
67
|
+
"_bearerToken" in s ? (s.refreshToken = function(e) {
|
|
68
|
+
if (this._tokenRefreshPromise === null) {
|
|
69
|
+
const t = new URL(this.authURL);
|
|
70
|
+
t.searchParams.set("access_token", this.apiToken), this._tokenRefreshPromise = w.utils.fetchResource(t, e).then((r) => {
|
|
71
|
+
if (!r.ok) throw new Error(`CesiumIonAuthPlugin: Failed to load data with error code ${r.status}`);
|
|
72
|
+
return r.json();
|
|
73
|
+
}).then((r) => (this._bearerToken = `Bearer ${r.accessToken}`, this._tokenRefreshPromise = null, r));
|
|
74
|
+
}
|
|
75
|
+
return this._tokenRefreshPromise;
|
|
76
|
+
}, s.fetch = async function(e, t) {
|
|
77
|
+
await this._tokenRefreshPromise;
|
|
78
|
+
const r = () => {
|
|
79
|
+
const n = new Headers(t?.headers);
|
|
80
|
+
return n.set("Authorization", this._bearerToken), w.utils.fetchResource(e, { ...t, headers: n });
|
|
81
|
+
}, i = await r();
|
|
82
|
+
return i.status >= 400 && i.status <= 499 && this.autoRefreshToken ? (await this.refreshToken(t), r()) : i;
|
|
83
|
+
}) : (s.fetch = async function(e, t) {
|
|
84
|
+
this.sessionToken === null && this.isMapTilesSession && this.refreshToken(t), await this._tokenRefreshPromise;
|
|
85
|
+
const r = new URL(e);
|
|
86
|
+
r.searchParams.set("key", this.apiToken), this.sessionToken && r.searchParams.set("session", this.sessionToken);
|
|
87
|
+
let i = await w.utils.fetchResource(r, t);
|
|
88
|
+
if (i.status >= 400 && i.status <= 499 && this.autoRefreshToken && (await this.refreshToken(t), this.sessionToken && r.searchParams.set("session", this.sessionToken), i = await w.utils.fetchResource(r, t)), this.sessionToken === null && !this.isMapTilesSession) {
|
|
89
|
+
const n = await i.json();
|
|
90
|
+
return this.sessionToken = Se(n), n;
|
|
91
|
+
}
|
|
92
|
+
return i;
|
|
93
|
+
}, s.refreshToken = function(e) {
|
|
94
|
+
if (this._tokenRefreshPromise === null) {
|
|
95
|
+
const t = new URL(this.authURL), r = { ...e };
|
|
96
|
+
if (t.searchParams.set("key", this.apiToken), this.isMapTilesSession) {
|
|
97
|
+
r.method = "POST", r.body = JSON.stringify(this.sessionOptions);
|
|
98
|
+
const i = new Headers(r.headers);
|
|
99
|
+
i.set("Content-Type", "application/json"), r.headers = i;
|
|
100
|
+
}
|
|
101
|
+
this._tokenRefreshPromise = w.utils.fetchResource(t, r).then((i) => {
|
|
102
|
+
if (!i.ok) throw new Error(`GoogleCloudAuth: Failed to load data with error code ${i.status}`);
|
|
103
|
+
return i.json();
|
|
104
|
+
}).then((i) => (this.sessionToken = Se(i), this._tokenRefreshPromise = null, i));
|
|
105
|
+
}
|
|
106
|
+
return this._tokenRefreshPromise;
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
function Se(s) {
|
|
110
|
+
if ("session" in s) return s.session;
|
|
111
|
+
const e = [s.root];
|
|
112
|
+
let t = null;
|
|
113
|
+
for (; e.length; ) {
|
|
114
|
+
const r = e.pop();
|
|
115
|
+
if (r.content?.uri) {
|
|
116
|
+
const [, n] = r.content.uri.split("?");
|
|
117
|
+
t = new URLSearchParams(n).get("session");
|
|
118
|
+
continue;
|
|
119
|
+
}
|
|
120
|
+
const i = r.children || [];
|
|
121
|
+
for (let n = i.length - 1; n >= 0; n--) e.push(i[n]);
|
|
122
|
+
}
|
|
123
|
+
return t;
|
|
124
|
+
}
|
|
125
|
+
class pt extends qe {
|
|
126
|
+
constructor(e) {
|
|
127
|
+
super(e), x(this);
|
|
128
|
+
const t = this;
|
|
129
|
+
t._initImageSource = async function() {
|
|
130
|
+
const r = await this.auth.refreshToken();
|
|
131
|
+
if (this._attributions = r.attributions.map((i) => ({ value: i.html, type: "html", collapsible: i.collapsible })), r.type !== "IMAGERY") throw new Error("CesiumIonOverlay: Only IMAGERY is supported as overlay type.");
|
|
132
|
+
if (this.externalType = !!r.externalType, r.externalType === "GOOGLE_2D_MAPS") {
|
|
133
|
+
const { url: i, session: n, key: o, tileWidth: a } = r.options;
|
|
134
|
+
this.imageSource = new nt({ ...this.options, url: `${i}/v1/2dtiles/{z}/{x}/{y}?session=${n}&key=${o}`, tileDimension: a, levels: 22 });
|
|
135
|
+
} else if (r.externalType === "BING") {
|
|
136
|
+
const { url: i, mapStyle: n, key: o } = r.options, a = `${i}/REST/v1/Imagery/Metadata/${n}?incl=ImageryProviders&key=${o}&uriScheme=https`, c = (await w.utils.fetchResource(a).then((d) => d.json())).resourceSets[0].resources[0];
|
|
137
|
+
this.imageSource = new it({ ...this.options, url: c.imageUrl, subdomains: c.imageUrlSubdomains, tileDimension: c.tileWidth, levels: c.zoomMax });
|
|
138
|
+
} else
|
|
139
|
+
this.imageSource = new st({ ...this.options, url: r.url });
|
|
140
|
+
return this.imageSource.fetchData = (...i) => this.fetch(...i), this.imageSource.init();
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
async function He(s, e, t, r, i = w.utils.fetchResource, n = 0) {
|
|
145
|
+
if (s.byteLength < 4) return s;
|
|
146
|
+
const o = new TextDecoder().decode(new Uint8Array(s, 0, 4)), a = new DataView(s);
|
|
147
|
+
if (o === "cmpt") {
|
|
148
|
+
if (n >= 32 || s.byteLength < 16) throw new Error("Invalid 3D Tiles: composite nesting or header length.");
|
|
149
|
+
if (a.getUint32(8, !0) !== s.byteLength) throw new Error("Invalid 3D Tiles: composite byte length.");
|
|
150
|
+
const b = a.getUint32(12, !0);
|
|
151
|
+
if (b > Math.floor((s.byteLength - 16) / 12)) throw new Error("Invalid 3D Tiles: composite child count.");
|
|
152
|
+
const S = [];
|
|
153
|
+
let M = 16, C = !1;
|
|
154
|
+
for (let I = 0; I < b; I++) {
|
|
155
|
+
if (M + 12 > s.byteLength) throw new Error("Invalid 3D Tiles: composite child header.");
|
|
156
|
+
const N = a.getUint32(M + 8, !0);
|
|
157
|
+
if (N < 12 || N > s.byteLength - M) throw new Error("Invalid 3D Tiles: composite child length.");
|
|
158
|
+
const fe = s.slice(M, M + N), me = await He(fe, e, t, r, i, n + 1);
|
|
159
|
+
C ||= me !== fe, S.push(me), M += N;
|
|
160
|
+
}
|
|
161
|
+
if (!C) return s;
|
|
162
|
+
const G = new Uint8Array(s, M), A = new Uint8Array(16 + S.reduce((I, N) => I + N.byteLength, 0) + G.byteLength);
|
|
163
|
+
A.set(new Uint8Array(s, 0, 16)), new DataView(A.buffer).setUint32(8, A.byteLength, !0), M = 16;
|
|
164
|
+
for (const I of S)
|
|
165
|
+
A.set(new Uint8Array(I), M), M += I.byteLength;
|
|
166
|
+
return A.set(G, M), A.buffer;
|
|
167
|
+
}
|
|
168
|
+
if (o !== "i3dm") return s;
|
|
169
|
+
if (s.byteLength < 32) throw new Error("Invalid 3D Tiles: I3DM header length.");
|
|
170
|
+
if (a.getUint32(8, !0) !== s.byteLength) throw new Error("Invalid 3D Tiles: I3DM byte length.");
|
|
171
|
+
if (a.getUint32(28, !0) !== 0) return s;
|
|
172
|
+
const h = 32 + [12, 16, 20, 24].reduce((b, S) => b + a.getUint32(S, !0), 0);
|
|
173
|
+
if (h >= s.byteLength) throw new Error("Invalid 3D Tiles: I3DM table offsets.");
|
|
174
|
+
const c = new TextDecoder().decode(new Uint8Array(s, h)).replace(/\0.*$/, "").trim();
|
|
175
|
+
if (!c) throw new Error("Invalid 3D Tiles: empty I3DM external URI.");
|
|
176
|
+
const d = new URL(c, e).href, g = r.resolveURL(d), p = await i(g, t);
|
|
177
|
+
if (!p.ok) throw new Error(`I3DMLoaderBase : Failed to load file "${g}" with status ${p.status} : ${p.statusText}`);
|
|
178
|
+
const m = /^(?:data|blob):/i.test(g) ? d : g, _ = ft(await p.arrayBuffer(), m, h), y = new Uint8Array(h + _.byteLength);
|
|
179
|
+
y.set(new Uint8Array(s, 0, h)), y.set(new Uint8Array(_), h);
|
|
180
|
+
const O = new DataView(y.buffer);
|
|
181
|
+
return O.setUint32(8, y.byteLength, !0), O.setUint32(28, 1, !0), y.buffer;
|
|
182
|
+
}
|
|
183
|
+
function ft(s, e, t) {
|
|
184
|
+
const r = new DataView(s), i = s.byteLength >= 4 && r.getUint32(0, !0) === 1179937895;
|
|
185
|
+
if (i && (s.byteLength < 20 || r.getUint32(4, !0) !== 2 || r.getUint32(8, !0) !== s.byteLength)) throw new Error("Invalid GLTF: binary header.");
|
|
186
|
+
const n = i ? r.getUint32(12, !0) : s.byteLength;
|
|
187
|
+
if (i) {
|
|
188
|
+
if (n % 4 || n > s.byteLength - 20 || r.getUint32(16, !0) !== 1313821514) throw new Error("Invalid GLTF: JSON chunk length or type.");
|
|
189
|
+
let p = 20 + n;
|
|
190
|
+
for (; p < s.byteLength; ) {
|
|
191
|
+
if (p + 8 > s.byteLength) throw new Error("Invalid GLTF: trailing chunk header.");
|
|
192
|
+
const m = r.getUint32(p, !0);
|
|
193
|
+
if (m % 4 || m > s.byteLength - p - 8) throw new Error("Invalid GLTF: trailing chunk length.");
|
|
194
|
+
p += 8 + m;
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
const o = JSON.parse(new TextDecoder().decode(new Uint8Array(s, i ? 20 : 0, n))), a = (p, m) => {
|
|
198
|
+
typeof p?.[m] == "string" && !/^(?:data|blob):/i.test(p[m]) && (p[m] = new URL(p[m], e).href);
|
|
199
|
+
};
|
|
200
|
+
o.buffers?.forEach((p) => a(p, "uri")), o.images?.forEach((p) => a(p, "uri")), a(o.extensions?.EXT_structural_metadata, "schemaUri");
|
|
201
|
+
const h = new TextEncoder().encode(JSON.stringify(o));
|
|
202
|
+
if (!i) {
|
|
203
|
+
const p = new Uint8Array(Math.ceil((t + h.byteLength) / 8) * 8 - t);
|
|
204
|
+
return p.fill(32), p.set(h), p.buffer;
|
|
205
|
+
}
|
|
206
|
+
if (t % 4) throw new Error("Invalid 3D Tiles: I3DM binary GLTF alignment.");
|
|
207
|
+
const c = new Uint8Array(s, 20 + n), d = Math.ceil((t + 20 + h.byteLength + c.byteLength) / 8) * 8 - t - 20 - c.byteLength, g = new Uint8Array(20 + d + c.byteLength);
|
|
208
|
+
return g.set(new Uint8Array(s, 0, 20)), g.fill(32, 20, 20 + d), g.set(h, 20), g.set(c, 20 + d), new DataView(g.buffer).setUint32(8, g.byteLength, !0), new DataView(g.buffer).setUint32(12, d, !0), g.buffer;
|
|
209
|
+
}
|
|
210
|
+
class Ar {
|
|
23
211
|
constructor(e) {
|
|
24
212
|
this.ssp = e;
|
|
25
213
|
const { controls: t, viewport: r } = e;
|
|
@@ -46,15 +234,15 @@ class pr {
|
|
|
46
234
|
downloadQueue = null;
|
|
47
235
|
async loadTiles(e) {
|
|
48
236
|
if (this.tilesMap.has(e)) {
|
|
49
|
-
|
|
237
|
+
w.utils.warn(`${e} already loaded`);
|
|
50
238
|
return;
|
|
51
239
|
}
|
|
52
|
-
const { ssp: t, ssp: { viewport: r } } = this, i = new
|
|
240
|
+
const { ssp: t, ssp: { viewport: r } } = this, i = W(new D(e));
|
|
53
241
|
this.lruCache === null ? this.lruCache = i.lruCache : i.lruCache = this.lruCache, this.parseQueue === null ? this.parseQueue = i.parseQueue : i.parseQueue = this.parseQueue, this.downloadQueue === null ? this.downloadQueue = i.downloadQueue : i.downloadQueue = this.downloadQueue;
|
|
54
|
-
const n = new
|
|
55
|
-
n.register((d) => new
|
|
56
|
-
const { dracoLoader: o, ktx2Loader:
|
|
57
|
-
o && n.setDRACOLoader(o),
|
|
242
|
+
const n = w.utils.configureGLTFLoader(new ae(i.manager));
|
|
243
|
+
n.register((d) => new gt(d));
|
|
244
|
+
const { dracoLoader: o, ktx2Loader: a, meshoptDecoder: h } = t.manager.store.modelManager.gltfLoader;
|
|
245
|
+
o && n.setDRACOLoader(o), a && n.setKTX2Loader(a), h && n.setMeshoptDecoder(h), i.manager.addHandler(/\.gltf$/, n), this.tilesMap.set(e, i), i.setCamera(this._tilesCamera), i.setResolutionFromRenderer(this._tilesCamera, r.renderer), i.lruCache.maxSize = 600, i.lruCache.minSize = 300, i.lruCache.unloadPercent = 0.8, t.addObject(i.group);
|
|
58
246
|
const c = () => {
|
|
59
247
|
this.cameraTransitionStart || (this.needsUpdate = !0, t.render());
|
|
60
248
|
};
|
|
@@ -69,31 +257,25 @@ class pr {
|
|
|
69
257
|
return t ? (t.dispose(), this.tilesMap.delete(e), this.ssp.removeObject(t.group), !0) : !1;
|
|
70
258
|
}
|
|
71
259
|
}
|
|
72
|
-
let
|
|
260
|
+
let mt = class {
|
|
73
261
|
priority = -999;
|
|
74
262
|
processTileModel(e) {
|
|
75
263
|
e.traverse((t) => {
|
|
76
|
-
t.material && (t.material = new
|
|
264
|
+
t.material && (t.material = new Ue());
|
|
77
265
|
});
|
|
78
266
|
}
|
|
79
267
|
};
|
|
80
|
-
const
|
|
81
|
-
class
|
|
268
|
+
const yt = "https://sooncps.xwbuilders.com/api/ugis-dataprocess/v1/terrain/NhBLlMx3/";
|
|
269
|
+
class Fr {
|
|
82
270
|
constructor(e) {
|
|
83
|
-
this.ssp = e, this.tiles = new
|
|
84
|
-
if (/layer\.json$/.test(t)) {
|
|
85
|
-
const i = await fetch(t, r).then((n) => n.json());
|
|
86
|
-
return i.metadataAvailability = -1, new Response(JSON.stringify(i));
|
|
87
|
-
}
|
|
88
|
-
return fetch(t, r);
|
|
89
|
-
}, this.tilesFadePlugin = new re({ maximumFadeOutTiles: 200 }), this.updateOnChangePlugin = new ie(), this.quantizedPlugin = new Q({}), this.customMaterialPlugin = new Ze(), this.imageOverlayPlugin = new Te({
|
|
271
|
+
this.ssp = e, this.tiles = W(new D(yt)), this.tiles.fetchData = $e, this.tilesFadePlugin = new le({ maximumFadeOutTiles: 200 }), this.updateOnChangePlugin = new ce(), this.quantizedPlugin = new K({}), this.customMaterialPlugin = new mt(), this.imageOverlayPlugin = new Ne({
|
|
90
272
|
renderer: e.viewport.renderer,
|
|
91
273
|
overlays: [
|
|
92
|
-
new
|
|
274
|
+
x(new Fe({
|
|
93
275
|
url: "https://server.arcgisonline.com/arcgis/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}"
|
|
94
|
-
})
|
|
276
|
+
}))
|
|
95
277
|
]
|
|
96
|
-
}), this.reorientationPlugin = new
|
|
278
|
+
}), this.reorientationPlugin = new he({
|
|
97
279
|
lon: 120,
|
|
98
280
|
lat: 30,
|
|
99
281
|
height: 0.1
|
|
@@ -124,10 +306,10 @@ class yr {
|
|
|
124
306
|
}
|
|
125
307
|
invalidate(e, t, r) {
|
|
126
308
|
const i = () => {
|
|
127
|
-
const o =
|
|
309
|
+
const o = v.degToRad(t), a = v.degToRad(e);
|
|
128
310
|
this.reorientationPlugin.transformLatLonHeightToOrigin(
|
|
129
311
|
o,
|
|
130
|
-
|
|
312
|
+
a,
|
|
131
313
|
r
|
|
132
314
|
), this.ssp.render(), n();
|
|
133
315
|
}, n = () => {
|
|
@@ -141,7 +323,7 @@ class yr {
|
|
|
141
323
|
), this.loedTilesSets.clear(), this.tiles.removeEventListener("needs-render", this.render), this.tiles.removeEventListener("needs-update", this.render), this.tiles.dispose();
|
|
142
324
|
}
|
|
143
325
|
}
|
|
144
|
-
class
|
|
326
|
+
class wt {
|
|
145
327
|
// 使用较低的 priority 确保在 ImageOverlayPlugin 之后执行
|
|
146
328
|
// ImageOverlayPlugin 默认 priority 是 -1
|
|
147
329
|
priority = -999;
|
|
@@ -152,7 +334,7 @@ class et {
|
|
|
152
334
|
*/
|
|
153
335
|
processTileModel(e) {
|
|
154
336
|
e.traverse((t) => {
|
|
155
|
-
t.material && (t.material = new
|
|
337
|
+
t.material && (t.material = new Ue());
|
|
156
338
|
});
|
|
157
339
|
}
|
|
158
340
|
/**
|
|
@@ -184,8 +366,8 @@ class et {
|
|
|
184
366
|
e.needsUpdate = !0;
|
|
185
367
|
}
|
|
186
368
|
}
|
|
187
|
-
var u = /* @__PURE__ */ ((s) => (s.GEOJSON = "geojson", s.CESIUM_ION = "cesiumIon", s.TMS = "tms", s.XYZ = "xyz", s.WMS = "wms", s.WMTS = "wmts", s.URL_TEMPLATE = "urlTemplate", s.PLOT = "plot", s))(u || {}),
|
|
188
|
-
class
|
|
369
|
+
var u = /* @__PURE__ */ ((s) => (s.GEOJSON = "geojson", s.CESIUM_ION = "cesiumIon", s.TMS = "tms", s.XYZ = "xyz", s.WMS = "wms", s.WMTS = "wmts", s.URL_TEMPLATE = "urlTemplate", s.PLOT = "plot", s))(u || {}), L = /* @__PURE__ */ ((s) => (s.QUANTIZED_MESH = "quantizedMesh", s.CESIUM_ION = "cesiumIon", s))(L || {});
|
|
370
|
+
class j {
|
|
189
371
|
constructor(e, t) {
|
|
190
372
|
this.imageOverlayPlugin = e, this.resourceManager = t;
|
|
191
373
|
}
|
|
@@ -209,9 +391,9 @@ class B {
|
|
|
209
391
|
defaultStyle: this._buildGeoJSONDefaultStyle(e, r),
|
|
210
392
|
...this._getGeoJSONModeFlags(r)
|
|
211
393
|
};
|
|
212
|
-
e.color !== void 0 && (i.color = new
|
|
213
|
-
const n = new
|
|
214
|
-
return t.addOverlay(n, e.order), this._instances.set(e.id, {
|
|
394
|
+
e.color !== void 0 && (i.color = new Y(e.color));
|
|
395
|
+
const n = new ye(i);
|
|
396
|
+
return x(n), t.addOverlay(n, e.order), this._instances.set(e.id, {
|
|
215
397
|
id: e.id,
|
|
216
398
|
type: e.type,
|
|
217
399
|
instance: n,
|
|
@@ -234,11 +416,11 @@ class B {
|
|
|
234
416
|
const i = r.instance, n = r.options, o = {
|
|
235
417
|
...n.defaultStyle || {},
|
|
236
418
|
...t
|
|
237
|
-
},
|
|
419
|
+
}, a = {
|
|
238
420
|
...n,
|
|
239
421
|
defaultStyle: o
|
|
240
422
|
};
|
|
241
|
-
return i.defaultStyle = this._buildGeoJSONDefaultStyle(
|
|
423
|
+
return i.defaultStyle = this._buildGeoJSONDefaultStyle(a, a.mode ?? "overlay"), this._updateOverlayOptions(e, { defaultStyle: o }), !0;
|
|
242
424
|
}
|
|
243
425
|
updateGeoJSONStrokeStyle(e, t) {
|
|
244
426
|
const r = this._instances.get(e);
|
|
@@ -246,12 +428,12 @@ class B {
|
|
|
246
428
|
const i = r.instance, n = r.options, o = {
|
|
247
429
|
...n.defaultStyle || {},
|
|
248
430
|
strokeStyle: t
|
|
249
|
-
},
|
|
431
|
+
}, a = {
|
|
250
432
|
...n,
|
|
251
433
|
strokeStyle: t,
|
|
252
434
|
defaultStyle: o
|
|
253
435
|
};
|
|
254
|
-
return i.defaultStyle = this._buildGeoJSONDefaultStyle(
|
|
436
|
+
return i.defaultStyle = this._buildGeoJSONDefaultStyle(a, a.mode ?? "overlay"), this._updateOverlayOptions(e, { strokeStyle: t, defaultStyle: o }), !0;
|
|
255
437
|
}
|
|
256
438
|
updateGeoJSONStrokeWidth(e, t) {
|
|
257
439
|
const r = this._instances.get(e);
|
|
@@ -259,12 +441,12 @@ class B {
|
|
|
259
441
|
const i = r.instance, n = r.options, o = {
|
|
260
442
|
...n.defaultStyle || {},
|
|
261
443
|
strokeWidth: t
|
|
262
|
-
},
|
|
444
|
+
}, a = {
|
|
263
445
|
...n,
|
|
264
446
|
strokeWidth: t,
|
|
265
447
|
defaultStyle: o
|
|
266
448
|
};
|
|
267
|
-
return i.defaultStyle = this._buildGeoJSONDefaultStyle(
|
|
449
|
+
return i.defaultStyle = this._buildGeoJSONDefaultStyle(a, a.mode ?? "overlay"), this._updateOverlayOptions(e, { strokeWidth: t, defaultStyle: o }), !0;
|
|
268
450
|
}
|
|
269
451
|
updateGeoJSONFillStyle(e, t) {
|
|
270
452
|
const r = this._instances.get(e);
|
|
@@ -272,12 +454,12 @@ class B {
|
|
|
272
454
|
const i = r.instance, n = r.options, o = {
|
|
273
455
|
...n.defaultStyle || {},
|
|
274
456
|
fillStyle: t
|
|
275
|
-
},
|
|
457
|
+
}, a = {
|
|
276
458
|
...n,
|
|
277
459
|
fillStyle: t,
|
|
278
460
|
defaultStyle: o
|
|
279
461
|
};
|
|
280
|
-
return i.defaultStyle = this._buildGeoJSONDefaultStyle(
|
|
462
|
+
return i.defaultStyle = this._buildGeoJSONDefaultStyle(a, a.mode ?? "overlay"), this._updateOverlayOptions(e, { fillStyle: t, defaultStyle: o }), !0;
|
|
281
463
|
}
|
|
282
464
|
updateGeoJSONMode(e, t) {
|
|
283
465
|
const r = this._instances.get(e);
|
|
@@ -328,14 +510,14 @@ class B {
|
|
|
328
510
|
addCesiumIonOverlay(e) {
|
|
329
511
|
const t = this._getImageOverlayPluginForAdd(e.id);
|
|
330
512
|
if (!t) return null;
|
|
331
|
-
const r = new
|
|
513
|
+
const r = new pt({
|
|
332
514
|
assetId: e.assetId,
|
|
333
515
|
apiToken: e.apiToken,
|
|
334
516
|
autoRefreshToken: e.autoRefreshToken ?? !0,
|
|
335
517
|
color: typeof e.color == "number" ? e.color : 16777215,
|
|
336
518
|
opacity: e.opacity ?? 1
|
|
337
519
|
});
|
|
338
|
-
return t.addOverlay(r, e.order), this._instances.set(e.id, {
|
|
520
|
+
return x(r), t.addOverlay(r, e.order), this._instances.set(e.id, {
|
|
339
521
|
id: e.id,
|
|
340
522
|
type: e.type,
|
|
341
523
|
instance: r,
|
|
@@ -350,12 +532,12 @@ class B {
|
|
|
350
532
|
addTMSOverlay(e) {
|
|
351
533
|
const t = this._getImageOverlayPluginForAdd(e.id);
|
|
352
534
|
if (!t) return null;
|
|
353
|
-
const r = new
|
|
535
|
+
const r = new Ze({
|
|
354
536
|
url: e.url,
|
|
355
537
|
color: typeof e.color == "number" ? e.color : 16777215,
|
|
356
538
|
opacity: e.opacity ?? 1
|
|
357
539
|
});
|
|
358
|
-
return t.addOverlay(r, e.order), this._instances.set(e.id, {
|
|
540
|
+
return x(r), t.addOverlay(r, e.order), this._instances.set(e.id, {
|
|
359
541
|
id: e.id,
|
|
360
542
|
type: e.type,
|
|
361
543
|
instance: r,
|
|
@@ -370,12 +552,12 @@ class B {
|
|
|
370
552
|
addXYZOverlay(e) {
|
|
371
553
|
const t = this._getImageOverlayPluginForAdd(e.id);
|
|
372
554
|
if (!t) return null;
|
|
373
|
-
const r = new
|
|
555
|
+
const r = new Fe({
|
|
374
556
|
url: e.url,
|
|
375
557
|
color: typeof e.color == "number" ? e.color : 16777215,
|
|
376
558
|
opacity: e.opacity ?? 1
|
|
377
559
|
});
|
|
378
|
-
return t.addOverlay(r, e.order), this._instances.set(e.id, {
|
|
560
|
+
return x(r), t.addOverlay(r, e.order), this._instances.set(e.id, {
|
|
379
561
|
id: e.id,
|
|
380
562
|
type: e.type,
|
|
381
563
|
instance: r,
|
|
@@ -421,7 +603,7 @@ class B {
|
|
|
421
603
|
addUrlTemplateOverlay(e) {
|
|
422
604
|
const t = this._getImageOverlayPluginForAdd(e.id);
|
|
423
605
|
if (!t) return null;
|
|
424
|
-
const r = new
|
|
606
|
+
const r = new Ke({
|
|
425
607
|
url: e.url,
|
|
426
608
|
subdomains: e.subdomains,
|
|
427
609
|
levels: e.levels,
|
|
@@ -432,7 +614,7 @@ class B {
|
|
|
432
614
|
color: typeof e.color == "number" ? e.color : 16777215,
|
|
433
615
|
opacity: e.opacity ?? 1
|
|
434
616
|
});
|
|
435
|
-
return t.addOverlay(r, e.order), this._instances.set(e.id, {
|
|
617
|
+
return x(r), t.addOverlay(r, e.order), this._instances.set(e.id, {
|
|
436
618
|
id: e.id,
|
|
437
619
|
type: e.type,
|
|
438
620
|
instance: r,
|
|
@@ -453,17 +635,17 @@ class B {
|
|
|
453
635
|
crs: e.crs || "EPSG:4326",
|
|
454
636
|
format: e.format || "image/png",
|
|
455
637
|
tileDimension: e.tileDimension || 256
|
|
456
|
-
}, i = new
|
|
638
|
+
}, i = new et({
|
|
457
639
|
url: e.url,
|
|
458
640
|
layer: r.layer,
|
|
459
641
|
crs: r.crs,
|
|
460
642
|
format: r.format,
|
|
461
643
|
tileDimension: r.tileDimension,
|
|
462
644
|
styles: r.styles,
|
|
463
|
-
color: new
|
|
645
|
+
color: new Y(typeof e.color == "number" ? e.color : 16777215),
|
|
464
646
|
opacity: e.opacity ?? 1
|
|
465
647
|
});
|
|
466
|
-
return t.addOverlay(i, e.order), this._instances.set(e.id, {
|
|
648
|
+
return x(i), t.addOverlay(i, e.order), this._instances.set(e.id, {
|
|
467
649
|
id: e.id,
|
|
468
650
|
type: e.type,
|
|
469
651
|
instance: i,
|
|
@@ -478,31 +660,33 @@ class B {
|
|
|
478
660
|
async addWMTSOverlay(e) {
|
|
479
661
|
const t = this._getImageOverlayPluginForAdd(e.id);
|
|
480
662
|
if (!t) return null;
|
|
481
|
-
const r =
|
|
482
|
-
|
|
483
|
-
r.
|
|
484
|
-
|
|
485
|
-
)
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
663
|
+
const r = new tt(), i = await w.utils.fetchResource(e.url, r.fetchOptions);
|
|
664
|
+
if (!i.ok) throw new Error(`Failed to load file "${e.url}" with status ${i.status} : ${i.statusText}`);
|
|
665
|
+
const n = r.parse(await i.arrayBuffer()), o = ["EPSG:4326", "EPSG:3857"];
|
|
666
|
+
let a = e.layer || "";
|
|
667
|
+
n.layers.find((c) => c.identifier === a) || (a = n.layers.find(
|
|
668
|
+
(c) => c?.tileMatrixSets?.some((d) => o.includes(d.supportedCRS))
|
|
669
|
+
)?.identifier || n.layers[0].identifier);
|
|
670
|
+
const h = new rt({
|
|
671
|
+
capabilities: n,
|
|
672
|
+
layer: a,
|
|
489
673
|
dimensions: e.dimensions || null,
|
|
490
674
|
style: e.style || void 0,
|
|
491
675
|
tileMatrixSet: e.tileMatrixSet || null,
|
|
492
676
|
planar: !1,
|
|
493
|
-
color: new
|
|
677
|
+
color: new Y(typeof e.color == "number" ? e.color : 16777215),
|
|
494
678
|
opacity: e.opacity ?? 1
|
|
495
679
|
});
|
|
496
|
-
return t.addOverlay(
|
|
680
|
+
return x(h), t.addOverlay(h, e.order), this._instances.set(e.id, {
|
|
497
681
|
id: e.id,
|
|
498
682
|
type: e.type,
|
|
499
|
-
instance:
|
|
683
|
+
instance: h,
|
|
500
684
|
options: { ...e }
|
|
501
685
|
}), this.resourceManager?.addOverlay({
|
|
502
686
|
id: e.id,
|
|
503
687
|
type: e.type,
|
|
504
688
|
options: e
|
|
505
|
-
}),
|
|
689
|
+
}), h;
|
|
506
690
|
}
|
|
507
691
|
// =============== 通用方法 ===============
|
|
508
692
|
/**
|
|
@@ -668,7 +852,7 @@ class B {
|
|
|
668
852
|
};
|
|
669
853
|
}
|
|
670
854
|
_getGeoJSONUtilityOverlay() {
|
|
671
|
-
return this._geoJSONUtilityOverlay || (this._geoJSONUtilityOverlay = new
|
|
855
|
+
return this._geoJSONUtilityOverlay || (this._geoJSONUtilityOverlay = new ye({})), this._geoJSONUtilityOverlay;
|
|
672
856
|
}
|
|
673
857
|
_updateOverlayOptions(e, t) {
|
|
674
858
|
const r = this._instances.get(e);
|
|
@@ -678,7 +862,7 @@ class B {
|
|
|
678
862
|
}), this.resourceManager?.updateOverlay(e, t);
|
|
679
863
|
}
|
|
680
864
|
_getImageOverlayPluginForAdd(e) {
|
|
681
|
-
return this.imageOverlayPlugin ? this._instances.has(e) ? (console.warn(`OverlayManager: Overlay "${e}" already exists`), null) : this._instances.size >=
|
|
865
|
+
return this.imageOverlayPlugin ? this._instances.has(e) ? (console.warn(`OverlayManager: Overlay "${e}" already exists`), null) : this._instances.size >= j.MAX_OVERLAY_INSTANCES ? (console.error(`OverlayManager: Cannot add overlay "${e}" because the maximum number of overlays is ${j.MAX_OVERLAY_INSTANCES}`), null) : this.imageOverlayPlugin : null;
|
|
682
866
|
}
|
|
683
867
|
/**
|
|
684
868
|
* 获取本地影像数量(不依赖 ResourceManager)
|
|
@@ -704,7 +888,7 @@ class B {
|
|
|
704
888
|
this.disposeInstances(), this.resourceManager?.clear();
|
|
705
889
|
}
|
|
706
890
|
}
|
|
707
|
-
class
|
|
891
|
+
class vt {
|
|
708
892
|
/** Overlay 资源配置 */
|
|
709
893
|
_overlays = /* @__PURE__ */ new Map();
|
|
710
894
|
// =============== Overlay 资源管理 ===============
|
|
@@ -794,7 +978,7 @@ class tt {
|
|
|
794
978
|
e.overlays && (this._overlays.clear(), e.overlays.forEach((t) => this._overlays.set(t.id, { ...t })));
|
|
795
979
|
}
|
|
796
980
|
}
|
|
797
|
-
class
|
|
981
|
+
class _t {
|
|
798
982
|
/** 地形配置映射表 */
|
|
799
983
|
_terrains = /* @__PURE__ */ new Map();
|
|
800
984
|
/** 当前激活的地形 ID */
|
|
@@ -883,7 +1067,7 @@ class rt {
|
|
|
883
1067
|
this.clear();
|
|
884
1068
|
}
|
|
885
1069
|
}
|
|
886
|
-
class
|
|
1070
|
+
class E extends Xe {
|
|
887
1071
|
/**
|
|
888
1072
|
* 类别。基类构造为空串,子类用 `readonly category = 'xxx' as const` 覆写。
|
|
889
1073
|
* 桥接器据此 switch 分支。
|
|
@@ -924,11 +1108,11 @@ class x extends De {
|
|
|
924
1108
|
if (this.boundingBox && this._boundingBoxCacheKey === e)
|
|
925
1109
|
return;
|
|
926
1110
|
const t = this._boundingBoxResolver?.(this);
|
|
927
|
-
this.boundingBox = t?.clone() ?? new
|
|
1111
|
+
this.boundingBox = t?.clone() ?? new de(), this.boundingSphere = null, this._boundingBoxCacheKey = e;
|
|
928
1112
|
}
|
|
929
1113
|
/** 按 Three.js Object3D 包围体协议更新 boundingSphere。 */
|
|
930
1114
|
computeBoundingSphere() {
|
|
931
|
-
this.computeBoundingBox(), !this.boundingSphere && (this.boundingSphere = this.boundingBox?.getBoundingSphere(new
|
|
1115
|
+
this.computeBoundingBox(), !this.boundingSphere && (this.boundingSphere = this.boundingBox?.getBoundingSphere(new $()) ?? new $());
|
|
932
1116
|
}
|
|
933
1117
|
/**
|
|
934
1118
|
* 不可变整表替换:用展开 + patch 重建 options。
|
|
@@ -973,7 +1157,7 @@ class x extends De {
|
|
|
973
1157
|
return this.options.points || [];
|
|
974
1158
|
}
|
|
975
1159
|
}
|
|
976
|
-
class
|
|
1160
|
+
class Mt extends E {
|
|
977
1161
|
category = "point";
|
|
978
1162
|
constructor(e) {
|
|
979
1163
|
super(e);
|
|
@@ -992,7 +1176,7 @@ class it extends x {
|
|
|
992
1176
|
return this.getCenterPoints();
|
|
993
1177
|
}
|
|
994
1178
|
}
|
|
995
|
-
class
|
|
1179
|
+
class Ot extends E {
|
|
996
1180
|
category = "line";
|
|
997
1181
|
constructor(e) {
|
|
998
1182
|
super(e);
|
|
@@ -1002,7 +1186,7 @@ class st extends x {
|
|
|
1002
1186
|
this.options = { ...this.options, ...e };
|
|
1003
1187
|
}
|
|
1004
1188
|
}
|
|
1005
|
-
class
|
|
1189
|
+
class St extends E {
|
|
1006
1190
|
category = "polygon";
|
|
1007
1191
|
constructor(e) {
|
|
1008
1192
|
super(e);
|
|
@@ -1012,7 +1196,7 @@ class nt extends x {
|
|
|
1012
1196
|
this.options = { ...this.options, ...e };
|
|
1013
1197
|
}
|
|
1014
1198
|
}
|
|
1015
|
-
class
|
|
1199
|
+
class bt extends E {
|
|
1016
1200
|
category = "rectangle";
|
|
1017
1201
|
constructor(e) {
|
|
1018
1202
|
super(e);
|
|
@@ -1022,8 +1206,8 @@ class ot extends x {
|
|
|
1022
1206
|
this.options = { ...this.options, ...e };
|
|
1023
1207
|
}
|
|
1024
1208
|
}
|
|
1025
|
-
const
|
|
1026
|
-
class
|
|
1209
|
+
const Tt = v.DEG2RAD, be = 111320;
|
|
1210
|
+
class xt extends E {
|
|
1027
1211
|
category = "sector";
|
|
1028
1212
|
constructor(e) {
|
|
1029
1213
|
super(e);
|
|
@@ -1036,14 +1220,14 @@ class lt extends x {
|
|
|
1036
1220
|
getExtentPoints() {
|
|
1037
1221
|
const e = this.options.points;
|
|
1038
1222
|
if (!e || e.length === 0) return [];
|
|
1039
|
-
const t = e[0][0], r = e[0][1], i = this.options.radius || 0, n = i / (
|
|
1223
|
+
const t = e[0][0], r = e[0][1], i = this.options.radius || 0, n = i / (be * Math.cos(r * Tt)), o = i / be;
|
|
1040
1224
|
return [
|
|
1041
1225
|
[t - n, r - o],
|
|
1042
1226
|
[t + n, r + o]
|
|
1043
1227
|
];
|
|
1044
1228
|
}
|
|
1045
1229
|
}
|
|
1046
|
-
class
|
|
1230
|
+
class Ct extends E {
|
|
1047
1231
|
category = "arrow";
|
|
1048
1232
|
/** generateCoords() 填充的闭合多边形顶点;初始为空 */
|
|
1049
1233
|
generatedCoords = [];
|
|
@@ -1071,22 +1255,22 @@ class ct extends x {
|
|
|
1071
1255
|
return this.generatedCoords = [], this.generatedCoords;
|
|
1072
1256
|
switch (this.options.arrowType) {
|
|
1073
1257
|
case "fine":
|
|
1074
|
-
this.generatedCoords =
|
|
1258
|
+
this.generatedCoords = ee(e[0], e[1]);
|
|
1075
1259
|
break;
|
|
1076
1260
|
case "assaultDirection":
|
|
1077
|
-
this.generatedCoords =
|
|
1261
|
+
this.generatedCoords = Je(e[0], e[1]);
|
|
1078
1262
|
break;
|
|
1079
1263
|
case "attack":
|
|
1080
|
-
this.generatedCoords =
|
|
1264
|
+
this.generatedCoords = ze(e);
|
|
1081
1265
|
break;
|
|
1082
1266
|
case "swallowtailAttack":
|
|
1083
|
-
this.generatedCoords =
|
|
1267
|
+
this.generatedCoords = We(e);
|
|
1084
1268
|
break;
|
|
1085
1269
|
case "curved":
|
|
1086
|
-
this.generatedCoords =
|
|
1270
|
+
this.generatedCoords = Be(e);
|
|
1087
1271
|
break;
|
|
1088
1272
|
default:
|
|
1089
|
-
this.generatedCoords =
|
|
1273
|
+
this.generatedCoords = ee(e[0], e[e.length - 1]);
|
|
1090
1274
|
break;
|
|
1091
1275
|
}
|
|
1092
1276
|
return this.generatedCoords;
|
|
@@ -1113,7 +1297,7 @@ class ct extends x {
|
|
|
1113
1297
|
};
|
|
1114
1298
|
}
|
|
1115
1299
|
}
|
|
1116
|
-
class
|
|
1300
|
+
class kt extends E {
|
|
1117
1301
|
category = "text";
|
|
1118
1302
|
constructor(e) {
|
|
1119
1303
|
super(e);
|
|
@@ -1132,8 +1316,8 @@ class ht extends x {
|
|
|
1132
1316
|
return this.getCenterPoints();
|
|
1133
1317
|
}
|
|
1134
1318
|
}
|
|
1135
|
-
const
|
|
1136
|
-
class
|
|
1319
|
+
const Rt = v.DEG2RAD, Te = 111320;
|
|
1320
|
+
class Pt extends E {
|
|
1137
1321
|
category = "circle";
|
|
1138
1322
|
constructor(e) {
|
|
1139
1323
|
super(e);
|
|
@@ -1146,274 +1330,274 @@ class ut extends x {
|
|
|
1146
1330
|
getExtentPoints() {
|
|
1147
1331
|
const e = this.options.points;
|
|
1148
1332
|
if (!e || e.length === 0) return [];
|
|
1149
|
-
const t = e[0][0], r = e[0][1], i = this.options.radius || 0, n = i / (
|
|
1333
|
+
const t = e[0][0], r = e[0][1], i = this.options.radius || 0, n = i / (Te * Math.cos(r * Rt)), o = i / Te;
|
|
1150
1334
|
return [
|
|
1151
1335
|
[t - n, r - o],
|
|
1152
1336
|
[t + n, r + o]
|
|
1153
1337
|
];
|
|
1154
1338
|
}
|
|
1155
1339
|
}
|
|
1156
|
-
const
|
|
1157
|
-
function
|
|
1340
|
+
const Et = 3, It = 1e3;
|
|
1341
|
+
function Lt(s) {
|
|
1158
1342
|
return Number.isFinite(s) ? Math.max(Math.round(s), 0) : 0;
|
|
1159
1343
|
}
|
|
1160
|
-
function
|
|
1161
|
-
const e =
|
|
1344
|
+
function At(s) {
|
|
1345
|
+
const e = Lt(s), t = It + e * Et;
|
|
1162
1346
|
if (!Number.isSafeInteger(t))
|
|
1163
1347
|
throw new Error("Plot renderOrder exceeded JavaScript safe integer range.");
|
|
1164
1348
|
return t;
|
|
1165
1349
|
}
|
|
1166
|
-
new
|
|
1167
|
-
new
|
|
1168
|
-
new
|
|
1169
|
-
new
|
|
1170
|
-
new
|
|
1171
|
-
new
|
|
1172
|
-
new
|
|
1173
|
-
new
|
|
1174
|
-
new
|
|
1175
|
-
new
|
|
1176
|
-
new
|
|
1177
|
-
new
|
|
1178
|
-
new
|
|
1179
|
-
new
|
|
1180
|
-
new
|
|
1181
|
-
new
|
|
1182
|
-
new
|
|
1183
|
-
new
|
|
1184
|
-
new
|
|
1185
|
-
new
|
|
1186
|
-
new
|
|
1187
|
-
new
|
|
1188
|
-
new
|
|
1189
|
-
Object.freeze(new
|
|
1190
|
-
new
|
|
1191
|
-
new
|
|
1192
|
-
new
|
|
1193
|
-
new
|
|
1194
|
-
new
|
|
1195
|
-
new
|
|
1196
|
-
new
|
|
1197
|
-
new
|
|
1198
|
-
new
|
|
1350
|
+
new l(1, 1, 0);
|
|
1351
|
+
new l();
|
|
1352
|
+
new l();
|
|
1353
|
+
new l();
|
|
1354
|
+
new l();
|
|
1355
|
+
new l();
|
|
1356
|
+
new l();
|
|
1357
|
+
new l();
|
|
1358
|
+
new l();
|
|
1359
|
+
new l();
|
|
1360
|
+
new l();
|
|
1361
|
+
new l();
|
|
1362
|
+
new l();
|
|
1363
|
+
new l();
|
|
1364
|
+
new f();
|
|
1365
|
+
new l();
|
|
1366
|
+
new l();
|
|
1367
|
+
new l();
|
|
1368
|
+
new l();
|
|
1369
|
+
new l();
|
|
1370
|
+
new l();
|
|
1371
|
+
new l();
|
|
1372
|
+
new l();
|
|
1373
|
+
Object.freeze(new l(0, 0, 1));
|
|
1374
|
+
new l();
|
|
1375
|
+
new l();
|
|
1376
|
+
new l();
|
|
1377
|
+
new l();
|
|
1378
|
+
new l();
|
|
1379
|
+
new l();
|
|
1380
|
+
new l();
|
|
1381
|
+
new l();
|
|
1382
|
+
new Ge();
|
|
1199
1383
|
new Array(9);
|
|
1200
|
-
new
|
|
1201
|
-
new
|
|
1202
|
-
new
|
|
1203
|
-
new
|
|
1204
|
-
new
|
|
1205
|
-
new
|
|
1206
|
-
new
|
|
1207
|
-
new
|
|
1208
|
-
new
|
|
1209
|
-
new
|
|
1210
|
-
new
|
|
1211
|
-
new
|
|
1212
|
-
new
|
|
1213
|
-
new
|
|
1214
|
-
new
|
|
1215
|
-
new
|
|
1216
|
-
new
|
|
1217
|
-
new
|
|
1218
|
-
new
|
|
1219
|
-
new
|
|
1384
|
+
new l();
|
|
1385
|
+
new l();
|
|
1386
|
+
new l();
|
|
1387
|
+
new l();
|
|
1388
|
+
new l();
|
|
1389
|
+
new l();
|
|
1390
|
+
new l();
|
|
1391
|
+
new l();
|
|
1392
|
+
new l();
|
|
1393
|
+
new l();
|
|
1394
|
+
new l();
|
|
1395
|
+
new l();
|
|
1396
|
+
new l();
|
|
1397
|
+
new l();
|
|
1398
|
+
new l();
|
|
1399
|
+
new l();
|
|
1400
|
+
new f();
|
|
1401
|
+
new l();
|
|
1402
|
+
new l();
|
|
1403
|
+
new l();
|
|
1404
|
+
new ot();
|
|
1405
|
+
new l();
|
|
1406
|
+
new l();
|
|
1407
|
+
new l();
|
|
1408
|
+
new l();
|
|
1409
|
+
new l();
|
|
1410
|
+
new l();
|
|
1411
|
+
new l();
|
|
1412
|
+
new l();
|
|
1413
|
+
new l();
|
|
1414
|
+
new l();
|
|
1415
|
+
new l();
|
|
1416
|
+
new l();
|
|
1417
|
+
new l();
|
|
1418
|
+
new l();
|
|
1419
|
+
new l();
|
|
1420
|
+
new l();
|
|
1421
|
+
new l();
|
|
1422
|
+
new l();
|
|
1423
|
+
new l();
|
|
1424
|
+
new l();
|
|
1425
|
+
new l();
|
|
1426
|
+
new l();
|
|
1427
|
+
new l();
|
|
1428
|
+
new l();
|
|
1429
|
+
new l();
|
|
1430
|
+
new l();
|
|
1431
|
+
new l();
|
|
1220
1432
|
new Ge();
|
|
1221
|
-
new
|
|
1222
|
-
new
|
|
1223
|
-
new
|
|
1224
|
-
new
|
|
1225
|
-
new
|
|
1226
|
-
new
|
|
1227
|
-
new
|
|
1228
|
-
new
|
|
1229
|
-
new
|
|
1230
|
-
new
|
|
1231
|
-
new
|
|
1232
|
-
new
|
|
1233
|
-
new
|
|
1234
|
-
new
|
|
1235
|
-
new
|
|
1236
|
-
new
|
|
1237
|
-
new
|
|
1238
|
-
new
|
|
1239
|
-
new
|
|
1240
|
-
new
|
|
1241
|
-
new
|
|
1242
|
-
new
|
|
1243
|
-
new
|
|
1244
|
-
new
|
|
1245
|
-
new
|
|
1246
|
-
new
|
|
1247
|
-
new
|
|
1248
|
-
new
|
|
1249
|
-
new
|
|
1250
|
-
new
|
|
1251
|
-
new
|
|
1252
|
-
new
|
|
1253
|
-
new
|
|
1254
|
-
new
|
|
1255
|
-
new
|
|
1256
|
-
new
|
|
1257
|
-
new
|
|
1258
|
-
new
|
|
1259
|
-
new
|
|
1260
|
-
new
|
|
1261
|
-
new
|
|
1262
|
-
new
|
|
1263
|
-
new
|
|
1264
|
-
new
|
|
1265
|
-
new
|
|
1266
|
-
new
|
|
1267
|
-
new
|
|
1268
|
-
new
|
|
1269
|
-
new
|
|
1270
|
-
new
|
|
1271
|
-
new
|
|
1272
|
-
new
|
|
1273
|
-
new
|
|
1274
|
-
new
|
|
1275
|
-
new
|
|
1276
|
-
new
|
|
1277
|
-
new
|
|
1278
|
-
new
|
|
1279
|
-
new
|
|
1280
|
-
new
|
|
1281
|
-
new
|
|
1282
|
-
new
|
|
1283
|
-
new
|
|
1284
|
-
new
|
|
1285
|
-
new
|
|
1286
|
-
new
|
|
1287
|
-
new
|
|
1288
|
-
new
|
|
1289
|
-
new
|
|
1290
|
-
new
|
|
1291
|
-
new
|
|
1292
|
-
new
|
|
1293
|
-
new
|
|
1294
|
-
new
|
|
1295
|
-
new
|
|
1296
|
-
new
|
|
1297
|
-
new
|
|
1298
|
-
new
|
|
1299
|
-
new
|
|
1300
|
-
new
|
|
1301
|
-
new
|
|
1302
|
-
new
|
|
1303
|
-
new
|
|
1304
|
-
new
|
|
1305
|
-
new
|
|
1306
|
-
new
|
|
1307
|
-
new
|
|
1308
|
-
new
|
|
1309
|
-
new
|
|
1310
|
-
new
|
|
1311
|
-
new
|
|
1312
|
-
new
|
|
1313
|
-
|
|
1314
|
-
new a();
|
|
1315
|
-
new a();
|
|
1316
|
-
new a();
|
|
1317
|
-
new a();
|
|
1318
|
-
new a();
|
|
1319
|
-
new a();
|
|
1320
|
-
new a();
|
|
1321
|
-
new a();
|
|
1322
|
-
new a();
|
|
1323
|
-
new a();
|
|
1324
|
-
new a();
|
|
1325
|
-
new g();
|
|
1326
|
-
new g();
|
|
1327
|
-
new a();
|
|
1328
|
-
new a();
|
|
1329
|
-
new a();
|
|
1330
|
-
new g();
|
|
1331
|
-
new g();
|
|
1332
|
-
new a();
|
|
1333
|
-
new a();
|
|
1334
|
-
new g();
|
|
1335
|
-
new g();
|
|
1336
|
-
new a();
|
|
1337
|
-
new a();
|
|
1338
|
-
new a();
|
|
1339
|
-
new a();
|
|
1340
|
-
new a();
|
|
1341
|
-
class b {
|
|
1433
|
+
new l();
|
|
1434
|
+
new l();
|
|
1435
|
+
new l();
|
|
1436
|
+
new l();
|
|
1437
|
+
new l();
|
|
1438
|
+
new l();
|
|
1439
|
+
new l();
|
|
1440
|
+
new l();
|
|
1441
|
+
new l();
|
|
1442
|
+
new l();
|
|
1443
|
+
new l();
|
|
1444
|
+
new l();
|
|
1445
|
+
new l();
|
|
1446
|
+
new l();
|
|
1447
|
+
new l();
|
|
1448
|
+
new l();
|
|
1449
|
+
new l();
|
|
1450
|
+
new l();
|
|
1451
|
+
new l();
|
|
1452
|
+
new l();
|
|
1453
|
+
new l();
|
|
1454
|
+
new l();
|
|
1455
|
+
new l();
|
|
1456
|
+
new l();
|
|
1457
|
+
new l();
|
|
1458
|
+
new l();
|
|
1459
|
+
new l();
|
|
1460
|
+
new l();
|
|
1461
|
+
new f();
|
|
1462
|
+
new f();
|
|
1463
|
+
new l();
|
|
1464
|
+
new l();
|
|
1465
|
+
new l();
|
|
1466
|
+
new l();
|
|
1467
|
+
new l();
|
|
1468
|
+
new l();
|
|
1469
|
+
new l();
|
|
1470
|
+
new f();
|
|
1471
|
+
new f();
|
|
1472
|
+
new l();
|
|
1473
|
+
new l();
|
|
1474
|
+
new l();
|
|
1475
|
+
new f();
|
|
1476
|
+
new f();
|
|
1477
|
+
new l();
|
|
1478
|
+
new l();
|
|
1479
|
+
new l();
|
|
1480
|
+
new l();
|
|
1481
|
+
new f();
|
|
1482
|
+
new f();
|
|
1483
|
+
new l();
|
|
1484
|
+
new l();
|
|
1485
|
+
new l();
|
|
1486
|
+
new l();
|
|
1487
|
+
new l();
|
|
1488
|
+
new l();
|
|
1489
|
+
new l();
|
|
1490
|
+
new l();
|
|
1491
|
+
new l();
|
|
1492
|
+
new l();
|
|
1493
|
+
new l();
|
|
1494
|
+
new f();
|
|
1495
|
+
new l();
|
|
1496
|
+
new l();
|
|
1497
|
+
new l();
|
|
1498
|
+
new l();
|
|
1499
|
+
new l();
|
|
1500
|
+
new l();
|
|
1501
|
+
new l();
|
|
1502
|
+
new l();
|
|
1503
|
+
new l();
|
|
1504
|
+
new l();
|
|
1505
|
+
new l();
|
|
1506
|
+
new l();
|
|
1507
|
+
new l();
|
|
1508
|
+
new l();
|
|
1509
|
+
new f();
|
|
1510
|
+
new f();
|
|
1511
|
+
new l();
|
|
1512
|
+
new l();
|
|
1513
|
+
new l();
|
|
1514
|
+
new f();
|
|
1515
|
+
new f();
|
|
1516
|
+
new l();
|
|
1517
|
+
new l();
|
|
1518
|
+
new f();
|
|
1519
|
+
new f();
|
|
1520
|
+
new l();
|
|
1521
|
+
new l();
|
|
1522
|
+
new l();
|
|
1523
|
+
new l();
|
|
1524
|
+
new l();
|
|
1525
|
+
class P {
|
|
1342
1526
|
constructor(e, t) {
|
|
1343
1527
|
this.next = null, this.key = e, this.data = t, this.left = null, this.right = null;
|
|
1344
1528
|
}
|
|
1345
1529
|
}
|
|
1346
|
-
function
|
|
1530
|
+
function Nt(s, e) {
|
|
1347
1531
|
return s > e ? 1 : s < e ? -1 : 0;
|
|
1348
1532
|
}
|
|
1349
|
-
function
|
|
1350
|
-
const r = new
|
|
1533
|
+
function k(s, e, t) {
|
|
1534
|
+
const r = new P(null, null);
|
|
1351
1535
|
let i = r, n = r;
|
|
1352
1536
|
for (; ; ) {
|
|
1353
1537
|
const o = t(s, e.key);
|
|
1354
1538
|
if (o < 0) {
|
|
1355
1539
|
if (e.left === null) break;
|
|
1356
1540
|
if (t(s, e.left.key) < 0) {
|
|
1357
|
-
const
|
|
1358
|
-
if (e.left =
|
|
1541
|
+
const a = e.left;
|
|
1542
|
+
if (e.left = a.right, a.right = e, e = a, e.left === null) break;
|
|
1359
1543
|
}
|
|
1360
1544
|
n.left = e, n = e, e = e.left;
|
|
1361
1545
|
} else if (o > 0) {
|
|
1362
1546
|
if (e.right === null) break;
|
|
1363
1547
|
if (t(s, e.right.key) > 0) {
|
|
1364
|
-
const
|
|
1365
|
-
if (e.right =
|
|
1548
|
+
const a = e.right;
|
|
1549
|
+
if (e.right = a.left, a.left = e, e = a, e.right === null) break;
|
|
1366
1550
|
}
|
|
1367
1551
|
i.right = e, i = e, e = e.right;
|
|
1368
1552
|
} else break;
|
|
1369
1553
|
}
|
|
1370
1554
|
return i.right = e.left, n.left = e.right, e.left = r.right, e.right = r.left, e;
|
|
1371
1555
|
}
|
|
1372
|
-
function
|
|
1373
|
-
const i = new
|
|
1556
|
+
function Q(s, e, t, r) {
|
|
1557
|
+
const i = new P(s, e);
|
|
1374
1558
|
if (t === null)
|
|
1375
1559
|
return i.left = i.right = null, i;
|
|
1376
|
-
t =
|
|
1560
|
+
t = k(s, t, r);
|
|
1377
1561
|
const n = r(s, t.key);
|
|
1378
1562
|
return n < 0 ? (i.left = t.left, i.right = t, t.left = null) : n >= 0 && (i.right = t.right, i.left = t, t.right = null), i;
|
|
1379
1563
|
}
|
|
1380
|
-
function
|
|
1564
|
+
function xe(s, e, t) {
|
|
1381
1565
|
let r = null, i = null;
|
|
1382
1566
|
if (e) {
|
|
1383
|
-
e =
|
|
1567
|
+
e = k(s, e, t);
|
|
1384
1568
|
const n = t(e.key, s);
|
|
1385
1569
|
n === 0 ? (r = e.left, i = e.right) : n < 0 ? (i = e.right, e.right = null, r = e) : (r = e.left, e.left = null, i = e);
|
|
1386
1570
|
}
|
|
1387
1571
|
return { left: r, right: i };
|
|
1388
1572
|
}
|
|
1389
|
-
function
|
|
1390
|
-
return e === null ? s : (s === null || (e =
|
|
1573
|
+
function Ft(s, e, t) {
|
|
1574
|
+
return e === null ? s : (s === null || (e = k(s.key, e, t), e.left = s), e);
|
|
1391
1575
|
}
|
|
1392
|
-
function
|
|
1576
|
+
function te(s, e, t, r, i) {
|
|
1393
1577
|
if (s) {
|
|
1394
1578
|
r(`${e}${t ? "└── " : "├── "}${i(s)}
|
|
1395
1579
|
`);
|
|
1396
1580
|
const n = e + (t ? " " : "│ ");
|
|
1397
|
-
s.left &&
|
|
1581
|
+
s.left && te(s.left, n, !1, r, i), s.right && te(s.right, n, !0, r, i);
|
|
1398
1582
|
}
|
|
1399
1583
|
}
|
|
1400
|
-
class
|
|
1401
|
-
constructor(e =
|
|
1584
|
+
class Dt {
|
|
1585
|
+
constructor(e = Nt) {
|
|
1402
1586
|
this._root = null, this._size = 0, this._comparator = e;
|
|
1403
1587
|
}
|
|
1404
1588
|
/**
|
|
1405
1589
|
* Inserts a key, allows duplicates
|
|
1406
1590
|
*/
|
|
1407
1591
|
insert(e, t) {
|
|
1408
|
-
return this._size++, this._root =
|
|
1592
|
+
return this._size++, this._root = Q(e, t, this._root, this._comparator);
|
|
1409
1593
|
}
|
|
1410
1594
|
/**
|
|
1411
1595
|
* Adds a key, if it is not present in the tree
|
|
1412
1596
|
*/
|
|
1413
1597
|
add(e, t) {
|
|
1414
|
-
const r = new
|
|
1598
|
+
const r = new P(e, t);
|
|
1415
1599
|
this._root === null && (r.left = r.right = null, this._size++, this._root = r);
|
|
1416
|
-
const i = this._comparator, n =
|
|
1600
|
+
const i = this._comparator, n = k(e, this._root, i), o = i(e, n.key);
|
|
1417
1601
|
return o === 0 ? this._root = n : (o < 0 ? (r.left = n.left, r.right = n, n.left = null) : o > 0 && (r.right = n.right, r.left = n, n.right = null), this._size++, this._root = r), this._root;
|
|
1418
1602
|
}
|
|
1419
1603
|
/**
|
|
@@ -1428,7 +1612,7 @@ class wt {
|
|
|
1428
1612
|
*/
|
|
1429
1613
|
_remove(e, t, r) {
|
|
1430
1614
|
let i;
|
|
1431
|
-
return t === null ? null : (t =
|
|
1615
|
+
return t === null ? null : (t = k(e, t, r), r(e, t.key) === 0 ? (t.left === null ? i = t.right : (i = k(e, t.left, r), i.right = t.right), this._size--, i) : t);
|
|
1432
1616
|
}
|
|
1433
1617
|
/**
|
|
1434
1618
|
* Removes and returns the node with smallest key
|
|
@@ -1437,7 +1621,7 @@ class wt {
|
|
|
1437
1621
|
let e = this._root;
|
|
1438
1622
|
if (e) {
|
|
1439
1623
|
for (; e.left; ) e = e.left;
|
|
1440
|
-
return this._root =
|
|
1624
|
+
return this._root = k(e.key, this._root, this._comparator), this._root = this._remove(e.key, this._root, this._comparator), { key: e.key, data: e.data };
|
|
1441
1625
|
}
|
|
1442
1626
|
return null;
|
|
1443
1627
|
}
|
|
@@ -1455,7 +1639,7 @@ class wt {
|
|
|
1455
1639
|
return null;
|
|
1456
1640
|
}
|
|
1457
1641
|
find(e) {
|
|
1458
|
-
return this._root && (this._root =
|
|
1642
|
+
return this._root && (this._root = k(e, this._root, this._comparator), this._comparator(e, this._root.key) !== 0) ? null : this._root;
|
|
1459
1643
|
}
|
|
1460
1644
|
contains(e) {
|
|
1461
1645
|
let t = this._root;
|
|
@@ -1480,16 +1664,16 @@ class wt {
|
|
|
1480
1664
|
*/
|
|
1481
1665
|
range(e, t, r, i) {
|
|
1482
1666
|
const n = [], o = this._comparator;
|
|
1483
|
-
let
|
|
1484
|
-
for (; n.length !== 0 ||
|
|
1485
|
-
if (
|
|
1486
|
-
n.push(
|
|
1667
|
+
let a = this._root, h;
|
|
1668
|
+
for (; n.length !== 0 || a; )
|
|
1669
|
+
if (a)
|
|
1670
|
+
n.push(a), a = a.left;
|
|
1487
1671
|
else {
|
|
1488
|
-
if (
|
|
1672
|
+
if (a = n.pop(), h = o(a.key, t), h > 0)
|
|
1489
1673
|
break;
|
|
1490
|
-
if (o(
|
|
1674
|
+
if (o(a.key, e) >= 0 && r.call(i, a))
|
|
1491
1675
|
return this;
|
|
1492
|
-
|
|
1676
|
+
a = a.right;
|
|
1493
1677
|
}
|
|
1494
1678
|
return this;
|
|
1495
1679
|
}
|
|
@@ -1572,7 +1756,7 @@ class wt {
|
|
|
1572
1756
|
return this._root = null, this._size = 0, this;
|
|
1573
1757
|
}
|
|
1574
1758
|
toList() {
|
|
1575
|
-
return
|
|
1759
|
+
return Gt(this._root);
|
|
1576
1760
|
}
|
|
1577
1761
|
/**
|
|
1578
1762
|
* Bulk-load items. Both array have to be same size
|
|
@@ -1580,15 +1764,15 @@ class wt {
|
|
|
1580
1764
|
load(e, t = [], r = !1) {
|
|
1581
1765
|
let i = e.length;
|
|
1582
1766
|
const n = this._comparator;
|
|
1583
|
-
if (r &&
|
|
1584
|
-
this._root =
|
|
1767
|
+
if (r && se(e, t, 0, i - 1, n), this._root === null)
|
|
1768
|
+
this._root = re(e, t, 0, i), this._size = i;
|
|
1585
1769
|
else {
|
|
1586
|
-
const o =
|
|
1770
|
+
const o = Bt(
|
|
1587
1771
|
this.toList(),
|
|
1588
|
-
|
|
1772
|
+
Ut(e, t),
|
|
1589
1773
|
n
|
|
1590
1774
|
);
|
|
1591
|
-
i = this._size + i, this._root =
|
|
1775
|
+
i = this._size + i, this._root = ie({ head: o }, 0, i);
|
|
1592
1776
|
}
|
|
1593
1777
|
return this;
|
|
1594
1778
|
}
|
|
@@ -1603,15 +1787,15 @@ class wt {
|
|
|
1603
1787
|
}
|
|
1604
1788
|
toString(e = (t) => String(t.key)) {
|
|
1605
1789
|
const t = [];
|
|
1606
|
-
return
|
|
1790
|
+
return te(this._root, "", !0, (r) => t.push(r), e), t.join("");
|
|
1607
1791
|
}
|
|
1608
1792
|
update(e, t, r) {
|
|
1609
1793
|
const i = this._comparator;
|
|
1610
|
-
let { left: n, right: o } =
|
|
1611
|
-
i(e, t) < 0 ? o =
|
|
1794
|
+
let { left: n, right: o } = xe(e, this._root, i);
|
|
1795
|
+
i(e, t) < 0 ? o = Q(t, r, o, i) : n = Q(t, r, n, i), this._root = Ft(n, o, i);
|
|
1612
1796
|
}
|
|
1613
1797
|
split(e) {
|
|
1614
|
-
return
|
|
1798
|
+
return xe(e, this._root, this._comparator);
|
|
1615
1799
|
}
|
|
1616
1800
|
*[Symbol.iterator]() {
|
|
1617
1801
|
let e = this._root;
|
|
@@ -1621,77 +1805,77 @@ class wt {
|
|
|
1621
1805
|
e !== null ? (t.push(e), e = e.left) : t.length !== 0 ? (e = t.pop(), yield e, e = e.right) : r = !0;
|
|
1622
1806
|
}
|
|
1623
1807
|
}
|
|
1624
|
-
function
|
|
1808
|
+
function re(s, e, t, r) {
|
|
1625
1809
|
const i = r - t;
|
|
1626
1810
|
if (i > 0) {
|
|
1627
|
-
const n = t + Math.floor(i / 2), o = s[n],
|
|
1628
|
-
return h.left =
|
|
1811
|
+
const n = t + Math.floor(i / 2), o = s[n], a = e[n], h = new P(o, a);
|
|
1812
|
+
return h.left = re(s, e, t, n), h.right = re(s, e, n + 1, r), h;
|
|
1629
1813
|
}
|
|
1630
1814
|
return null;
|
|
1631
1815
|
}
|
|
1632
|
-
function
|
|
1633
|
-
const t = new
|
|
1816
|
+
function Ut(s, e) {
|
|
1817
|
+
const t = new P(null, null);
|
|
1634
1818
|
let r = t;
|
|
1635
1819
|
for (let i = 0; i < s.length; i++)
|
|
1636
|
-
r = r.next = new
|
|
1820
|
+
r = r.next = new P(s[i], e[i]);
|
|
1637
1821
|
return r.next = null, t.next;
|
|
1638
1822
|
}
|
|
1639
|
-
function
|
|
1823
|
+
function Gt(s) {
|
|
1640
1824
|
let e = s;
|
|
1641
1825
|
const t = [];
|
|
1642
1826
|
let r = !1;
|
|
1643
|
-
const i = new
|
|
1827
|
+
const i = new P(null, null);
|
|
1644
1828
|
let n = i;
|
|
1645
1829
|
for (; !r; )
|
|
1646
1830
|
e ? (t.push(e), e = e.left) : t.length > 0 ? (e = n = n.next = t.pop(), e = e.right) : r = !0;
|
|
1647
1831
|
return n.next = null, i.next;
|
|
1648
1832
|
}
|
|
1649
|
-
function
|
|
1833
|
+
function ie(s, e, t) {
|
|
1650
1834
|
const r = t - e;
|
|
1651
1835
|
if (r > 0) {
|
|
1652
|
-
const i = e + Math.floor(r / 2), n =
|
|
1653
|
-
return o.left = n, s.head = s.head.next, o.right =
|
|
1836
|
+
const i = e + Math.floor(r / 2), n = ie(s, e, i), o = s.head;
|
|
1837
|
+
return o.left = n, s.head = s.head.next, o.right = ie(s, i + 1, t), o;
|
|
1654
1838
|
}
|
|
1655
1839
|
return null;
|
|
1656
1840
|
}
|
|
1657
|
-
function
|
|
1658
|
-
const r = new
|
|
1841
|
+
function Bt(s, e, t) {
|
|
1842
|
+
const r = new P(null, null);
|
|
1659
1843
|
let i = r, n = s, o = e;
|
|
1660
1844
|
for (; n !== null && o !== null; )
|
|
1661
1845
|
t(n.key, o.key) < 0 ? (i.next = n, n = n.next) : (i.next = o, o = o.next), i = i.next;
|
|
1662
1846
|
return n !== null ? i.next = n : o !== null && (i.next = o), r.next;
|
|
1663
1847
|
}
|
|
1664
|
-
function
|
|
1848
|
+
function se(s, e, t, r, i) {
|
|
1665
1849
|
if (t >= r) return;
|
|
1666
1850
|
const n = s[t + r >> 1];
|
|
1667
|
-
let o = t - 1,
|
|
1851
|
+
let o = t - 1, a = r + 1;
|
|
1668
1852
|
for (; ; ) {
|
|
1669
1853
|
do
|
|
1670
1854
|
o++;
|
|
1671
1855
|
while (i(s[o], n) < 0);
|
|
1672
1856
|
do
|
|
1673
|
-
|
|
1674
|
-
while (i(s[
|
|
1675
|
-
if (o >=
|
|
1857
|
+
a--;
|
|
1858
|
+
while (i(s[a], n) > 0);
|
|
1859
|
+
if (o >= a) break;
|
|
1676
1860
|
let h = s[o];
|
|
1677
|
-
s[o] = s[
|
|
1861
|
+
s[o] = s[a], s[a] = h, h = e[o], e[o] = e[a], e[a] = h;
|
|
1678
1862
|
}
|
|
1679
|
-
|
|
1863
|
+
se(s, e, t, a, i), se(s, e, a + 1, r, i);
|
|
1680
1864
|
}
|
|
1681
|
-
let
|
|
1682
|
-
|
|
1683
|
-
const
|
|
1684
|
-
if (-
|
|
1865
|
+
let R = Number.EPSILON;
|
|
1866
|
+
R === void 0 && (R = Math.pow(2, -52));
|
|
1867
|
+
const Wt = R * R, Ce = (s, e) => {
|
|
1868
|
+
if (-R < s && s < R && -R < e && e < R)
|
|
1685
1869
|
return 0;
|
|
1686
1870
|
const t = s - e;
|
|
1687
|
-
return t * t <
|
|
1871
|
+
return t * t < Wt * s * e ? 0 : s < e ? -1 : 1;
|
|
1688
1872
|
};
|
|
1689
|
-
class
|
|
1873
|
+
class zt {
|
|
1690
1874
|
constructor() {
|
|
1691
1875
|
this.reset();
|
|
1692
1876
|
}
|
|
1693
1877
|
reset() {
|
|
1694
|
-
this.xRounder = new
|
|
1878
|
+
this.xRounder = new ke(), this.yRounder = new ke();
|
|
1695
1879
|
}
|
|
1696
1880
|
round(e, t) {
|
|
1697
1881
|
return {
|
|
@@ -1700,9 +1884,9 @@ class bt {
|
|
|
1700
1884
|
};
|
|
1701
1885
|
}
|
|
1702
1886
|
}
|
|
1703
|
-
class
|
|
1887
|
+
class ke {
|
|
1704
1888
|
constructor() {
|
|
1705
|
-
this.tree = new
|
|
1889
|
+
this.tree = new Dt(), this.round(0);
|
|
1706
1890
|
}
|
|
1707
1891
|
// Note: this can rounds input values backwards or forwards.
|
|
1708
1892
|
// You might ask, why not restrict this to just rounding
|
|
@@ -1713,47 +1897,47 @@ class ve {
|
|
|
1713
1897
|
// angle for t-intersections).
|
|
1714
1898
|
round(e) {
|
|
1715
1899
|
const t = this.tree.add(e), r = this.tree.prev(t);
|
|
1716
|
-
if (r !== null &&
|
|
1900
|
+
if (r !== null && Ce(t.key, r.key) === 0)
|
|
1717
1901
|
return this.tree.remove(e), r.key;
|
|
1718
1902
|
const i = this.tree.next(t);
|
|
1719
|
-
return i !== null &&
|
|
1903
|
+
return i !== null && Ce(t.key, i.key) === 0 ? (this.tree.remove(e), i.key) : e;
|
|
1720
1904
|
}
|
|
1721
1905
|
}
|
|
1722
|
-
new
|
|
1906
|
+
new zt();
|
|
1723
1907
|
typeof process < "u" && process.env.POLYGON_CLIPPING_MAX_QUEUE_SIZE;
|
|
1724
1908
|
typeof process < "u" && process.env.POLYGON_CLIPPING_MAX_SWEEPLINE_SEGMENTS;
|
|
1725
|
-
|
|
1726
|
-
|
|
1727
|
-
const xt = "data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='128'%20height='128'%20viewBox='0%200%20128%20128'%20role='img'%20aria-labelledby='title%20desc'%3e%3ctitle%20id='title'%3e联动单位%3c/title%3e%3cdesc%20id='desc'%3eGIS%20点位图标;类别:联动;样式:classified%3c/desc%3e%3cdefs%3e%3csymbol%20id='icon-linkage'%20viewBox='0%200%20100%20100'%3e%3cg%20stroke='currentColor'%20stroke-width='6'%20stroke-linecap='round'%20fill='none'%3e%3cpath%20d='M50%2050L22%2024M50%2050l28-26M50%2050L20%2076M50%2050l30%2026'/%3e%3ccircle%20cx='50'%20cy='50'%20r='13'%20fill='currentColor'/%3e%3ccircle%20cx='22'%20cy='24'%20r='10'/%3e%3ccircle%20cx='78'%20cy='24'%20r='10'/%3e%3ccircle%20cx='20'%20cy='76'%20r='10'/%3e%3ccircle%20cx='80'%20cy='76'%20r='10'/%3e%3c/g%3e%3cpath%20d='M44%2050l4%204%209-10'%20fill='none'%20stroke='%23F8FAFC'%20stroke-width='5'%20stroke-linecap='round'%20stroke-linejoin='round'/%3e%3c/symbol%3e%3c/defs%3e%3cg%20color='%23B67CFF'%3e%3cuse%20href='%23icon-linkage'%20x='16'%20y='16'%20width='96'%20height='96'/%3e%3c/g%3e%3c/svg%3e", Ct = "data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='128'%20height='128'%20viewBox='0%200%20128%20128'%20role='img'%20aria-labelledby='title%20desc'%3e%3ctitle%20id='title'%3e保障物资点%3c/title%3e%3cdesc%20id='desc'%3eGIS%20点位图标;类别:物资;样式:classified%3c/desc%3e%3cdefs%3e%3csymbol%20id='icon-supplies'%20viewBox='0%200%20100%20100'%3e%3cg%20stroke='currentColor'%20stroke-width='6'%20stroke-linejoin='round'%20fill='none'%3e%3cpath%20d='M18%2035l32-16%2032%2016v44L50%2092%2018%2079zM18%2035l32%2017%2032-17M50%2052v40'/%3e%3cpath%20d='M34%2027l32%2017'/%3e%3c/g%3e%3cpath%20d='M41%2058h18v8h-18zM46%2053h8v18h-8z'%20fill='%23F8FAFC'/%3e%3c/symbol%3e%3c/defs%3e%3cg%20color='%23FFAD33'%3e%3cuse%20href='%23icon-supplies'%20x='16'%20y='16'%20width='96'%20height='96'/%3e%3c/g%3e%3c/svg%3e", Tt = "data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='128'%20height='128'%20viewBox='0%200%20128%20128'%20role='img'%20aria-labelledby='title%20desc'%3e%3ctitle%20id='title'%3e消防站%3c/title%3e%3cdesc%20id='desc'%3eGIS%20点位图标;类别:消防站;样式:classified%3c/desc%3e%3cdefs%3e%3csymbol%20id='icon-fire-station'%20viewBox='0%200%20100%20100'%3e%3cg%20stroke='currentColor'%20stroke-width='6'%20stroke-linecap='round'%20stroke-linejoin='round'%20fill='none'%3e%3cpath%20d='M13%2088h74M20%2088V39l30-22%2030%2022v49M31%2088V60h38v28M41%2088V70h18v18'/%3e%3cpath%20d='M20%2041h60'/%3e%3c/g%3e%3cpath%20d='M50%2029c-9%2010-12%2016-9%2022%202%204%205%206%209%206s8-2%2010-6c3-6%200-12-10-22z'%20fill='%23F8FAFC'/%3e%3c/symbol%3e%3c/defs%3e%3cg%20color='%23FF6B2C'%3e%3cuse%20href='%23icon-fire-station'%20x='16'%20y='16'%20width='96'%20height='96'/%3e%3c/g%3e%3c/svg%3e", kt = "data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='128'%20height='128'%20viewBox='0%200%20128%20128'%20role='img'%20aria-labelledby='title%20desc'%3e%3ctitle%20id='title'%3e消防水池%3c/title%3e%3cdesc%20id='desc'%3eGIS%20点位图标;类别:水源;样式:classified%3c/desc%3e%3cdefs%3e%3csymbol%20id='icon-fire-pool'%20viewBox='0%200%20100%20100'%3e%3cg%20stroke='currentColor'%20stroke-width='6'%20stroke-linecap='round'%20stroke-linejoin='round'%20fill='none'%3e%3cpath%20d='M16%2039h68v43H16zM25%2055c6-5%2012-5%2018%200s12%205%2018%200%2012-5%2018%200M25%2068c6-5%2012-5%2018%200s12%205%2018%200%2012-5%2018%200'/%3e%3cpath%20d='M67%2021v28M77%2021v28M67%2029h10M67%2039h10'/%3e%3c/g%3e%3cpath%20d='M28%2025h25l-6%207H28z'%20fill='currentColor'/%3e%3c/symbol%3e%3c/defs%3e%3cg%20color='%2338BDF8'%3e%3cuse%20href='%23icon-fire-pool'%20x='16'%20y='16'%20width='96'%20height='96'/%3e%3c/g%3e%3c/svg%3e", Pt = "data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='128'%20height='128'%20viewBox='0%200%20128%20128'%20role='img'%20aria-labelledby='title%20desc'%3e%3ctitle%20id='title'%3e医院资源点%3c/title%3e%3cdesc%20id='desc'%3eGIS%20点位图标;类别:医疗;样式:classified%3c/desc%3e%3cdefs%3e%3csymbol%20id='icon-hospital'%20viewBox='0%200%20100%20100'%3e%3cg%20stroke='currentColor'%20stroke-width='6'%20stroke-linecap='round'%20stroke-linejoin='round'%20fill='none'%3e%3cpath%20d='M18%2087V29h64v58M10%2087h80M29%2087V72h14v15M57%2087V72h14v15'/%3e%3cpath%20d='M50%2038v22M39%2049h22'%20stroke='%23F8FAFC'%20stroke-width='9'/%3e%3c/g%3e%3cpath%20d='M27%2022h46v12H27z'%20fill='currentColor'/%3e%3c/symbol%3e%3c/defs%3e%3cg%20color='%2322D3EE'%3e%3cuse%20href='%23icon-hospital'%20x='16'%20y='16'%20width='96'%20height='96'/%3e%3c/g%3e%3c/svg%3e", Et = "data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='128'%20height='128'%20viewBox='0%200%20128%20128'%20role='img'%20aria-labelledby='title%20desc'%3e%3ctitle%20id='title'%3e市政消火栓%3c/title%3e%3cdesc%20id='desc'%3eGIS%20点位图标;类别:消防;样式:classified%3c/desc%3e%3cdefs%3e%3csymbol%20id='icon-hydrant-municipal'%20viewBox='0%200%20100%20100'%3e%3cg%20stroke='currentColor'%20stroke-width='6'%20stroke-linecap='round'%20stroke-linejoin='round'%20fill='none'%3e%3cpath%20d='M10%2086h80M18%2086V48h18v38M64%2086V35h20v51M21%2057h4M29%2057h4M21%2068h4M29%2068h4M69%2046h4M77%2046h4M69%2058h4M77%2058h4'%20opacity='0.7'/%3e%3cpath%20d='M42%2086V60h18v26M39%2060h24l-4-11H43zM46%2049v-7h10v7'/%3e%3cpath%20d='M42%2067h-8v12h8M60%2067h8v12h-8'/%3e%3c/g%3e%3ccircle%20cx='51'%20cy='72'%20r='5'%20fill='%23F8FAFC'/%3e%3c/symbol%3e%3c/defs%3e%3cg%20color='%23FF4D3D'%3e%3cuse%20href='%23icon-hydrant-municipal'%20x='16'%20y='16'%20width='96'%20height='96'/%3e%3c/g%3e%3c/svg%3e", It = "data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='128'%20height='128'%20viewBox='0%200%20128%20128'%20role='img'%20aria-labelledby='title%20desc'%3e%3ctitle%20id='title'%3e天然水源%3c/title%3e%3cdesc%20id='desc'%3eGIS%20点位图标;类别:水源;样式:classified%3c/desc%3e%3cdefs%3e%3csymbol%20id='icon-natural-water'%20viewBox='0%200%20100%20100'%3e%3cg%20stroke='currentColor'%20stroke-width='6'%20stroke-linecap='round'%20stroke-linejoin='round'%20fill='none'%3e%3cpath%20d='M14%2050l20-24%2014%2016%2011-12%2027%2029'/%3e%3cpath%20d='M15%2064c8-6%2015-6%2023%200s15%206%2023%200%2015-6%2024%200M15%2078c8-6%2015-6%2023%200s15%206%2023%200%2015-6%2024%200'/%3e%3c/g%3e%3ccircle%20cx='72'%20cy='23'%20r='8'%20fill='%23F8FAFC'/%3e%3c/symbol%3e%3c/defs%3e%3cg%20color='%2338BDF8'%3e%3cuse%20href='%23icon-natural-water'%20x='16'%20y='16'%20width='96'%20height='96'/%3e%3c/g%3e%3c/svg%3e", Rt = "data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='128'%20height='128'%20viewBox='0%200%20128%20128'%20role='img'%20aria-labelledby='title%20desc'%3e%3ctitle%20id='title'%3e室外消火栓(地上式)%3c/title%3e%3cdesc%20id='desc'%3eGIS%20点位图标;类别:消防;样式:classified%3c/desc%3e%3cdefs%3e%3csymbol%20id='icon-hydrant-ground'%20viewBox='0%200%20100%20100'%3e%3cg%20stroke='currentColor'%20stroke-width='7'%20stroke-linecap='round'%20stroke-linejoin='round'%20fill='none'%3e%3cpath%20d='M12%2084h76M38%2084V45h24v39M38%2057H24v16h14M62%2057h14v16H62'/%3e%3cpath%20d='M33%2045h34l-5-16H38zM44%2029v-8h12v8'/%3e%3ccircle%20cx='24'%20cy='65'%20r='5'%20fill='currentColor'/%3e%3ccircle%20cx='76'%20cy='65'%20r='5'%20fill='currentColor'/%3e%3c/g%3e%3cpath%20d='M50%2055l7%2012H43z'%20fill='%23F8FAFC'/%3e%3c/symbol%3e%3c/defs%3e%3cg%20color='%23FF4D3D'%3e%3cuse%20href='%23icon-hydrant-ground'%20x='16'%20y='16'%20width='96'%20height='96'/%3e%3c/g%3e%3c/svg%3e", Nt = "data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='128'%20height='128'%20viewBox='0%200%20128%20128'%20role='img'%20aria-labelledby='title%20desc'%3e%3ctitle%20id='title'%3e室外消火栓(地下式)%3c/title%3e%3cdesc%20id='desc'%3eGIS%20点位图标;类别:消防;样式:classified%3c/desc%3e%3cdefs%3e%3csymbol%20id='icon-hydrant-underground'%20viewBox='0%200%20100%20100'%3e%3cg%20stroke='currentColor'%20stroke-width='6'%20stroke-linecap='round'%20stroke-linejoin='round'%20fill='none'%3e%3cpath%20d='M12%2040h76'/%3e%3cellipse%20cx='50'%20cy='39'%20rx='22'%20ry='9'%20fill='currentColor'/%3e%3cpath%20d='M35%2045v30h30V45M42%2075v12M58%2075v12M31%2087h38'/%3e%3cpath%20d='M43%2054h14M50%2047v18'%20stroke='%23F8FAFC'/%3e%3c/g%3e%3cpath%20d='M25%2028l-7-8M75%2028l7-8'%20stroke='currentColor'%20stroke-width='5'%20stroke-linecap='round'/%3e%3c/symbol%3e%3c/defs%3e%3cg%20color='%23FF4D3D'%3e%3cuse%20href='%23icon-hydrant-underground'%20x='16'%20y='16'%20width='96'%20height='96'/%3e%3c/g%3e%3c/svg%3e", At = "data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='128'%20height='128'%20viewBox='0%200%20128%20128'%20role='img'%20aria-labelledby='title%20desc'%3e%3ctitle%20id='title'%3e室外消火栓%3c/title%3e%3cdesc%20id='desc'%3eGIS%20点位图标;类别:消防;样式:classified%3c/desc%3e%3cdefs%3e%3csymbol%20id='icon-hydrant-general'%20viewBox='0%200%20100%20100'%3e%3cg%20stroke='currentColor'%20stroke-width='7'%20stroke-linecap='round'%20stroke-linejoin='round'%20fill='none'%3e%3cpath%20d='M35%2087h30M39%2087V48h22v39M39%2056H25v17h14M61%2056h14v17H61'/%3e%3cpath%20d='M34%2048h32l-5-15H39zM44%2033v-9h12v9'/%3e%3ccircle%20cx='25'%20cy='64'%20r='5'%20fill='currentColor'/%3e%3ccircle%20cx='75'%20cy='64'%20r='5'%20fill='currentColor'/%3e%3c/g%3e%3cpath%20d='M50%2058c-7%209-10%2014-10%2019a10%2010%200%200%200%2020%200c0-5-3-10-10-19z'%20fill='%23F8FAFC'/%3e%3c/symbol%3e%3c/defs%3e%3cg%20color='%23FF4D3D'%3e%3cuse%20href='%23icon-hydrant-general'%20x='16'%20y='16'%20width='96'%20height='96'/%3e%3c/g%3e%3c/svg%3e", Ft = "data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='128'%20height='128'%20viewBox='0%200%20128%20128'%20role='img'%20aria-labelledby='title%20desc'%3e%3ctitle%20id='title'%3e公安资源点%3c/title%3e%3cdesc%20id='desc'%3eGIS%20点位图标;类别:公安;样式:classified%3c/desc%3e%3cdefs%3e%3csymbol%20id='icon-police'%20viewBox='0%200%20100%20100'%3e%3cpath%20d='M50%2014l32%2011v23c0%2021-13%2034-32%2041-19-7-32-20-32-41V25z'%20fill='none'%20stroke='currentColor'%20stroke-width='7'%20stroke-linejoin='round'/%3e%3cpath%20d='M50%2030l5.5%2011.2%2012.4%201.8-9%208.8%202.1%2012.4L50%2058.4l-11%205.8%202.1-12.4-9-8.8%2012.4-1.8z'%20fill='%23F8FAFC'/%3e%3cpath%20d='M35%2073h30'%20stroke='currentColor'%20stroke-width='6'%20stroke-linecap='round'/%3e%3c/symbol%3e%3c/defs%3e%3cg%20color='%235B7CFF'%3e%3cuse%20href='%23icon-police'%20x='16'%20y='16'%20width='96'%20height='96'/%3e%3c/g%3e%3c/svg%3e", K = {
|
|
1728
|
-
OutdoorFireHydrant:
|
|
1729
|
-
UndergroundHydrant:
|
|
1730
|
-
AboveGroundHydrant:
|
|
1731
|
-
MunicipalFireHydrants:
|
|
1732
|
-
FireWaterReservoir:
|
|
1733
|
-
NaturalWater:
|
|
1734
|
-
HospitalResourcePoint:
|
|
1735
|
-
PublicSecurityResourcePoint:
|
|
1736
|
-
SupportMaterialPoint:
|
|
1737
|
-
FireStation:
|
|
1738
|
-
LinkageUnit:
|
|
1739
|
-
},
|
|
1740
|
-
Object.keys(
|
|
1909
|
+
v.DEG2RAD;
|
|
1910
|
+
v.DEG2RAD;
|
|
1911
|
+
const Jt = "data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='128'%20height='128'%20viewBox='0%200%20128%20128'%20role='img'%20aria-labelledby='title%20desc'%3e%3ctitle%20id='title'%3e联动单位%3c/title%3e%3cdesc%20id='desc'%3eGIS%20点位图标;类别:联动;样式:classified%3c/desc%3e%3cdefs%3e%3csymbol%20id='icon-linkage'%20viewBox='0%200%20100%20100'%3e%3cg%20stroke='currentColor'%20stroke-width='6'%20stroke-linecap='round'%20fill='none'%3e%3cpath%20d='M50%2050L22%2024M50%2050l28-26M50%2050L20%2076M50%2050l30%2026'/%3e%3ccircle%20cx='50'%20cy='50'%20r='13'%20fill='currentColor'/%3e%3ccircle%20cx='22'%20cy='24'%20r='10'/%3e%3ccircle%20cx='78'%20cy='24'%20r='10'/%3e%3ccircle%20cx='20'%20cy='76'%20r='10'/%3e%3ccircle%20cx='80'%20cy='76'%20r='10'/%3e%3c/g%3e%3cpath%20d='M44%2050l4%204%209-10'%20fill='none'%20stroke='%23F8FAFC'%20stroke-width='5'%20stroke-linecap='round'%20stroke-linejoin='round'/%3e%3c/symbol%3e%3c/defs%3e%3cg%20color='%23B67CFF'%3e%3cuse%20href='%23icon-linkage'%20x='16'%20y='16'%20width='96'%20height='96'/%3e%3c/g%3e%3c/svg%3e", $t = "data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='128'%20height='128'%20viewBox='0%200%20128%20128'%20role='img'%20aria-labelledby='title%20desc'%3e%3ctitle%20id='title'%3e保障物资点%3c/title%3e%3cdesc%20id='desc'%3eGIS%20点位图标;类别:物资;样式:classified%3c/desc%3e%3cdefs%3e%3csymbol%20id='icon-supplies'%20viewBox='0%200%20100%20100'%3e%3cg%20stroke='currentColor'%20stroke-width='6'%20stroke-linejoin='round'%20fill='none'%3e%3cpath%20d='M18%2035l32-16%2032%2016v44L50%2092%2018%2079zM18%2035l32%2017%2032-17M50%2052v40'/%3e%3cpath%20d='M34%2027l32%2017'/%3e%3c/g%3e%3cpath%20d='M41%2058h18v8h-18zM46%2053h8v18h-8z'%20fill='%23F8FAFC'/%3e%3c/symbol%3e%3c/defs%3e%3cg%20color='%23FFAD33'%3e%3cuse%20href='%23icon-supplies'%20x='16'%20y='16'%20width='96'%20height='96'/%3e%3c/g%3e%3c/svg%3e", jt = "data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='128'%20height='128'%20viewBox='0%200%20128%20128'%20role='img'%20aria-labelledby='title%20desc'%3e%3ctitle%20id='title'%3e消防站%3c/title%3e%3cdesc%20id='desc'%3eGIS%20点位图标;类别:消防站;样式:classified%3c/desc%3e%3cdefs%3e%3csymbol%20id='icon-fire-station'%20viewBox='0%200%20100%20100'%3e%3cg%20stroke='currentColor'%20stroke-width='6'%20stroke-linecap='round'%20stroke-linejoin='round'%20fill='none'%3e%3cpath%20d='M13%2088h74M20%2088V39l30-22%2030%2022v49M31%2088V60h38v28M41%2088V70h18v18'/%3e%3cpath%20d='M20%2041h60'/%3e%3c/g%3e%3cpath%20d='M50%2029c-9%2010-12%2016-9%2022%202%204%205%206%209%206s8-2%2010-6c3-6%200-12-10-22z'%20fill='%23F8FAFC'/%3e%3c/symbol%3e%3c/defs%3e%3cg%20color='%23FF6B2C'%3e%3cuse%20href='%23icon-fire-station'%20x='16'%20y='16'%20width='96'%20height='96'/%3e%3c/g%3e%3c/svg%3e", Ht = "data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='128'%20height='128'%20viewBox='0%200%20128%20128'%20role='img'%20aria-labelledby='title%20desc'%3e%3ctitle%20id='title'%3e消防水池%3c/title%3e%3cdesc%20id='desc'%3eGIS%20点位图标;类别:水源;样式:classified%3c/desc%3e%3cdefs%3e%3csymbol%20id='icon-fire-pool'%20viewBox='0%200%20100%20100'%3e%3cg%20stroke='currentColor'%20stroke-width='6'%20stroke-linecap='round'%20stroke-linejoin='round'%20fill='none'%3e%3cpath%20d='M16%2039h68v43H16zM25%2055c6-5%2012-5%2018%200s12%205%2018%200%2012-5%2018%200M25%2068c6-5%2012-5%2018%200s12%205%2018%200%2012-5%2018%200'/%3e%3cpath%20d='M67%2021v28M77%2021v28M67%2029h10M67%2039h10'/%3e%3c/g%3e%3cpath%20d='M28%2025h25l-6%207H28z'%20fill='currentColor'/%3e%3c/symbol%3e%3c/defs%3e%3cg%20color='%2338BDF8'%3e%3cuse%20href='%23icon-fire-pool'%20x='16'%20y='16'%20width='96'%20height='96'/%3e%3c/g%3e%3c/svg%3e", Yt = "data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='128'%20height='128'%20viewBox='0%200%20128%20128'%20role='img'%20aria-labelledby='title%20desc'%3e%3ctitle%20id='title'%3e医院资源点%3c/title%3e%3cdesc%20id='desc'%3eGIS%20点位图标;类别:医疗;样式:classified%3c/desc%3e%3cdefs%3e%3csymbol%20id='icon-hospital'%20viewBox='0%200%20100%20100'%3e%3cg%20stroke='currentColor'%20stroke-width='6'%20stroke-linecap='round'%20stroke-linejoin='round'%20fill='none'%3e%3cpath%20d='M18%2087V29h64v58M10%2087h80M29%2087V72h14v15M57%2087V72h14v15'/%3e%3cpath%20d='M50%2038v22M39%2049h22'%20stroke='%23F8FAFC'%20stroke-width='9'/%3e%3c/g%3e%3cpath%20d='M27%2022h46v12H27z'%20fill='currentColor'/%3e%3c/symbol%3e%3c/defs%3e%3cg%20color='%2322D3EE'%3e%3cuse%20href='%23icon-hospital'%20x='16'%20y='16'%20width='96'%20height='96'/%3e%3c/g%3e%3c/svg%3e", Qt = "data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='128'%20height='128'%20viewBox='0%200%20128%20128'%20role='img'%20aria-labelledby='title%20desc'%3e%3ctitle%20id='title'%3e市政消火栓%3c/title%3e%3cdesc%20id='desc'%3eGIS%20点位图标;类别:消防;样式:classified%3c/desc%3e%3cdefs%3e%3csymbol%20id='icon-hydrant-municipal'%20viewBox='0%200%20100%20100'%3e%3cg%20stroke='currentColor'%20stroke-width='6'%20stroke-linecap='round'%20stroke-linejoin='round'%20fill='none'%3e%3cpath%20d='M10%2086h80M18%2086V48h18v38M64%2086V35h20v51M21%2057h4M29%2057h4M21%2068h4M29%2068h4M69%2046h4M77%2046h4M69%2058h4M77%2058h4'%20opacity='0.7'/%3e%3cpath%20d='M42%2086V60h18v26M39%2060h24l-4-11H43zM46%2049v-7h10v7'/%3e%3cpath%20d='M42%2067h-8v12h8M60%2067h8v12h-8'/%3e%3c/g%3e%3ccircle%20cx='51'%20cy='72'%20r='5'%20fill='%23F8FAFC'/%3e%3c/symbol%3e%3c/defs%3e%3cg%20color='%23FF4D3D'%3e%3cuse%20href='%23icon-hydrant-municipal'%20x='16'%20y='16'%20width='96'%20height='96'/%3e%3c/g%3e%3c/svg%3e", Vt = "data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='128'%20height='128'%20viewBox='0%200%20128%20128'%20role='img'%20aria-labelledby='title%20desc'%3e%3ctitle%20id='title'%3e天然水源%3c/title%3e%3cdesc%20id='desc'%3eGIS%20点位图标;类别:水源;样式:classified%3c/desc%3e%3cdefs%3e%3csymbol%20id='icon-natural-water'%20viewBox='0%200%20100%20100'%3e%3cg%20stroke='currentColor'%20stroke-width='6'%20stroke-linecap='round'%20stroke-linejoin='round'%20fill='none'%3e%3cpath%20d='M14%2050l20-24%2014%2016%2011-12%2027%2029'/%3e%3cpath%20d='M15%2064c8-6%2015-6%2023%200s15%206%2023%200%2015-6%2024%200M15%2078c8-6%2015-6%2023%200s15%206%2023%200%2015-6%2024%200'/%3e%3c/g%3e%3ccircle%20cx='72'%20cy='23'%20r='8'%20fill='%23F8FAFC'/%3e%3c/symbol%3e%3c/defs%3e%3cg%20color='%2338BDF8'%3e%3cuse%20href='%23icon-natural-water'%20x='16'%20y='16'%20width='96'%20height='96'/%3e%3c/g%3e%3c/svg%3e", Xt = "data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='128'%20height='128'%20viewBox='0%200%20128%20128'%20role='img'%20aria-labelledby='title%20desc'%3e%3ctitle%20id='title'%3e室外消火栓(地上式)%3c/title%3e%3cdesc%20id='desc'%3eGIS%20点位图标;类别:消防;样式:classified%3c/desc%3e%3cdefs%3e%3csymbol%20id='icon-hydrant-ground'%20viewBox='0%200%20100%20100'%3e%3cg%20stroke='currentColor'%20stroke-width='7'%20stroke-linecap='round'%20stroke-linejoin='round'%20fill='none'%3e%3cpath%20d='M12%2084h76M38%2084V45h24v39M38%2057H24v16h14M62%2057h14v16H62'/%3e%3cpath%20d='M33%2045h34l-5-16H38zM44%2029v-8h12v8'/%3e%3ccircle%20cx='24'%20cy='65'%20r='5'%20fill='currentColor'/%3e%3ccircle%20cx='76'%20cy='65'%20r='5'%20fill='currentColor'/%3e%3c/g%3e%3cpath%20d='M50%2055l7%2012H43z'%20fill='%23F8FAFC'/%3e%3c/symbol%3e%3c/defs%3e%3cg%20color='%23FF4D3D'%3e%3cuse%20href='%23icon-hydrant-ground'%20x='16'%20y='16'%20width='96'%20height='96'/%3e%3c/g%3e%3c/svg%3e", qt = "data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='128'%20height='128'%20viewBox='0%200%20128%20128'%20role='img'%20aria-labelledby='title%20desc'%3e%3ctitle%20id='title'%3e室外消火栓(地下式)%3c/title%3e%3cdesc%20id='desc'%3eGIS%20点位图标;类别:消防;样式:classified%3c/desc%3e%3cdefs%3e%3csymbol%20id='icon-hydrant-underground'%20viewBox='0%200%20100%20100'%3e%3cg%20stroke='currentColor'%20stroke-width='6'%20stroke-linecap='round'%20stroke-linejoin='round'%20fill='none'%3e%3cpath%20d='M12%2040h76'/%3e%3cellipse%20cx='50'%20cy='39'%20rx='22'%20ry='9'%20fill='currentColor'/%3e%3cpath%20d='M35%2045v30h30V45M42%2075v12M58%2075v12M31%2087h38'/%3e%3cpath%20d='M43%2054h14M50%2047v18'%20stroke='%23F8FAFC'/%3e%3c/g%3e%3cpath%20d='M25%2028l-7-8M75%2028l7-8'%20stroke='currentColor'%20stroke-width='5'%20stroke-linecap='round'/%3e%3c/symbol%3e%3c/defs%3e%3cg%20color='%23FF4D3D'%3e%3cuse%20href='%23icon-hydrant-underground'%20x='16'%20y='16'%20width='96'%20height='96'/%3e%3c/g%3e%3c/svg%3e", Zt = "data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='128'%20height='128'%20viewBox='0%200%20128%20128'%20role='img'%20aria-labelledby='title%20desc'%3e%3ctitle%20id='title'%3e室外消火栓%3c/title%3e%3cdesc%20id='desc'%3eGIS%20点位图标;类别:消防;样式:classified%3c/desc%3e%3cdefs%3e%3csymbol%20id='icon-hydrant-general'%20viewBox='0%200%20100%20100'%3e%3cg%20stroke='currentColor'%20stroke-width='7'%20stroke-linecap='round'%20stroke-linejoin='round'%20fill='none'%3e%3cpath%20d='M35%2087h30M39%2087V48h22v39M39%2056H25v17h14M61%2056h14v17H61'/%3e%3cpath%20d='M34%2048h32l-5-15H39zM44%2033v-9h12v9'/%3e%3ccircle%20cx='25'%20cy='64'%20r='5'%20fill='currentColor'/%3e%3ccircle%20cx='75'%20cy='64'%20r='5'%20fill='currentColor'/%3e%3c/g%3e%3cpath%20d='M50%2058c-7%209-10%2014-10%2019a10%2010%200%200%200%2020%200c0-5-3-10-10-19z'%20fill='%23F8FAFC'/%3e%3c/symbol%3e%3c/defs%3e%3cg%20color='%23FF4D3D'%3e%3cuse%20href='%23icon-hydrant-general'%20x='16'%20y='16'%20width='96'%20height='96'/%3e%3c/g%3e%3c/svg%3e", Kt = "data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='128'%20height='128'%20viewBox='0%200%20128%20128'%20role='img'%20aria-labelledby='title%20desc'%3e%3ctitle%20id='title'%3e公安资源点%3c/title%3e%3cdesc%20id='desc'%3eGIS%20点位图标;类别:公安;样式:classified%3c/desc%3e%3cdefs%3e%3csymbol%20id='icon-police'%20viewBox='0%200%20100%20100'%3e%3cpath%20d='M50%2014l32%2011v23c0%2021-13%2034-32%2041-19-7-32-20-32-41V25z'%20fill='none'%20stroke='currentColor'%20stroke-width='7'%20stroke-linejoin='round'/%3e%3cpath%20d='M50%2030l5.5%2011.2%2012.4%201.8-9%208.8%202.1%2012.4L50%2058.4l-11%205.8%202.1-12.4-9-8.8%2012.4-1.8z'%20fill='%23F8FAFC'/%3e%3cpath%20d='M35%2073h30'%20stroke='currentColor'%20stroke-width='6'%20stroke-linecap='round'/%3e%3c/symbol%3e%3c/defs%3e%3cg%20color='%235B7CFF'%3e%3cuse%20href='%23icon-police'%20x='16'%20y='16'%20width='96'%20height='96'/%3e%3c/g%3e%3c/svg%3e", ne = {
|
|
1912
|
+
OutdoorFireHydrant: Zt,
|
|
1913
|
+
UndergroundHydrant: qt,
|
|
1914
|
+
AboveGroundHydrant: Xt,
|
|
1915
|
+
MunicipalFireHydrants: Qt,
|
|
1916
|
+
FireWaterReservoir: Ht,
|
|
1917
|
+
NaturalWater: Vt,
|
|
1918
|
+
HospitalResourcePoint: Yt,
|
|
1919
|
+
PublicSecurityResourcePoint: Kt,
|
|
1920
|
+
SupportMaterialPoint: $t,
|
|
1921
|
+
FireStation: jt,
|
|
1922
|
+
LinkageUnit: Jt
|
|
1923
|
+
}, Dr = Object.freeze(
|
|
1924
|
+
Object.keys(ne)
|
|
1741
1925
|
);
|
|
1742
|
-
function
|
|
1926
|
+
function er(s) {
|
|
1743
1927
|
const e = s?.trim();
|
|
1744
1928
|
return !e || !Object.prototype.hasOwnProperty.call(
|
|
1745
|
-
|
|
1929
|
+
ne,
|
|
1746
1930
|
e
|
|
1747
|
-
) ? null :
|
|
1931
|
+
) ? null : ne[e];
|
|
1748
1932
|
}
|
|
1749
|
-
function
|
|
1750
|
-
return s.imageUrl?.trim() ||
|
|
1933
|
+
function Re(s) {
|
|
1934
|
+
return s.imageUrl?.trim() || er(s.ontologyId);
|
|
1751
1935
|
}
|
|
1752
|
-
new
|
|
1753
|
-
function
|
|
1754
|
-
return s instanceof
|
|
1936
|
+
new f();
|
|
1937
|
+
function Pe(s) {
|
|
1938
|
+
return s instanceof J || s instanceof B ? s.group : s.classification.group;
|
|
1755
1939
|
}
|
|
1756
|
-
function
|
|
1940
|
+
function tr(s) {
|
|
1757
1941
|
const e = s.options, t = JSON.stringify(e.points ?? []);
|
|
1758
1942
|
switch (s.category) {
|
|
1759
1943
|
case "circle":
|
|
@@ -1772,27 +1956,27 @@ function Gt(s) {
|
|
|
1772
1956
|
return `${s.category}|${t}`;
|
|
1773
1957
|
}
|
|
1774
1958
|
}
|
|
1775
|
-
function
|
|
1959
|
+
function Ee(s, e = "solid") {
|
|
1776
1960
|
return s === "unfilledArrow" ? "open" : s === "filledArrow" ? "solid" : e;
|
|
1777
1961
|
}
|
|
1778
|
-
function
|
|
1962
|
+
function rr(s) {
|
|
1779
1963
|
if (s.showArrow === !1) return "none";
|
|
1780
1964
|
const e = s.startArrowStyle !== void 0 && s.startArrowStyle !== null, t = s.endArrowStyle !== void 0 && s.endArrowStyle !== null;
|
|
1781
1965
|
return e && t ? "both" : t ? "right" : e ? "left" : "none";
|
|
1782
1966
|
}
|
|
1783
|
-
function
|
|
1784
|
-
const e =
|
|
1967
|
+
function Ie(s) {
|
|
1968
|
+
const e = rr(s), t = Ee(s.startArrowStyle), r = Ee(s.endArrowStyle);
|
|
1785
1969
|
return {
|
|
1786
1970
|
arrowMode: e,
|
|
1787
1971
|
startArrowStyle: t,
|
|
1788
1972
|
endArrowStyle: r
|
|
1789
1973
|
};
|
|
1790
1974
|
}
|
|
1791
|
-
function
|
|
1975
|
+
function ir(s, e) {
|
|
1792
1976
|
const t = s.options;
|
|
1793
1977
|
return `${t.strokeColor}|${t.strokeWidth}|${t.strokeOpacity}|${t.fillColor}|${t.fillOpacity}|${e}|${t.fontColor ?? ""}|${t.fontSize ?? ""}`;
|
|
1794
1978
|
}
|
|
1795
|
-
class
|
|
1979
|
+
class sr {
|
|
1796
1980
|
/** 标绘 id → 渲染记录 */
|
|
1797
1981
|
_entries = /* @__PURE__ */ new Map();
|
|
1798
1982
|
/** 由 GroundDecalManager 写入的标绘集合(引用共享) */
|
|
@@ -1804,6 +1988,8 @@ class Wt {
|
|
|
1804
1988
|
/** 图片资源异步就绪后请求宿主刷新;按 URL 去重监听 */
|
|
1805
1989
|
_requestRender;
|
|
1806
1990
|
_watchedImageUrls = /* @__PURE__ */ new Set();
|
|
1991
|
+
_imageObjectURLs = /* @__PURE__ */ new Map();
|
|
1992
|
+
_imageRequests = /* @__PURE__ */ new Set();
|
|
1807
1993
|
/** 已释放标记 */
|
|
1808
1994
|
_disposed = !1;
|
|
1809
1995
|
constructor(e) {
|
|
@@ -1835,31 +2021,41 @@ class Wt {
|
|
|
1835
2021
|
*/
|
|
1836
2022
|
redraw() {
|
|
1837
2023
|
if (this._disposed) return;
|
|
1838
|
-
for (const [
|
|
1839
|
-
this._shapes.has(
|
|
2024
|
+
for (const [r, i] of this._entries)
|
|
2025
|
+
this._shapes.has(r) || (this._scene.remove(i.group), i.primitive.dispose(), this._entries.delete(r));
|
|
1840
2026
|
let e = 0;
|
|
1841
|
-
for (const [
|
|
1842
|
-
const
|
|
2027
|
+
for (const [r, i] of this._shapes) {
|
|
2028
|
+
const n = At(e);
|
|
1843
2029
|
e += 1;
|
|
1844
|
-
const
|
|
1845
|
-
if (
|
|
1846
|
-
this._refreshLightweight(
|
|
2030
|
+
const o = this._entries.get(r), a = tr(i), h = ir(i, this._opacity);
|
|
2031
|
+
if (o !== void 0 && o.signature === a && (this._supportsStyleHotUpdate(o) || o.styleSignature === h)) {
|
|
2032
|
+
this._refreshLightweight(o, n), o.styleSignature = h;
|
|
1847
2033
|
continue;
|
|
1848
2034
|
}
|
|
1849
|
-
|
|
1850
|
-
const
|
|
1851
|
-
if (
|
|
1852
|
-
const
|
|
1853
|
-
|
|
1854
|
-
const
|
|
1855
|
-
plot:
|
|
1856
|
-
primitive:
|
|
1857
|
-
group:
|
|
1858
|
-
signature:
|
|
1859
|
-
styleSignature:
|
|
2035
|
+
o !== void 0 && (this._scene.remove(o.group), o.primitive.dispose(), this._entries.delete(r));
|
|
2036
|
+
const c = this._buildPrimitive(i, n);
|
|
2037
|
+
if (c === null) continue;
|
|
2038
|
+
const d = Pe(c);
|
|
2039
|
+
d.visible = i.options.visible !== !1, this._scene.add(d);
|
|
2040
|
+
const g = {
|
|
2041
|
+
plot: i,
|
|
2042
|
+
primitive: c,
|
|
2043
|
+
group: d,
|
|
2044
|
+
signature: a,
|
|
2045
|
+
styleSignature: h
|
|
1860
2046
|
};
|
|
1861
|
-
this._entries.set(
|
|
2047
|
+
this._entries.set(r, g), c instanceof B && this._refreshLightweight(g, n);
|
|
2048
|
+
}
|
|
2049
|
+
const t = /* @__PURE__ */ new Set();
|
|
2050
|
+
for (const r of this._shapes.values()) {
|
|
2051
|
+
const i = r.options;
|
|
2052
|
+
if (r.category === "point" && i.pointStyle === "image") {
|
|
2053
|
+
const n = Re(i);
|
|
2054
|
+
n && t.add(n.trim());
|
|
2055
|
+
}
|
|
1862
2056
|
}
|
|
2057
|
+
for (const [r, i] of this._imageObjectURLs)
|
|
2058
|
+
t.has(r) || (i.startsWith("blob:") && URL.revokeObjectURL(i), this._imageObjectURLs.delete(r));
|
|
1863
2059
|
}
|
|
1864
2060
|
/**
|
|
1865
2061
|
* 宿主每帧调用:把 frameState 透传给所有图元(深度 + 视口 + 相机 + pixelRatio)。
|
|
@@ -1874,7 +2070,9 @@ class Wt {
|
|
|
1874
2070
|
if (!this._disposed) {
|
|
1875
2071
|
for (const e of this._entries.values())
|
|
1876
2072
|
this._scene.remove(e.group), e.primitive.dispose();
|
|
1877
|
-
this._entries.clear(), this._disposed = !0
|
|
2073
|
+
this._entries.clear(), this._disposed = !0, this._imageRequests.forEach((e) => e.abort()), this._imageRequests.clear(), this._imageObjectURLs.forEach((e) => {
|
|
2074
|
+
e.startsWith("blob:") && URL.revokeObjectURL(e);
|
|
2075
|
+
}), this._imageObjectURLs.clear();
|
|
1878
2076
|
}
|
|
1879
2077
|
}
|
|
1880
2078
|
// ── 内部:轻量刷新 / 样式热更新支持判定 ──
|
|
@@ -1884,7 +2082,7 @@ class Wt {
|
|
|
1884
2082
|
*/
|
|
1885
2083
|
_supportsStyleHotUpdate(e) {
|
|
1886
2084
|
const { primitive: t, plot: r } = e;
|
|
1887
|
-
return t instanceof
|
|
2085
|
+
return t instanceof J || t instanceof B || t instanceof z && r.options.pointStyle === "image";
|
|
1888
2086
|
}
|
|
1889
2087
|
/**
|
|
1890
2088
|
* 几何未变时的轻量刷新:
|
|
@@ -1893,25 +2091,25 @@ class Wt {
|
|
|
1893
2091
|
* - 文字:setText(内容 + 颜色 + 不透明度)/ setVisible(不重建图元)。
|
|
1894
2092
|
*/
|
|
1895
2093
|
_refreshLightweight(e, t) {
|
|
1896
|
-
if (e.group.visible = e.plot.options.visible !== !1, e.primitive.setRenderOrder?.(t), e.primitive instanceof
|
|
2094
|
+
if (e.group.visible = e.plot.options.visible !== !1, e.primitive.setRenderOrder?.(t), e.primitive instanceof J) {
|
|
1897
2095
|
const r = e.plot.options, {
|
|
1898
2096
|
startArrowStyle: i,
|
|
1899
2097
|
endArrowStyle: n
|
|
1900
|
-
} =
|
|
2098
|
+
} = Ie(r);
|
|
1901
2099
|
e.primitive.setColor(
|
|
1902
2100
|
r.strokeColor,
|
|
1903
2101
|
(r.strokeOpacity ?? 100) * this._opacity
|
|
1904
2102
|
);
|
|
1905
2103
|
const o = typeof r.strokeWidth == "number" && r.strokeWidth > 0 ? r.strokeWidth : 5;
|
|
1906
2104
|
e.primitive.setWidth(o), e.primitive.setArrowStyles(i, n);
|
|
1907
|
-
const
|
|
1908
|
-
e.primitive.setArrowSizeMeters(
|
|
2105
|
+
const a = Math.max(o * 4, 1), h = Math.max(o * 3, 0.8);
|
|
2106
|
+
e.primitive.setArrowSizeMeters(a, h), e.primitive.setVisible(r.visible !== !1);
|
|
1909
2107
|
}
|
|
1910
|
-
if (e.primitive instanceof
|
|
2108
|
+
if (e.primitive instanceof z) {
|
|
1911
2109
|
const r = e.plot.options;
|
|
1912
2110
|
r.pointStyle === "image" && e.primitive.setImageOpacity((r.fillOpacity ?? 100) * this._opacity);
|
|
1913
2111
|
}
|
|
1914
|
-
if (e.primitive instanceof
|
|
2112
|
+
if (e.primitive instanceof B) {
|
|
1915
2113
|
const r = e.plot.options;
|
|
1916
2114
|
e.primitive.setText({
|
|
1917
2115
|
content: r.content,
|
|
@@ -1935,7 +2133,7 @@ class Wt {
|
|
|
1935
2133
|
offsetEastMeters: r.offsetX,
|
|
1936
2134
|
offsetNorthMeters: r.offsetY,
|
|
1937
2135
|
metersPerPixel: r.scale
|
|
1938
|
-
}), e.primitive.setVisible(r.visible !== !1), e.group =
|
|
2136
|
+
}), e.primitive.setVisible(r.visible !== !1), e.group = Pe(e.primitive), e.group.visible = r.visible !== !1;
|
|
1939
2137
|
}
|
|
1940
2138
|
}
|
|
1941
2139
|
// ── 内部:按 category 构建图元 ──
|
|
@@ -1946,17 +2144,20 @@ class Wt {
|
|
|
1946
2144
|
* @returns 渲染图元;未知类型 / 退化情况返回 null。
|
|
1947
2145
|
*/
|
|
1948
2146
|
_buildPrimitive(e, t) {
|
|
1949
|
-
const r = e.options, i = r.points ?? [], n = this._opacity, o = (r.strokeOpacity ?? 100) * n,
|
|
2147
|
+
const r = e.options, i = r.points ?? [], n = this._opacity, o = (r.strokeOpacity ?? 100) * n, a = (r.fillOpacity ?? 100) * n, h = r.visible !== !1;
|
|
1950
2148
|
switch (e.category) {
|
|
1951
2149
|
case "point": {
|
|
1952
2150
|
if (i.length === 0) return null;
|
|
1953
2151
|
const c = r;
|
|
1954
2152
|
if (c.pointStyle === "image") {
|
|
1955
|
-
const d =
|
|
1956
|
-
|
|
2153
|
+
const d = Re(c);
|
|
2154
|
+
if (!d)
|
|
2155
|
+
return console.warn(`[soonspacejs] Unknown point image ontology id: ${c.ontologyId ?? ""}`), null;
|
|
2156
|
+
const g = this._watchImageTexture(d);
|
|
2157
|
+
return g ? new z({
|
|
1957
2158
|
position: i[0],
|
|
1958
2159
|
shape: "image",
|
|
1959
|
-
imageUrl:
|
|
2160
|
+
imageUrl: g,
|
|
1960
2161
|
imageWidth: c.imageWidth,
|
|
1961
2162
|
imageHeight: c.imageHeight,
|
|
1962
2163
|
rotation: c.rotation ?? 0,
|
|
@@ -1964,12 +2165,12 @@ class Wt {
|
|
|
1964
2165
|
strokeWidth: c.strokeWidth ?? 0,
|
|
1965
2166
|
strokeOpacity: o,
|
|
1966
2167
|
fillColor: c.fillColor,
|
|
1967
|
-
fillOpacity:
|
|
2168
|
+
fillOpacity: a,
|
|
1968
2169
|
visible: h,
|
|
1969
2170
|
renderOrder: t
|
|
1970
|
-
})
|
|
2171
|
+
}) : null;
|
|
1971
2172
|
}
|
|
1972
|
-
return new
|
|
2173
|
+
return new z({
|
|
1973
2174
|
position: i[0],
|
|
1974
2175
|
shape: c.pointStyle ?? "circle",
|
|
1975
2176
|
size: c.size ?? 100,
|
|
@@ -1977,7 +2178,7 @@ class Wt {
|
|
|
1977
2178
|
strokeWidth: c.strokeWidth ?? 0,
|
|
1978
2179
|
strokeOpacity: o,
|
|
1979
2180
|
fillColor: c.fillColor,
|
|
1980
|
-
fillOpacity:
|
|
2181
|
+
fillOpacity: a,
|
|
1981
2182
|
visible: h,
|
|
1982
2183
|
renderOrder: t
|
|
1983
2184
|
});
|
|
@@ -1985,14 +2186,14 @@ class Wt {
|
|
|
1985
2186
|
case "circle": {
|
|
1986
2187
|
if (i.length === 0) return null;
|
|
1987
2188
|
const c = r;
|
|
1988
|
-
return new
|
|
2189
|
+
return new Me({
|
|
1989
2190
|
center: i[0],
|
|
1990
2191
|
radius: c.radius ?? 100,
|
|
1991
2192
|
strokeColor: c.strokeColor,
|
|
1992
2193
|
strokeWidth: c.strokeWidth ?? 0,
|
|
1993
2194
|
strokeOpacity: o,
|
|
1994
2195
|
fillColor: c.fillColor,
|
|
1995
|
-
fillOpacity:
|
|
2196
|
+
fillOpacity: a,
|
|
1996
2197
|
visible: h,
|
|
1997
2198
|
renderOrder: t
|
|
1998
2199
|
});
|
|
@@ -2000,14 +2201,14 @@ class Wt {
|
|
|
2000
2201
|
case "sector": {
|
|
2001
2202
|
if (i.length === 0) return null;
|
|
2002
2203
|
const c = r;
|
|
2003
|
-
return new
|
|
2204
|
+
return new Me({
|
|
2004
2205
|
center: i[0],
|
|
2005
2206
|
radius: c.radius ?? 100,
|
|
2006
2207
|
strokeColor: c.strokeColor,
|
|
2007
2208
|
strokeWidth: c.strokeWidth ?? 0,
|
|
2008
2209
|
strokeOpacity: o,
|
|
2009
2210
|
fillColor: c.fillColor,
|
|
2010
|
-
fillOpacity:
|
|
2211
|
+
fillOpacity: a,
|
|
2011
2212
|
visible: h,
|
|
2012
2213
|
sectorStartDegrees: c.startAngle ?? 0,
|
|
2013
2214
|
sectorAngleDegrees: c.sectorAngle ?? 360,
|
|
@@ -2016,13 +2217,13 @@ class Wt {
|
|
|
2016
2217
|
}
|
|
2017
2218
|
case "polygon":
|
|
2018
2219
|
case "rectangle":
|
|
2019
|
-
return i.length < 3 ? null : new
|
|
2220
|
+
return i.length < 3 ? null : new _e({
|
|
2020
2221
|
points: i,
|
|
2021
2222
|
strokeColor: r.strokeColor,
|
|
2022
2223
|
strokeWidth: r.strokeWidth ?? 0,
|
|
2023
2224
|
strokeOpacity: o,
|
|
2024
2225
|
fillColor: r.fillColor,
|
|
2025
|
-
fillOpacity:
|
|
2226
|
+
fillOpacity: a,
|
|
2026
2227
|
visible: h,
|
|
2027
2228
|
renderOrder: t
|
|
2028
2229
|
});
|
|
@@ -2030,13 +2231,13 @@ class Wt {
|
|
|
2030
2231
|
const c = e.generateCoords();
|
|
2031
2232
|
if (c.length < 3) return null;
|
|
2032
2233
|
const d = r;
|
|
2033
|
-
return new
|
|
2234
|
+
return new _e({
|
|
2034
2235
|
points: c,
|
|
2035
2236
|
strokeColor: d.strokeColor,
|
|
2036
2237
|
strokeWidth: d.strokeWidth ?? 0,
|
|
2037
2238
|
strokeOpacity: o,
|
|
2038
2239
|
fillColor: d.fillColor,
|
|
2039
|
-
fillOpacity:
|
|
2240
|
+
fillOpacity: a,
|
|
2040
2241
|
visible: h,
|
|
2041
2242
|
renderOrder: t
|
|
2042
2243
|
});
|
|
@@ -2045,38 +2246,38 @@ class Wt {
|
|
|
2045
2246
|
if (i.length < 2) return null;
|
|
2046
2247
|
const c = r, {
|
|
2047
2248
|
arrowMode: d,
|
|
2048
|
-
startArrowStyle:
|
|
2049
|
-
endArrowStyle:
|
|
2050
|
-
} =
|
|
2051
|
-
return new
|
|
2249
|
+
startArrowStyle: g,
|
|
2250
|
+
endArrowStyle: p
|
|
2251
|
+
} = Ie(c), m = c.strokeStyle === "dashed", _ = m ? 60 : void 0, y = m ? 40 : void 0, O = typeof c.strokeWidth == "number" && c.strokeWidth > 0 ? c.strokeWidth : 5, b = Math.max(O * 4, 1), S = Math.max(O * 3, 0.8);
|
|
2252
|
+
return new J({
|
|
2052
2253
|
points: i,
|
|
2053
2254
|
strokeColor: c.strokeColor,
|
|
2054
2255
|
strokeOpacity: o,
|
|
2055
2256
|
widthMode: "world",
|
|
2056
|
-
widthMeters:
|
|
2257
|
+
widthMeters: O,
|
|
2057
2258
|
visible: h,
|
|
2058
2259
|
arrowMode: d,
|
|
2059
|
-
arrowStyle:
|
|
2060
|
-
startArrowStyle:
|
|
2061
|
-
endArrowStyle:
|
|
2260
|
+
arrowStyle: g,
|
|
2261
|
+
startArrowStyle: g,
|
|
2262
|
+
endArrowStyle: p,
|
|
2062
2263
|
arrowWidthMode: "world",
|
|
2063
|
-
arrowLengthMeters:
|
|
2064
|
-
arrowWidthMeters:
|
|
2065
|
-
dashLengthMeters:
|
|
2066
|
-
gapLengthMeters:
|
|
2264
|
+
arrowLengthMeters: b,
|
|
2265
|
+
arrowWidthMeters: S,
|
|
2266
|
+
dashLengthMeters: _,
|
|
2267
|
+
gapLengthMeters: y,
|
|
2067
2268
|
renderOrder: t
|
|
2068
2269
|
});
|
|
2069
2270
|
}
|
|
2070
2271
|
case "text": {
|
|
2071
2272
|
if (i.length === 0) return null;
|
|
2072
2273
|
const c = r;
|
|
2073
|
-
return new
|
|
2274
|
+
return new B({
|
|
2074
2275
|
points: [i[0]],
|
|
2075
2276
|
content: c.content,
|
|
2076
2277
|
fontColor: c.fontColor,
|
|
2077
2278
|
fontSize: c.fontSize,
|
|
2078
2279
|
fillColor: c.fillColor,
|
|
2079
|
-
fillOpacity:
|
|
2280
|
+
fillOpacity: a,
|
|
2080
2281
|
strokeColor: c.strokeColor,
|
|
2081
2282
|
strokeOpacity: o,
|
|
2082
2283
|
strokeWidth: c.strokeWidth ?? 0,
|
|
@@ -2106,24 +2307,33 @@ class Wt {
|
|
|
2106
2307
|
/**
|
|
2107
2308
|
* 贴地图元依赖异步 TextureLoader,而 SoonSpace 默认按需渲染;
|
|
2108
2309
|
* 图片解码完成后若没有新的渲染请求,纹理会等到相机交互才首次显示。
|
|
2109
|
-
*
|
|
2310
|
+
* 下载后交付 Blob URL,避免外库 TextureLoader 再发起无头 HTTP 请求。
|
|
2311
|
+
* 解码完成后继续补两帧通知,保持按需渲染下的首次显示。
|
|
2110
2312
|
*/
|
|
2111
2313
|
_watchImageTexture(e) {
|
|
2112
|
-
const t = e.trim();
|
|
2113
|
-
if (
|
|
2314
|
+
const t = e.trim(), r = this._imageObjectURLs.get(t);
|
|
2315
|
+
if (r) return r;
|
|
2316
|
+
if (t.length === 0 || this._watchedImageUrls.has(t) || typeof Image > "u") return null;
|
|
2114
2317
|
this._watchedImageUrls.add(t);
|
|
2115
|
-
const r = new Image();
|
|
2116
|
-
r.crossOrigin = "anonymous";
|
|
2117
2318
|
let i = !1;
|
|
2118
2319
|
const n = () => {
|
|
2119
|
-
i || (i = !0, this._watchedImageUrls.delete(t),
|
|
2320
|
+
i || (i = !0, this._watchedImageUrls.delete(t), !this._disposed && (this.redraw(), this._requestRender?.(), requestAnimationFrame(() => {
|
|
2120
2321
|
this._disposed || this._requestRender?.();
|
|
2121
2322
|
})));
|
|
2122
|
-
};
|
|
2123
|
-
|
|
2124
|
-
|
|
2125
|
-
|
|
2126
|
-
|
|
2323
|
+
}, o = new AbortController();
|
|
2324
|
+
return this._imageRequests.add(o), w.utils.fetchResource(t, { signal: o.signal }).then((a) => {
|
|
2325
|
+
if (!a.ok) throw new Error(`Failed to load point image: ${a.status}`);
|
|
2326
|
+
return a.blob();
|
|
2327
|
+
}).then((a) => {
|
|
2328
|
+
if (this._disposed) return;
|
|
2329
|
+
const h = URL.createObjectURL(a);
|
|
2330
|
+
this._imageObjectURLs.set(t, h), w.utils.createImageLoader().load(h, n, void 0, n);
|
|
2331
|
+
}).catch(() => {
|
|
2332
|
+
this._disposed || (this._imageObjectURLs.set(t, "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7"), n());
|
|
2333
|
+
}).finally(() => this._imageRequests.delete(o)), null;
|
|
2334
|
+
}
|
|
2335
|
+
}
|
|
2336
|
+
class nr {
|
|
2127
2337
|
/** 标绘 id → 实例;与桥接器的 shapes 共用同一引用 */
|
|
2128
2338
|
_items = /* @__PURE__ */ new Map();
|
|
2129
2339
|
/** 标绘管理器 id(对外常量,保持与参考项目一致) */
|
|
@@ -2139,7 +2349,7 @@ class zt {
|
|
|
2139
2349
|
/** 由 TerrainTilesRenderer 提供的场景包围盒计算器。 */
|
|
2140
2350
|
_boundingBoxResolver;
|
|
2141
2351
|
constructor(e) {
|
|
2142
|
-
this.ssp = e.ssp, this._boundingBoxResolver = e.boundingBoxResolver, this._bridge = new
|
|
2352
|
+
this.ssp = e.ssp, this._boundingBoxResolver = e.boundingBoxResolver, this._bridge = new sr({
|
|
2143
2353
|
scene: e.ssp.viewport.scene,
|
|
2144
2354
|
requestRender: () => this.ssp.render()
|
|
2145
2355
|
});
|
|
@@ -2175,42 +2385,42 @@ class zt {
|
|
|
2175
2385
|
switch (e.type) {
|
|
2176
2386
|
case "point": {
|
|
2177
2387
|
const { type: r, ...i } = e;
|
|
2178
|
-
t = new
|
|
2388
|
+
t = new Mt(i);
|
|
2179
2389
|
break;
|
|
2180
2390
|
}
|
|
2181
2391
|
case "line": {
|
|
2182
2392
|
const { type: r, ...i } = e;
|
|
2183
|
-
t = new
|
|
2393
|
+
t = new Ot(i);
|
|
2184
2394
|
break;
|
|
2185
2395
|
}
|
|
2186
2396
|
case "polygon": {
|
|
2187
2397
|
const { type: r, ...i } = e;
|
|
2188
|
-
t = new
|
|
2398
|
+
t = new St(i);
|
|
2189
2399
|
break;
|
|
2190
2400
|
}
|
|
2191
2401
|
case "rectangle": {
|
|
2192
2402
|
const { type: r, ...i } = e;
|
|
2193
|
-
t = new
|
|
2403
|
+
t = new bt(i);
|
|
2194
2404
|
break;
|
|
2195
2405
|
}
|
|
2196
2406
|
case "circle": {
|
|
2197
2407
|
const { type: r, ...i } = e;
|
|
2198
|
-
t = new
|
|
2408
|
+
t = new Pt(i);
|
|
2199
2409
|
break;
|
|
2200
2410
|
}
|
|
2201
2411
|
case "sector": {
|
|
2202
2412
|
const { type: r, ...i } = e;
|
|
2203
|
-
t = new
|
|
2413
|
+
t = new xt(i);
|
|
2204
2414
|
break;
|
|
2205
2415
|
}
|
|
2206
2416
|
case "text": {
|
|
2207
2417
|
const { type: r, ...i } = e;
|
|
2208
|
-
t = new
|
|
2418
|
+
t = new kt(i);
|
|
2209
2419
|
break;
|
|
2210
2420
|
}
|
|
2211
2421
|
case "arrow": {
|
|
2212
2422
|
const { type: r, ...i } = e;
|
|
2213
|
-
t = new
|
|
2423
|
+
t = new Ct(i);
|
|
2214
2424
|
break;
|
|
2215
2425
|
}
|
|
2216
2426
|
default:
|
|
@@ -2344,9 +2554,9 @@ class zt {
|
|
|
2344
2554
|
if (!i || !i.options.points || i.options.points.length === 0)
|
|
2345
2555
|
return -1;
|
|
2346
2556
|
let n = 0, o = 1 / 0;
|
|
2347
|
-
for (let
|
|
2348
|
-
const h = i.options.points[
|
|
2349
|
-
d < o && (o = d, n =
|
|
2557
|
+
for (let a = 0; a < i.options.points.length; a++) {
|
|
2558
|
+
const h = i.options.points[a][0] - t, c = i.options.points[a][1] - r, d = h * h + c * c;
|
|
2559
|
+
d < o && (o = d, n = a);
|
|
2350
2560
|
}
|
|
2351
2561
|
return n;
|
|
2352
2562
|
}
|
|
@@ -2381,90 +2591,90 @@ class zt {
|
|
|
2381
2591
|
}));
|
|
2382
2592
|
}
|
|
2383
2593
|
}
|
|
2384
|
-
const
|
|
2385
|
-
function
|
|
2386
|
-
const { group: t, ellipsoid: r } = s.tiles, i =
|
|
2594
|
+
const Le = 5e4, or = 10, ar = 10, lr = 10, cr = 12, hr = "文本内容";
|
|
2595
|
+
function dr(s, e) {
|
|
2596
|
+
const { group: t, ellipsoid: r } = s.tiles, i = v.degToRad(e[1]), n = v.degToRad(e[0]), o = new l();
|
|
2387
2597
|
r.getCartographicToPosition(
|
|
2388
2598
|
i,
|
|
2389
2599
|
n,
|
|
2390
|
-
|
|
2600
|
+
Le,
|
|
2391
2601
|
o
|
|
2392
2602
|
);
|
|
2393
|
-
const
|
|
2394
|
-
r.getCartographicToNormal(i, n,
|
|
2395
|
-
const h = o.applyMatrix4(t.matrixWorld), c =
|
|
2396
|
-
return new
|
|
2603
|
+
const a = new l();
|
|
2604
|
+
r.getCartographicToNormal(i, n, a);
|
|
2605
|
+
const h = o.applyMatrix4(t.matrixWorld), c = a.transformDirection(t.matrixWorld).negate().normalize();
|
|
2606
|
+
return new at(
|
|
2397
2607
|
h,
|
|
2398
2608
|
c,
|
|
2399
2609
|
0,
|
|
2400
|
-
|
|
2610
|
+
Le * 2
|
|
2401
2611
|
).intersectObject(t, !0)[0]?.point.clone() ?? null;
|
|
2402
2612
|
}
|
|
2403
|
-
function
|
|
2613
|
+
function Ye(s, e) {
|
|
2404
2614
|
const t = [];
|
|
2405
2615
|
s.tiles.group.updateMatrixWorld(!0);
|
|
2406
2616
|
for (const r of e) {
|
|
2407
|
-
const i =
|
|
2617
|
+
const i = dr(s, r);
|
|
2408
2618
|
i && t.push(i);
|
|
2409
2619
|
}
|
|
2410
2620
|
return t;
|
|
2411
2621
|
}
|
|
2412
|
-
function
|
|
2622
|
+
function Qe(s, e, t) {
|
|
2413
2623
|
if (t.length === 0) return null;
|
|
2414
|
-
const r = new
|
|
2624
|
+
const r = new de();
|
|
2415
2625
|
if (t.forEach((i) => r.expandByPoint(i)), (s === "circle" || s === "sector") && typeof e.radius == "number" && r.expandByScalar(e.radius), s === "text") {
|
|
2416
|
-
const i = e.fontSize ??
|
|
2417
|
-
(e.content ??
|
|
2626
|
+
const i = e.fontSize ?? cr, n = Math.max(
|
|
2627
|
+
(e.content ?? hr).length,
|
|
2418
2628
|
1
|
|
2419
2629
|
), o = e.scale ?? 1;
|
|
2420
2630
|
r.expandByScalar(i * n * o / 2);
|
|
2421
2631
|
}
|
|
2422
2632
|
if (s === "point") {
|
|
2423
2633
|
const i = e.pointStyle === "image" ? Math.max(
|
|
2424
|
-
e.imageWidth ??
|
|
2425
|
-
e.imageHeight ??
|
|
2426
|
-
) : e.size ??
|
|
2634
|
+
e.imageWidth ?? ar,
|
|
2635
|
+
e.imageHeight ?? lr
|
|
2636
|
+
) : e.size ?? or;
|
|
2427
2637
|
r.expandByScalar(i / 2);
|
|
2428
2638
|
}
|
|
2429
2639
|
return r.isEmpty() ? null : r;
|
|
2430
2640
|
}
|
|
2431
|
-
function
|
|
2432
|
-
const t = e.options, r = e.category === "arrow" ? e.generateCoords() : t.points, i =
|
|
2641
|
+
function ur(s, e) {
|
|
2642
|
+
const t = e.options, r = e.category === "arrow" ? e.generateCoords() : t.points, i = Ye(
|
|
2433
2643
|
s,
|
|
2434
2644
|
Array.isArray(r) ? r : []
|
|
2435
2645
|
);
|
|
2436
|
-
return
|
|
2646
|
+
return Qe(e.category, t, i);
|
|
2437
2647
|
}
|
|
2438
|
-
function
|
|
2648
|
+
function gr(s, e, t = 200) {
|
|
2439
2649
|
const r = s.groundDecalManager?.getItem(e);
|
|
2440
2650
|
if (!r) return !1;
|
|
2441
|
-
const i = r.options, n = r.type === "arrow" && "generatedCoords" in r && r.generatedCoords.length > 0 ? r.generatedCoords : i.points, o =
|
|
2651
|
+
const i = r.options, n = r.type === "arrow" && "generatedCoords" in r && r.generatedCoords.length > 0 ? r.generatedCoords : i.points, o = Ye(
|
|
2442
2652
|
s,
|
|
2443
2653
|
Array.isArray(n) ? n : []
|
|
2444
|
-
),
|
|
2445
|
-
return
|
|
2446
|
-
s.ssp.flyToObj(
|
|
2654
|
+
), a = Qe(r.type, i, o);
|
|
2655
|
+
return a ? (globalThis.setTimeout(() => {
|
|
2656
|
+
s.ssp.flyToObj(a, "frontTop");
|
|
2447
2657
|
}, Math.max(0, t)), !0) : !1;
|
|
2448
2658
|
}
|
|
2449
|
-
const
|
|
2450
|
-
class
|
|
2659
|
+
const pr = "https://sooncps.xwbuilders.com/api/ugis-dataprocess/v1/terrain/NhBLlMx3/", fr = "https://c.tile.openstreetmap.fr/hot/{z}/{x}/{y}.png";
|
|
2660
|
+
class Ur {
|
|
2451
2661
|
constructor(e, t = {}) {
|
|
2452
2662
|
this.ssp = e, this.options = t;
|
|
2453
|
-
const r = t.baseUrl ||
|
|
2454
|
-
if (this.resourceManager = new
|
|
2455
|
-
const i = t.imageryUrl ||
|
|
2663
|
+
const r = t.baseUrl || pr;
|
|
2664
|
+
if (this.resourceManager = new vt(), this.terrainManager = new _t(), t.imageryUrl !== !1) {
|
|
2665
|
+
const i = t.imageryUrl || fr;
|
|
2456
2666
|
this.resourceManager.addOverlay({
|
|
2457
2667
|
id: this.defaultImageryId,
|
|
2458
2668
|
type: u.XYZ,
|
|
2459
2669
|
options: { id: this.defaultImageryId, url: i, type: u.XYZ }
|
|
2460
2670
|
});
|
|
2461
2671
|
}
|
|
2462
|
-
this.groundDecalManager = new
|
|
2672
|
+
this.groundDecalManager = new nr({
|
|
2463
2673
|
ssp: this.ssp,
|
|
2464
|
-
boundingBoxResolver: (i) =>
|
|
2465
|
-
}),
|
|
2674
|
+
boundingBoxResolver: (i) => ur(this, i)
|
|
2675
|
+
}), ct(), this._alphaClipMode = t.alphaClipMode ?? "alphaTest", this._currentTerrainConfig = {
|
|
2466
2676
|
id: this.defaultTerrainId,
|
|
2467
|
-
type:
|
|
2677
|
+
type: L.QUANTIZED_MESH,
|
|
2468
2678
|
url: r
|
|
2469
2679
|
}, this.terrainManager.add(this._currentTerrainConfig), this.terrainManager.setCurrentId(this._currentTerrainConfig.id), this.tiles = this._initTilesRenderer(this._currentTerrainConfig), this._initPlugins(this.tiles, this._currentTerrainConfig);
|
|
2470
2680
|
}
|
|
@@ -2483,9 +2693,9 @@ class vr {
|
|
|
2483
2693
|
* 供 cesium-to-three 标绘图元的 RTE 着色器使用。标绘几何烘焙在绝对 ECEF,只有用
|
|
2484
2694
|
* ECEF 相机投影才能与「重定向后地形」对齐,同时保持 reorientation 开启(地形不抖)。
|
|
2485
2695
|
*/
|
|
2486
|
-
_plotVirtualCamera = new
|
|
2487
|
-
_reorientInverse = new
|
|
2488
|
-
_virtualScale = new
|
|
2696
|
+
_plotVirtualCamera = new we();
|
|
2697
|
+
_reorientInverse = new f();
|
|
2698
|
+
_virtualScale = new l();
|
|
2489
2699
|
/** 资源管理器(存储配置) */
|
|
2490
2700
|
resourceManager;
|
|
2491
2701
|
/** 地形管理器(记录地形列表) */
|
|
@@ -2506,7 +2716,7 @@ class vr {
|
|
|
2506
2716
|
* 是否使用 Cesium Ion 地形
|
|
2507
2717
|
*/
|
|
2508
2718
|
get isCesiumIon() {
|
|
2509
|
-
return this._currentTerrainConfig.type ===
|
|
2719
|
+
return this._currentTerrainConfig.type === L.CESIUM_ION;
|
|
2510
2720
|
}
|
|
2511
2721
|
/**
|
|
2512
2722
|
* 获取当前地形配置
|
|
@@ -2552,45 +2762,38 @@ class vr {
|
|
|
2552
2762
|
this._alphaClipMode = e, this.customMaterialPlugin && (this.customMaterialPlugin.alphaClipMode = e), this._updateAlphaClipMode(), this.render();
|
|
2553
2763
|
}
|
|
2554
2764
|
_initTilesRenderer(e) {
|
|
2555
|
-
return e.type ===
|
|
2765
|
+
return W(e.type === L.CESIUM_ION ? new D() : (
|
|
2556
2766
|
// Cesium Ion 由插件设置 URL
|
|
2557
|
-
new
|
|
2558
|
-
);
|
|
2767
|
+
new D(e.url)
|
|
2768
|
+
));
|
|
2559
2769
|
}
|
|
2560
2770
|
/**
|
|
2561
2771
|
* 创建 TilesRenderer(统一方法,支持自定义地形和 Cesium Ion 地形)
|
|
2562
2772
|
* @param config 地形配置
|
|
2563
2773
|
*/
|
|
2564
2774
|
_initPlugins(e, t) {
|
|
2565
|
-
if (this.tilesFadePlugin = new
|
|
2566
|
-
new
|
|
2775
|
+
if (this.tilesFadePlugin = new le({ maximumFadeOutTiles: 200 }), this.updateOnChangePlugin = new ce(), e.registerPlugin(this.tilesFadePlugin), e.registerPlugin(this.updateOnChangePlugin), t.type === L.CESIUM_ION ? e.registerPlugin(
|
|
2776
|
+
new De({
|
|
2567
2777
|
apiToken: t.apiToken,
|
|
2568
2778
|
assetId: t.assetId || "1",
|
|
2569
2779
|
autoRefreshToken: t.autoRefreshToken ?? !0,
|
|
2570
2780
|
assetTypeHandler: (r, i) => {
|
|
2571
2781
|
r === "TERRAIN" && i.getPluginByName("QUANTIZED_MESH_PLUGIN") === null && i.registerPlugin(
|
|
2572
|
-
new
|
|
2782
|
+
new K({ useRecommendedSettings: !0 })
|
|
2573
2783
|
);
|
|
2574
2784
|
}
|
|
2575
2785
|
})
|
|
2576
2786
|
) : (e.registerPlugin(
|
|
2577
|
-
new
|
|
2578
|
-
), e.fetchData =
|
|
2579
|
-
const i = { method: "GET", mode: "cors" };
|
|
2580
|
-
if (/layer\.json$/.test(r)) {
|
|
2581
|
-
const n = await fetch(r, i).then((o) => o.json());
|
|
2582
|
-
return n.metadataAvailability = -1, new Response(JSON.stringify(n));
|
|
2583
|
-
}
|
|
2584
|
-
return fetch(r, i);
|
|
2585
|
-
}), this.options.useCustomMaterial !== !1 && (this.customMaterialPlugin = new et(), this.customMaterialPlugin.alphaClipMode = this._alphaClipMode, e.registerPlugin(this.customMaterialPlugin)), this.imageOverlayPlugin = new Te({
|
|
2787
|
+
new K({ useRecommendedSettings: !0 })
|
|
2788
|
+
), e.fetchData = $e), this.options.useCustomMaterial !== !1 && (this.customMaterialPlugin = new wt(), this.customMaterialPlugin.alphaClipMode = this._alphaClipMode, e.registerPlugin(this.customMaterialPlugin)), this.imageOverlayPlugin = new Ne({
|
|
2586
2789
|
renderer: this.ssp.viewport.renderer,
|
|
2587
2790
|
overlays: []
|
|
2588
|
-
}), e.registerPlugin(this.imageOverlayPlugin), this._ensureGlobeDepth(), this.overlayManager = new
|
|
2791
|
+
}), e.registerPlugin(this.imageOverlayPlugin), this._ensureGlobeDepth(), this.overlayManager = new j(
|
|
2589
2792
|
this.imageOverlayPlugin,
|
|
2590
2793
|
this.resourceManager
|
|
2591
2794
|
), this.overlayManager.restoreFromResourceManager(), this.options.reorientation !== !1) {
|
|
2592
2795
|
const r = this.options.reorientation || { lon: 120, lat: 30 };
|
|
2593
|
-
this.reorientationPlugin = new
|
|
2796
|
+
this.reorientationPlugin = new he({
|
|
2594
2797
|
lon: r.lon,
|
|
2595
2798
|
lat: r.lat,
|
|
2596
2799
|
height: r.height ?? 0.1
|
|
@@ -2646,7 +2849,7 @@ class vr {
|
|
|
2646
2849
|
setTerrain(e, t = void 0) {
|
|
2647
2850
|
if (this.groundDecalManager?.invalidateBoundingBoxes(), t && (this.options = { ...this.options, ...t }), this.terrainManager.has(e.id) || this.terrainManager.add(e), this.terrainManager.setCurrentId(e.id), this.terrainManager.currentId === e.id) {
|
|
2648
2851
|
const r = this.terrainManager.getCurrent();
|
|
2649
|
-
e.type ===
|
|
2852
|
+
e.type === L.QUANTIZED_MESH && r?.type === L.QUANTIZED_MESH && (r.url = e.url);
|
|
2650
2853
|
}
|
|
2651
2854
|
this._disposeTilesRenderer(), this._currentTerrainConfig = e, this.tiles = this._initTilesRenderer(e), this._initPlugins(this.tiles, e), this._enabled && this.ssp.addObject(this.tiles.group), this.render();
|
|
2652
2855
|
}
|
|
@@ -2659,7 +2862,7 @@ class vr {
|
|
|
2659
2862
|
* @returns true 表示已安排飞向;false 表示标绘或当前地形坐标不可用。
|
|
2660
2863
|
*/
|
|
2661
2864
|
flyToPlotById(e, t = 200) {
|
|
2662
|
-
return
|
|
2865
|
+
return gr(this, e, t);
|
|
2663
2866
|
}
|
|
2664
2867
|
// =============== Overlay 快捷方法 ===============
|
|
2665
2868
|
/**
|
|
@@ -2827,15 +3030,15 @@ class vr {
|
|
|
2827
3030
|
};
|
|
2828
3031
|
beforeRenderHandler = () => {
|
|
2829
3032
|
const { camera: e, renderer: t, scene: r } = this.ssp.viewport;
|
|
2830
|
-
if (e.updateMatrixWorld(), this.tiles.setCamera(e), this.tiles.setResolutionFromRenderer(e, t), this.tiles.update(), this.groundDecalManager && e instanceof
|
|
3033
|
+
if (e.updateMatrixWorld(), this.tiles.setCamera(e), this.tiles.setResolutionFromRenderer(e, t), this.tiles.update(), this.groundDecalManager && e instanceof we) {
|
|
2831
3034
|
const i = this._ensureGlobeDepth(), n = t.domElement.width, o = t.domElement.height;
|
|
2832
|
-
(i.target.width !== n || i.target.height !== o) && i.resize(n, o),
|
|
2833
|
-
const
|
|
3035
|
+
(i.target.width !== n || i.target.height !== o) && i.resize(n, o), ht(e.near, e.far), i.render(t, e, r, this.tiles.group);
|
|
3036
|
+
const a = this._buildPlotVirtualCamera(e);
|
|
2834
3037
|
this.groundDecalManager.update({
|
|
2835
3038
|
depthTexture: i.target.texture,
|
|
2836
3039
|
width: n,
|
|
2837
3040
|
height: o,
|
|
2838
|
-
camera:
|
|
3041
|
+
camera: a,
|
|
2839
3042
|
pixelRatio: t.getPixelRatio()
|
|
2840
3043
|
});
|
|
2841
3044
|
}
|
|
@@ -2866,7 +3069,7 @@ class vr {
|
|
|
2866
3069
|
_ensureGlobeDepth() {
|
|
2867
3070
|
if (!this._globeDepth) {
|
|
2868
3071
|
const { renderer: e } = this.ssp.viewport;
|
|
2869
|
-
this._globeDepth = new
|
|
3072
|
+
this._globeDepth = new dt(
|
|
2870
3073
|
e.domElement.width,
|
|
2871
3074
|
e.domElement.height
|
|
2872
3075
|
);
|
|
@@ -2874,7 +3077,7 @@ class vr {
|
|
|
2874
3077
|
return this._globeDepth;
|
|
2875
3078
|
}
|
|
2876
3079
|
enable() {
|
|
2877
|
-
this._enabled = !0, this.ssp.viewport.camera.layers.enable(
|
|
3080
|
+
this._enabled = !0, this.ssp.viewport.camera.layers.enable(ut), this.ssp.addObject(this.tiles.group), this.ssp.signals.beforeRender.add(this.beforeRenderHandler);
|
|
2878
3081
|
}
|
|
2879
3082
|
disable() {
|
|
2880
3083
|
this._enabled = !1, this.ssp.removeObject(this.tiles.group), this.ssp.signals.beforeRender.remove(this.beforeRenderHandler);
|
|
@@ -2892,8 +3095,8 @@ class vr {
|
|
|
2892
3095
|
height: r
|
|
2893
3096
|
};
|
|
2894
3097
|
const n = () => {
|
|
2895
|
-
const
|
|
2896
|
-
i.transformLatLonHeightToOrigin(
|
|
3098
|
+
const a = v.degToRad(t), h = v.degToRad(e);
|
|
3099
|
+
i.transformLatLonHeightToOrigin(a, h, r), this.render(), o();
|
|
2897
3100
|
}, o = () => {
|
|
2898
3101
|
this.tiles.removeEventListener("load-root-tileset", n), this.loedTilesSets.delete(n);
|
|
2899
3102
|
};
|
|
@@ -2905,12 +3108,12 @@ class vr {
|
|
|
2905
3108
|
), this.loedTilesSets.clear(), this.tiles.removeEventListener("needs-render", this.render), this.tiles.removeEventListener("needs-update", this.render), this.tiles.dispose();
|
|
2906
3109
|
}
|
|
2907
3110
|
}
|
|
2908
|
-
const
|
|
3111
|
+
const F = {
|
|
2909
3112
|
DEFAULT: 0,
|
|
2910
3113
|
GRADIENT: 1,
|
|
2911
3114
|
TOPOGRAPHIC_LINES: 2,
|
|
2912
3115
|
LIGHTING: 3
|
|
2913
|
-
},
|
|
3116
|
+
}, mr = {
|
|
2914
3117
|
vertexShader: (
|
|
2915
3118
|
/* glsl */
|
|
2916
3119
|
`
|
|
@@ -2936,7 +3139,7 @@ const P = {
|
|
|
2936
3139
|
}
|
|
2937
3140
|
`
|
|
2938
3141
|
)
|
|
2939
|
-
},
|
|
3142
|
+
}, yr = {
|
|
2940
3143
|
vertexShader: (
|
|
2941
3144
|
/* glsl */
|
|
2942
3145
|
`
|
|
@@ -2982,10 +3185,10 @@ const P = {
|
|
|
2982
3185
|
`
|
|
2983
3186
|
)
|
|
2984
3187
|
};
|
|
2985
|
-
let
|
|
2986
|
-
class
|
|
3188
|
+
let V = null, X = null, q = null;
|
|
3189
|
+
class wr {
|
|
2987
3190
|
constructor(e, t) {
|
|
2988
|
-
this.ssp = e, this.options = t, "url" in this.options ? this.tiles = new
|
|
3191
|
+
this.ssp = e, this.options = t, "url" in this.options ? this.tiles = W(new D(this.options.url)) : (this.tiles = W(new D()), this._initCesiumIon(this.options)), this._initBasePlugins(this.options);
|
|
2989
3192
|
}
|
|
2990
3193
|
tiles;
|
|
2991
3194
|
tilesFadePlugin;
|
|
@@ -2993,12 +3196,12 @@ class tr {
|
|
|
2993
3196
|
reorientationPlugin;
|
|
2994
3197
|
options;
|
|
2995
3198
|
// 用于模型居中
|
|
2996
|
-
_box = new
|
|
2997
|
-
_sphere = new
|
|
2998
|
-
_worldToEllipsoidMatrix = new
|
|
2999
|
-
_ellipsoidPosition = new
|
|
3199
|
+
_box = new de();
|
|
3200
|
+
_sphere = new $();
|
|
3201
|
+
_worldToEllipsoidMatrix = new f();
|
|
3202
|
+
_ellipsoidPosition = new l();
|
|
3000
3203
|
// 当前材质类型
|
|
3001
|
-
_materialType =
|
|
3204
|
+
_materialType = F.DEFAULT;
|
|
3002
3205
|
// 按需渲染标志
|
|
3003
3206
|
_needsUpdate = !0;
|
|
3004
3207
|
_cameraTransitionStart = !1;
|
|
@@ -3008,7 +3211,7 @@ class tr {
|
|
|
3008
3211
|
*/
|
|
3009
3212
|
_initCesiumIon(e) {
|
|
3010
3213
|
this.tiles.registerPlugin(
|
|
3011
|
-
new
|
|
3214
|
+
new De({
|
|
3012
3215
|
apiToken: e.apiToken,
|
|
3013
3216
|
assetId: e.assetId,
|
|
3014
3217
|
autoRefreshToken: e.autoRefreshToken ?? !0
|
|
@@ -3019,9 +3222,9 @@ class tr {
|
|
|
3019
3222
|
* 初始化基础插件
|
|
3020
3223
|
*/
|
|
3021
3224
|
_initBasePlugins(e) {
|
|
3022
|
-
if (e._managedByPlugin || (
|
|
3225
|
+
if (e._managedByPlugin || (V === null ? V = this.tiles.lruCache : this.tiles.lruCache = V, X === null ? X = this.tiles.parseQueue : this.tiles.parseQueue = X, q === null ? q = this.tiles.downloadQueue : this.tiles.downloadQueue = q, this.tiles.lruCache.maxSize = 600, this.tiles.lruCache.minSize = 300, this.tiles.lruCache.unloadPercent = 0.8), this._setupGLTFLoader(), this.tilesFadePlugin = new le({ maximumFadeOutTiles: 200 }), this.updateOnChangePlugin = new ce(), this.tiles.registerPlugin(this.tilesFadePlugin), this.tiles.registerPlugin(this.updateOnChangePlugin), this.tiles.maxDepth = e.maxDepth ?? 20, this.tiles.errorTarget = e.errorTarget ?? 2, this.options.reorientation) {
|
|
3023
3226
|
const t = this.options.reorientation || { lon: 120, lat: 30 };
|
|
3024
|
-
this.reorientationPlugin = new
|
|
3227
|
+
this.reorientationPlugin = new he({
|
|
3025
3228
|
lon: t.lon,
|
|
3026
3229
|
lat: t.lat,
|
|
3027
3230
|
height: t.height ?? 0.1
|
|
@@ -3037,7 +3240,7 @@ class tr {
|
|
|
3037
3240
|
* 设置 GLTF Loader
|
|
3038
3241
|
*/
|
|
3039
3242
|
_setupGLTFLoader() {
|
|
3040
|
-
const e = new
|
|
3243
|
+
const e = w.utils.configureGLTFLoader(new ae(this.tiles.manager)), t = this.ssp.manager?.store?.modelManager;
|
|
3041
3244
|
if (t?.gltfLoader) {
|
|
3042
3245
|
const { dracoLoader: r, ktx2Loader: i, meshoptDecoder: n } = t.gltfLoader;
|
|
3043
3246
|
r && e.setDRACOLoader(r), i && e.setKTX2Loader(i), n && e.setMeshoptDecoder(n);
|
|
@@ -3081,7 +3284,7 @@ class tr {
|
|
|
3081
3284
|
onLoadModel = ({ scene: e }) => {
|
|
3082
3285
|
e.traverse((t) => {
|
|
3083
3286
|
t.isMesh && (t.originalMaterial = t.material);
|
|
3084
|
-
}), this._materialType !==
|
|
3287
|
+
}), this._materialType !== F.DEFAULT && this.updateMaterial(e);
|
|
3085
3288
|
};
|
|
3086
3289
|
/**
|
|
3087
3290
|
* 更新场景中所有网格的材质(参考 customMaterial.js)
|
|
@@ -3091,19 +3294,19 @@ class tr {
|
|
|
3091
3294
|
e.traverse((r) => {
|
|
3092
3295
|
if (r.isMesh)
|
|
3093
3296
|
switch (r.material && r.material !== r.originalMaterial && r.material.dispose(), t) {
|
|
3094
|
-
case
|
|
3297
|
+
case F.DEFAULT:
|
|
3095
3298
|
r.material = r.originalMaterial, r.material && (r.material.side = 2), r.receiveShadow = !1, r.castShadow = !1;
|
|
3096
3299
|
break;
|
|
3097
|
-
case
|
|
3098
|
-
r.material = new
|
|
3300
|
+
case F.GRADIENT:
|
|
3301
|
+
r.material = new ve(mr), r.material.side = 2, r.receiveShadow = !1, r.castShadow = !1;
|
|
3099
3302
|
break;
|
|
3100
|
-
case
|
|
3101
|
-
const i = new
|
|
3303
|
+
case F.TOPOGRAPHIC_LINES: {
|
|
3304
|
+
const i = new ve(yr);
|
|
3102
3305
|
i.extensions = { derivatives: !0 }, i.side = 2, r.material = i, r.receiveShadow = !1, r.castShadow = !1;
|
|
3103
3306
|
break;
|
|
3104
3307
|
}
|
|
3105
|
-
case
|
|
3106
|
-
r.material = new
|
|
3308
|
+
case F.LIGHTING:
|
|
3309
|
+
r.material = new lt(), r.material.side = 2, r.receiveShadow = !0, r.castShadow = !0;
|
|
3107
3310
|
break;
|
|
3108
3311
|
}
|
|
3109
3312
|
});
|
|
@@ -3150,8 +3353,8 @@ class tr {
|
|
|
3150
3353
|
height: r
|
|
3151
3354
|
};
|
|
3152
3355
|
const n = () => {
|
|
3153
|
-
const
|
|
3154
|
-
i.transformLatLonHeightToOrigin(
|
|
3356
|
+
const a = v.degToRad(t), h = v.degToRad(e);
|
|
3357
|
+
i.transformLatLonHeightToOrigin(a, h, r), this.render(), o();
|
|
3155
3358
|
}, o = () => {
|
|
3156
3359
|
this.tiles.removeEventListener("load-root-tileset", n), this.loedTilesSets.delete(n);
|
|
3157
3360
|
};
|
|
@@ -3170,8 +3373,8 @@ class tr {
|
|
|
3170
3373
|
* @param height 椭球高,单位:米
|
|
3171
3374
|
* @param target 用于接收结果的向量;传入后会被原地修改并返回
|
|
3172
3375
|
*/
|
|
3173
|
-
lonLatHeightToPosition(e, t, r = 0, i = new
|
|
3174
|
-
const n =
|
|
3376
|
+
lonLatHeightToPosition(e, t, r = 0, i = new l()) {
|
|
3377
|
+
const n = v.degToRad(t), o = v.degToRad(e);
|
|
3175
3378
|
return this.tiles.ellipsoid.getCartographicToPosition(
|
|
3176
3379
|
n,
|
|
3177
3380
|
o,
|
|
@@ -3189,11 +3392,11 @@ class tr {
|
|
|
3189
3392
|
return this.tiles.group.updateWorldMatrix(!0, !1), this._worldToEllipsoidMatrix.copy(this.tiles.group.matrixWorld).invert(), this._ellipsoidPosition.copy(e).applyMatrix4(this._worldToEllipsoidMatrix), this.tiles.ellipsoid.getPositionToCartographic(
|
|
3190
3393
|
this._ellipsoidPosition,
|
|
3191
3394
|
t
|
|
3192
|
-
), t.lon =
|
|
3395
|
+
), t.lon = v.radToDeg(t.lon), t.lat = v.radToDeg(t.lat), t;
|
|
3193
3396
|
}
|
|
3194
3397
|
}
|
|
3195
|
-
const
|
|
3196
|
-
class
|
|
3398
|
+
const Z = 2;
|
|
3399
|
+
class Gr {
|
|
3197
3400
|
constructor(e) {
|
|
3198
3401
|
this.ssp = e;
|
|
3199
3402
|
const { controls: t, viewport: r } = e;
|
|
@@ -3214,12 +3417,12 @@ class wr {
|
|
|
3214
3417
|
_downloadQueue = null;
|
|
3215
3418
|
_referenceOrigin = null;
|
|
3216
3419
|
_referencePlacements = /* @__PURE__ */ new WeakMap();
|
|
3217
|
-
_referenceFrame = new
|
|
3218
|
-
_targetFrame = new
|
|
3219
|
-
_sourceFrame = new
|
|
3220
|
-
_placementMatrix = new
|
|
3221
|
-
_upCorrectionMatrix = new
|
|
3222
|
-
_boundingSphere = new
|
|
3420
|
+
_referenceFrame = new f();
|
|
3421
|
+
_targetFrame = new f();
|
|
3422
|
+
_sourceFrame = new f();
|
|
3423
|
+
_placementMatrix = new f();
|
|
3424
|
+
_upCorrectionMatrix = new f();
|
|
3425
|
+
_boundingSphere = new $();
|
|
3223
3426
|
_beforeRenderHandler = () => {
|
|
3224
3427
|
this.needsUpdate && (this.needsUpdate = !1, this.ssp.viewport.camera.updateMatrixWorld(), this.tilesMap.forEach((e) => {
|
|
3225
3428
|
e.tiles.setCamera(this.ssp.viewport.camera), e.tiles.setResolutionFromRenderer(this.ssp.viewport.camera, this.ssp.viewport.renderer), e.applyAutoCenter(), e.tiles.group.updateMatrixWorld(), e.tiles.update();
|
|
@@ -3259,19 +3462,19 @@ class wr {
|
|
|
3259
3462
|
async loadTiles(e) {
|
|
3260
3463
|
const t = "url" in e ? e.url : e.assetId;
|
|
3261
3464
|
if (this.tilesMap.has(t))
|
|
3262
|
-
return
|
|
3263
|
-
const { ssp: r } = this, i = this._getReferencePlacement(e), n = this._getTilesRendererOptions(e, i), o = new
|
|
3465
|
+
return w.utils.warn(`${t} already loaded`), this.tilesMap.get(t);
|
|
3466
|
+
const { ssp: r } = this, i = this._getReferencePlacement(e), n = this._getTilesRendererOptions(e, i), o = new wr(r, {
|
|
3264
3467
|
...n,
|
|
3265
3468
|
_managedByPlugin: !0
|
|
3266
3469
|
});
|
|
3267
3470
|
i && (this._referencePlacements.set(o, i), o.options.reorientation = i);
|
|
3268
|
-
const { tiles:
|
|
3269
|
-
this._lruCache === null ? this._lruCache =
|
|
3471
|
+
const { tiles: a } = o;
|
|
3472
|
+
this._lruCache === null ? this._lruCache = a.lruCache : a.lruCache = this._lruCache, this._parseQueue === null ? this._parseQueue = a.parseQueue : a.parseQueue = this._parseQueue, this._downloadQueue === null ? this._downloadQueue = a.downloadQueue : a.downloadQueue = this._downloadQueue, a.lruCache.maxSize = 600, a.lruCache.minSize = 300, a.lruCache.unloadPercent = 0.8, this.tilesMap.set(t, o), a.setCamera(this._tilesCamera), a.setResolutionFromRenderer(this._tilesCamera, r.viewport.renderer), r.addObject(a.group), this._referenceOrigin && this.applyReferencePlacement(o, i);
|
|
3270
3473
|
const h = () => {
|
|
3271
3474
|
this.cameraTransitionStart || (this.needsUpdate = !0, r.render());
|
|
3272
3475
|
};
|
|
3273
|
-
return
|
|
3274
|
-
|
|
3476
|
+
return a.addEventListener("load-model", h), new Promise((c) => {
|
|
3477
|
+
a.addEventListener("load-tile-set", () => {
|
|
3275
3478
|
const d = this._referencePlacements.get(o);
|
|
3276
3479
|
this._referenceOrigin && this.applyReferencePlacement(o, d ?? null), h(), c(o);
|
|
3277
3480
|
});
|
|
@@ -3308,9 +3511,9 @@ class wr {
|
|
|
3308
3511
|
}
|
|
3309
3512
|
invalidate(e, t, r, i) {
|
|
3310
3513
|
(i ? [i] : Array.from(this.tilesMap.values())).forEach((o) => {
|
|
3311
|
-
const
|
|
3514
|
+
const a = this._referencePlacements.get(o) ?? null;
|
|
3312
3515
|
this._referenceOrigin ? this.applyReferencePlacement(o, {
|
|
3313
|
-
...
|
|
3516
|
+
...a ?? {},
|
|
3314
3517
|
lon: e,
|
|
3315
3518
|
lat: t,
|
|
3316
3519
|
height: r
|
|
@@ -3319,27 +3522,27 @@ class wr {
|
|
|
3319
3522
|
}
|
|
3320
3523
|
applyReferencePlacement(e, t) {
|
|
3321
3524
|
if (!this._referenceOrigin)
|
|
3322
|
-
return
|
|
3525
|
+
return w.utils.warn("TilesRendererManager: reference origin is not set."), !1;
|
|
3323
3526
|
const { ellipsoid: r, group: i } = e.tiles, n = this._referenceOrigin, o = this._isGeoreferenced(e);
|
|
3324
3527
|
if (r.getObjectFrame(
|
|
3325
|
-
|
|
3326
|
-
|
|
3528
|
+
v.degToRad(n.lat),
|
|
3529
|
+
v.degToRad(n.lon),
|
|
3327
3530
|
n.height ?? 0.1,
|
|
3328
3531
|
0,
|
|
3329
3532
|
0,
|
|
3330
3533
|
0,
|
|
3331
3534
|
this._referenceFrame,
|
|
3332
|
-
|
|
3535
|
+
Z
|
|
3333
3536
|
), this._placementMatrix.copy(this._referenceFrame).invert(), t)
|
|
3334
3537
|
r.getObjectFrame(
|
|
3335
|
-
|
|
3336
|
-
|
|
3538
|
+
v.degToRad(t.lat),
|
|
3539
|
+
v.degToRad(t.lon),
|
|
3337
3540
|
t.height ?? 0,
|
|
3338
3541
|
0,
|
|
3339
3542
|
0,
|
|
3340
3543
|
0,
|
|
3341
3544
|
this._targetFrame,
|
|
3342
|
-
|
|
3545
|
+
Z
|
|
3343
3546
|
), this._placementMatrix.multiply(this._targetFrame), o ? (this._sourceFrame.copy(this._getSourceFrame(e)).invert(), this._placementMatrix.multiply(this._sourceFrame)) : (this._getUpCorrectionMatrix(t.up ?? "+z"), this._placementMatrix.multiply(this._upCorrectionMatrix));
|
|
3344
3547
|
else if (!o)
|
|
3345
3548
|
return !1;
|
|
@@ -3365,7 +3568,7 @@ class wr {
|
|
|
3365
3568
|
0,
|
|
3366
3569
|
0,
|
|
3367
3570
|
this._sourceFrame,
|
|
3368
|
-
|
|
3571
|
+
Z
|
|
3369
3572
|
), this._sourceFrame;
|
|
3370
3573
|
}
|
|
3371
3574
|
_getReferencePlacement(e) {
|
|
@@ -3411,230 +3614,230 @@ class wr {
|
|
|
3411
3614
|
this.clear(), this.ssp.signals.beforeRender.remove(this._beforeRenderHandler), this.ssp.signals.cameraObjectChange.remove(this._onCameraObjectChange), this._lruCache = null, this._parseQueue = null, this._downloadQueue = null;
|
|
3412
3615
|
}
|
|
3413
3616
|
}
|
|
3414
|
-
function
|
|
3617
|
+
function Br(s) {
|
|
3415
3618
|
if (s == null) return [0, 0, 0, 0];
|
|
3416
3619
|
const e = String(s).trim().toLowerCase();
|
|
3417
3620
|
if (e === "" || e === "transparent") return [0, 0, 0, 0];
|
|
3418
3621
|
const t = /^rgba\(\s*([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]*\.?[0-9]+)\s*\)$/.exec(e);
|
|
3419
3622
|
if (t !== null) {
|
|
3420
|
-
const i = Number(t[1]) / 255, n = Number(t[2]) / 255, o = Number(t[3]) / 255,
|
|
3421
|
-
return [
|
|
3623
|
+
const i = Number(t[1]) / 255, n = Number(t[2]) / 255, o = Number(t[3]) / 255, a = Number(t[4]);
|
|
3624
|
+
return [T(i), T(n), T(o), T(a)];
|
|
3422
3625
|
}
|
|
3423
3626
|
const r = /^rgb\(\s*([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)\s*\)$/.exec(e);
|
|
3424
3627
|
if (r !== null) {
|
|
3425
3628
|
const i = Number(r[1]) / 255, n = Number(r[2]) / 255, o = Number(r[3]) / 255;
|
|
3426
|
-
return [
|
|
3629
|
+
return [T(i), T(n), T(o), 1];
|
|
3427
3630
|
}
|
|
3428
3631
|
if (e.startsWith("#")) {
|
|
3429
3632
|
const i = e.slice(1);
|
|
3430
3633
|
if (i.length === 3) {
|
|
3431
|
-
const n = parseInt(i[0] + i[0], 16) / 255, o = parseInt(i[1] + i[1], 16) / 255,
|
|
3432
|
-
if (Number.isFinite(n) && Number.isFinite(o) && Number.isFinite(
|
|
3433
|
-
return [n, o,
|
|
3634
|
+
const n = parseInt(i[0] + i[0], 16) / 255, o = parseInt(i[1] + i[1], 16) / 255, a = parseInt(i[2] + i[2], 16) / 255;
|
|
3635
|
+
if (Number.isFinite(n) && Number.isFinite(o) && Number.isFinite(a))
|
|
3636
|
+
return [n, o, a, 1];
|
|
3434
3637
|
} else if (i.length === 6) {
|
|
3435
|
-
const n = parseInt(i.slice(0, 2), 16) / 255, o = parseInt(i.slice(2, 4), 16) / 255,
|
|
3436
|
-
if (Number.isFinite(n) && Number.isFinite(o) && Number.isFinite(
|
|
3437
|
-
return [n, o,
|
|
3638
|
+
const n = parseInt(i.slice(0, 2), 16) / 255, o = parseInt(i.slice(2, 4), 16) / 255, a = parseInt(i.slice(4, 6), 16) / 255;
|
|
3639
|
+
if (Number.isFinite(n) && Number.isFinite(o) && Number.isFinite(a))
|
|
3640
|
+
return [n, o, a, 1];
|
|
3438
3641
|
} else if (i.length === 8) {
|
|
3439
|
-
const n = parseInt(i.slice(0, 2), 16) / 255, o = parseInt(i.slice(2, 4), 16) / 255,
|
|
3440
|
-
if (Number.isFinite(n) && Number.isFinite(o) && Number.isFinite(
|
|
3441
|
-
return [n, o,
|
|
3642
|
+
const n = parseInt(i.slice(0, 2), 16) / 255, o = parseInt(i.slice(2, 4), 16) / 255, a = parseInt(i.slice(4, 6), 16) / 255, h = parseInt(i.slice(6, 8), 16) / 255;
|
|
3643
|
+
if (Number.isFinite(n) && Number.isFinite(o) && Number.isFinite(a) && Number.isFinite(h))
|
|
3644
|
+
return [n, o, a, h];
|
|
3442
3645
|
}
|
|
3443
3646
|
}
|
|
3444
3647
|
return [1, 1, 1, 1];
|
|
3445
3648
|
}
|
|
3446
|
-
function
|
|
3447
|
-
typeof s.fillOpacity == "number" && Number.isFinite(s.fillOpacity) ? e[0] =
|
|
3649
|
+
function Wr(s, e) {
|
|
3650
|
+
typeof s.fillOpacity == "number" && Number.isFinite(s.fillOpacity) ? e[0] = T(s.fillOpacity / 100) : typeof s.opacity == "number" && Number.isFinite(s.opacity) ? e[0] = T(s.opacity) : e[0] = 1, typeof s.strokeOpacity == "number" && Number.isFinite(s.strokeOpacity) ? e[1] = T(s.strokeOpacity / 100) : typeof s.opacity == "number" && Number.isFinite(s.opacity) ? e[1] = T(s.opacity) : e[1] = 1;
|
|
3448
3651
|
}
|
|
3449
|
-
function
|
|
3652
|
+
function T(s) {
|
|
3450
3653
|
return !Number.isFinite(s) || s < 0 ? 0 : s > 1 ? 1 : s;
|
|
3451
3654
|
}
|
|
3452
|
-
const
|
|
3453
|
-
function
|
|
3655
|
+
const Ae = 100, ue = 1e-4;
|
|
3656
|
+
function U(s, e) {
|
|
3454
3657
|
const t = s[0] - e[0], r = s[1] - e[1];
|
|
3455
3658
|
return Math.sqrt(t * t + r * r);
|
|
3456
3659
|
}
|
|
3457
|
-
function
|
|
3660
|
+
function vr(s) {
|
|
3458
3661
|
let e = 0;
|
|
3459
3662
|
for (let t = 0; t < s.length - 1; t++)
|
|
3460
|
-
e +=
|
|
3663
|
+
e += U(s[t], s[t + 1]);
|
|
3461
3664
|
return e;
|
|
3462
3665
|
}
|
|
3463
|
-
function
|
|
3464
|
-
return Math.pow(
|
|
3666
|
+
function zr(s) {
|
|
3667
|
+
return Math.pow(vr(s), 0.99);
|
|
3465
3668
|
}
|
|
3466
|
-
function
|
|
3669
|
+
function Ve(s, e) {
|
|
3467
3670
|
return [(s[0] + e[0]) / 2, (s[1] + e[1]) / 2];
|
|
3468
3671
|
}
|
|
3469
|
-
function
|
|
3672
|
+
function oe(s, e) {
|
|
3470
3673
|
let t;
|
|
3471
3674
|
const r = Math.asin(
|
|
3472
|
-
Math.abs(e[1] - s[1]) /
|
|
3675
|
+
Math.abs(e[1] - s[1]) / U(s, e)
|
|
3473
3676
|
);
|
|
3474
3677
|
return e[1] >= s[1] && e[0] >= s[0] ? t = r + Math.PI : e[1] >= s[1] && e[0] < s[0] ? t = Math.PI * 2 - r : e[1] < s[1] && e[0] < s[0] ? t = r : t = Math.PI - r, t;
|
|
3475
3678
|
}
|
|
3476
|
-
function
|
|
3477
|
-
const r =
|
|
3679
|
+
function Jr(s, e, t) {
|
|
3680
|
+
const r = oe(e, s) - oe(e, t);
|
|
3478
3681
|
return r < 0 ? r + Math.PI * 2 : r;
|
|
3479
3682
|
}
|
|
3480
|
-
function
|
|
3683
|
+
function _r(s, e, t) {
|
|
3481
3684
|
return (t[1] - s[1]) * (e[0] - s[0]) > (e[1] - s[1]) * (t[0] - s[0]);
|
|
3482
3685
|
}
|
|
3483
|
-
function
|
|
3484
|
-
const n =
|
|
3485
|
-
return [e[0] +
|
|
3686
|
+
function $r(s, e, t, r, i) {
|
|
3687
|
+
const n = oe(s, e), o = i ? n + t : n - t, a = r * Math.cos(o), h = r * Math.sin(o);
|
|
3688
|
+
return [e[0] + a, e[1] + h];
|
|
3486
3689
|
}
|
|
3487
|
-
function
|
|
3690
|
+
function ge(s, e, t) {
|
|
3488
3691
|
let r = s[0] - e[0], i = s[1] - e[1];
|
|
3489
3692
|
const n = Math.sqrt(r * r + i * i);
|
|
3490
3693
|
r /= n, i /= n;
|
|
3491
|
-
let o = t[0] - e[0],
|
|
3492
|
-
const h = Math.sqrt(o * o +
|
|
3493
|
-
return o /= h,
|
|
3494
|
-
}
|
|
3495
|
-
function
|
|
3496
|
-
const i =
|
|
3497
|
-
let n, o,
|
|
3498
|
-
const d = Math.sqrt(i[0] * i[0] + i[1] * i[1]),
|
|
3499
|
-
return d >
|
|
3500
|
-
}
|
|
3501
|
-
function
|
|
3502
|
-
const e = s[0], t = s[1], r = s[2], n =
|
|
3694
|
+
let o = t[0] - e[0], a = t[1] - e[1];
|
|
3695
|
+
const h = Math.sqrt(o * o + a * a);
|
|
3696
|
+
return o /= h, a /= h, [r + o, i + a];
|
|
3697
|
+
}
|
|
3698
|
+
function pe(s, e, t, r) {
|
|
3699
|
+
const i = ge(e, t, r);
|
|
3700
|
+
let n, o, a, h, c;
|
|
3701
|
+
const d = Math.sqrt(i[0] * i[0] + i[1] * i[1]), g = i[0] / d, p = i[1] / d, m = U(e, t), _ = U(t, r);
|
|
3702
|
+
return d > ue ? _r(e, t, r) ? (a = s * m, h = t[0] - a * p, c = t[1] + a * g, n = [h, c], a = s * _, h = t[0] + a * p, c = t[1] - a * g, o = [h, c]) : (a = s * m, h = t[0] + a * p, c = t[1] - a * g, n = [h, c], a = s * _, h = t[0] - a * p, c = t[1] + a * g, o = [h, c]) : (h = t[0] + s * (e[0] - t[0]), c = t[1] + s * (e[1] - t[1]), n = [h, c], h = t[0] + s * (r[0] - t[0]), c = t[1] + s * (r[1] - t[1]), o = [h, c]), [n, o];
|
|
3703
|
+
}
|
|
3704
|
+
function Mr(s) {
|
|
3705
|
+
const e = s[0], t = s[1], r = s[2], n = pe(0, e, t, r)[0], o = ge(e, t, r), a = Math.sqrt(o[0] * o[0] + o[1] * o[1]);
|
|
3503
3706
|
let h;
|
|
3504
|
-
if (
|
|
3505
|
-
const c =
|
|
3707
|
+
if (a > ue) {
|
|
3708
|
+
const c = Ve(e, t), d = e[0] - c[0], g = e[1] - c[1], m = 2 / U(e, t), _ = -m * g, y = m * d, O = _ * _ - y * y, b = 2 * _ * y, S = y * y - _ * _, M = n[0] - c[0], C = n[1] - c[1];
|
|
3506
3709
|
h = [
|
|
3507
|
-
c[0] +
|
|
3508
|
-
c[1] +
|
|
3710
|
+
c[0] + O * M + b * C,
|
|
3711
|
+
c[1] + b * M + S * C
|
|
3509
3712
|
];
|
|
3510
3713
|
} else
|
|
3511
3714
|
h = [
|
|
3512
|
-
e[0] +
|
|
3513
|
-
e[1] +
|
|
3715
|
+
e[0] + H(1) * (t[0] - e[0]),
|
|
3716
|
+
e[1] + H(1) * (t[1] - e[1])
|
|
3514
3717
|
];
|
|
3515
3718
|
return h;
|
|
3516
3719
|
}
|
|
3517
|
-
function
|
|
3720
|
+
function H(s) {
|
|
3518
3721
|
return 0.3 * s;
|
|
3519
3722
|
}
|
|
3520
|
-
function
|
|
3521
|
-
const e = s.length, t = s[e - 3], r = s[e - 2], i = s[e - 1], o =
|
|
3723
|
+
function Or(s) {
|
|
3724
|
+
const e = s.length, t = s[e - 3], r = s[e - 2], i = s[e - 1], o = pe(0, t, r, i)[1], a = ge(t, r, i), h = Math.sqrt(a[0] * a[0] + a[1] * a[1]);
|
|
3522
3725
|
let c;
|
|
3523
|
-
if (h >
|
|
3524
|
-
const d =
|
|
3726
|
+
if (h > ue) {
|
|
3727
|
+
const d = Ve(r, i), g = i[0] - d[0], p = i[1] - d[1], _ = 2 / U(r, i), y = -_ * p, O = _ * g, b = y * y - O * O, S = 2 * y * O, M = O * O - y * y, C = o[0] - d[0], G = o[1] - d[1];
|
|
3525
3728
|
c = [
|
|
3526
|
-
d[0] +
|
|
3527
|
-
d[1] +
|
|
3729
|
+
d[0] + b * C + S * G,
|
|
3730
|
+
d[1] + S * C + M * G
|
|
3528
3731
|
];
|
|
3529
3732
|
} else
|
|
3530
3733
|
c = [
|
|
3531
|
-
i[0] +
|
|
3532
|
-
i[1] +
|
|
3734
|
+
i[0] + H(1) * (r[0] - i[0]),
|
|
3735
|
+
i[1] + H(1) * (r[1] - i[1])
|
|
3533
3736
|
];
|
|
3534
3737
|
return c;
|
|
3535
3738
|
}
|
|
3536
|
-
function
|
|
3537
|
-
const r = [
|
|
3739
|
+
function jr(s, e) {
|
|
3740
|
+
const r = [Mr(e)];
|
|
3538
3741
|
for (let o = 0; o < e.length - 2; o++) {
|
|
3539
|
-
const
|
|
3742
|
+
const a = e[o], h = e[o + 1], c = e[o + 2], d = pe(s, a, h, c);
|
|
3540
3743
|
r.push(d[0], d[1]);
|
|
3541
3744
|
}
|
|
3542
|
-
const i =
|
|
3745
|
+
const i = Or(e);
|
|
3543
3746
|
r.push(i);
|
|
3544
3747
|
const n = [];
|
|
3545
3748
|
for (let o = 0; o < e.length - 1; o++) {
|
|
3546
|
-
const
|
|
3547
|
-
n.push(
|
|
3548
|
-
for (let c = 0; c <
|
|
3549
|
-
const d = c /
|
|
3550
|
-
n.push([
|
|
3749
|
+
const a = e[o], h = e[o + 1];
|
|
3750
|
+
n.push(a);
|
|
3751
|
+
for (let c = 0; c < Ae; c++) {
|
|
3752
|
+
const d = c / Ae, g = Math.pow(1 - d, 3) * a[0] + 3 * d * Math.pow(1 - d, 2) * r[o * 2][0] + 3 * d * d * (1 - d) * r[o * 2 + 1][0] + Math.pow(d, 3) * h[0], p = Math.pow(1 - d, 3) * a[1] + 3 * d * Math.pow(1 - d, 2) * r[o * 2][1] + 3 * d * d * (1 - d) * r[o * 2 + 1][1] + Math.pow(d, 3) * h[1];
|
|
3753
|
+
n.push([g, p]);
|
|
3551
3754
|
}
|
|
3552
3755
|
n.push(h);
|
|
3553
3756
|
}
|
|
3554
3757
|
return n;
|
|
3555
3758
|
}
|
|
3556
|
-
function
|
|
3759
|
+
function Hr(s) {
|
|
3557
3760
|
if (s.length <= 2) return s;
|
|
3558
3761
|
const e = 2, t = [], r = s.length - e - 1;
|
|
3559
3762
|
t.push(s[0]);
|
|
3560
3763
|
for (let i = 0; i <= r; i++)
|
|
3561
3764
|
for (let n = 0; n <= 1; n += 0.05) {
|
|
3562
|
-
let o = 0,
|
|
3765
|
+
let o = 0, a = 0;
|
|
3563
3766
|
for (let h = 0; h <= e; h++) {
|
|
3564
|
-
const c =
|
|
3565
|
-
o += c * s[i + h][0],
|
|
3767
|
+
const c = Sr(h, n);
|
|
3768
|
+
o += c * s[i + h][0], a += c * s[i + h][1];
|
|
3566
3769
|
}
|
|
3567
|
-
t.push([o,
|
|
3770
|
+
t.push([o, a]);
|
|
3568
3771
|
}
|
|
3569
3772
|
return t.push(s[s.length - 1]), t;
|
|
3570
3773
|
}
|
|
3571
|
-
function
|
|
3774
|
+
function Sr(s, e) {
|
|
3572
3775
|
return s === 0 ? Math.pow(e - 1, 2) / 2 : s === 1 ? (-2 * Math.pow(e, 2) + 2 * e + 1) / 2 : s === 2 ? Math.pow(e, 2) / 2 : 0;
|
|
3573
3776
|
}
|
|
3574
|
-
function
|
|
3575
|
-
return
|
|
3777
|
+
function Yr(s, e) {
|
|
3778
|
+
return ee(s, e);
|
|
3576
3779
|
}
|
|
3577
|
-
function
|
|
3578
|
-
return
|
|
3780
|
+
function Qr(s, e) {
|
|
3781
|
+
return Je(s, e);
|
|
3579
3782
|
}
|
|
3580
|
-
function
|
|
3581
|
-
return !s || s.length < 3 ? [] :
|
|
3783
|
+
function Vr(s) {
|
|
3784
|
+
return !s || s.length < 3 ? [] : ze(s);
|
|
3582
3785
|
}
|
|
3583
|
-
function
|
|
3584
|
-
return !s || s.length < 3 ? [] :
|
|
3786
|
+
function Xr(s) {
|
|
3787
|
+
return !s || s.length < 3 ? [] : We(s);
|
|
3585
3788
|
}
|
|
3586
|
-
function
|
|
3587
|
-
return !s || s.length < 2 ? [] :
|
|
3789
|
+
function qr(s) {
|
|
3790
|
+
return !s || s.length < 2 ? [] : Be(s);
|
|
3588
3791
|
}
|
|
3589
3792
|
export {
|
|
3590
|
-
|
|
3591
|
-
|
|
3592
|
-
|
|
3593
|
-
|
|
3594
|
-
|
|
3595
|
-
|
|
3596
|
-
|
|
3597
|
-
|
|
3598
|
-
|
|
3599
|
-
|
|
3600
|
-
|
|
3601
|
-
|
|
3602
|
-
|
|
3603
|
-
|
|
3604
|
-
|
|
3605
|
-
|
|
3606
|
-
|
|
3607
|
-
|
|
3793
|
+
Fr as ArcgisTilesRenderer,
|
|
3794
|
+
ne as EMERGENCY_RESOURCE_ICON_BY_ONTOLOGY_ID,
|
|
3795
|
+
Dr as EMERGENCY_RESOURCE_ONTOLOGY_IDS,
|
|
3796
|
+
Ae as FITTING_COUNT,
|
|
3797
|
+
Ct as GisPlotArrow,
|
|
3798
|
+
E as GisPlotBase,
|
|
3799
|
+
Pt as GisPlotCircle,
|
|
3800
|
+
Ot as GisPlotLine,
|
|
3801
|
+
Mt as GisPlotPoint,
|
|
3802
|
+
St as GisPlotPolygon,
|
|
3803
|
+
bt as GisPlotRectangle,
|
|
3804
|
+
xt as GisPlotSector,
|
|
3805
|
+
kt as GisPlotText,
|
|
3806
|
+
nr as GroundDecalManager,
|
|
3807
|
+
F as MaterialType,
|
|
3808
|
+
U as MathDistance,
|
|
3809
|
+
Ve as Mid,
|
|
3810
|
+
j as OverlayManager,
|
|
3608
3811
|
u as OverlayType,
|
|
3609
|
-
|
|
3610
|
-
|
|
3611
|
-
|
|
3612
|
-
|
|
3613
|
-
|
|
3614
|
-
|
|
3615
|
-
|
|
3616
|
-
|
|
3617
|
-
|
|
3618
|
-
|
|
3619
|
-
|
|
3620
|
-
|
|
3621
|
-
|
|
3622
|
-
|
|
3623
|
-
|
|
3624
|
-
|
|
3625
|
-
|
|
3626
|
-
|
|
3627
|
-
|
|
3628
|
-
|
|
3629
|
-
|
|
3630
|
-
|
|
3631
|
-
|
|
3632
|
-
|
|
3633
|
-
|
|
3634
|
-
|
|
3635
|
-
|
|
3636
|
-
|
|
3637
|
-
|
|
3638
|
-
|
|
3639
|
-
|
|
3812
|
+
sr as PlotPrimitiveBridge,
|
|
3813
|
+
Ur as TerrainTilesRenderer,
|
|
3814
|
+
L as TerrainType,
|
|
3815
|
+
wt as TileCustomMaterialPlugin,
|
|
3816
|
+
wr as TilesRenderer,
|
|
3817
|
+
Gr as TilesRendererManager,
|
|
3818
|
+
ue as ZERO_TOLERANCE,
|
|
3819
|
+
ur as computePlotBoundingBox,
|
|
3820
|
+
Qr as createAssaultDirectionArrow,
|
|
3821
|
+
Vr as createAttackArrow,
|
|
3822
|
+
qr as createCurvedArrow,
|
|
3823
|
+
Yr as createFineArrow,
|
|
3824
|
+
Xr as createSwallowtailAttackArrow,
|
|
3825
|
+
Ar as default,
|
|
3826
|
+
gr as flyToPlotById,
|
|
3827
|
+
Jr as getAngleOfThreePoints,
|
|
3828
|
+
oe as getAzimuth,
|
|
3829
|
+
zr as getBaseLength,
|
|
3830
|
+
pe as getBisectorNormals,
|
|
3831
|
+
jr as getCurvePoints,
|
|
3832
|
+
ge as getNormal,
|
|
3833
|
+
Hr as getQBSplinePoints,
|
|
3834
|
+
$r as getThirdPoint,
|
|
3835
|
+
_r as isClockWise,
|
|
3836
|
+
Br as parseColorToRGBA,
|
|
3837
|
+
At as plotOrderToRenderOrder,
|
|
3838
|
+
er as resolveEmergencyResourceIcon,
|
|
3839
|
+
Wr as resolveOpacity,
|
|
3840
|
+
Re as resolvePlotPointImageUrl,
|
|
3841
|
+
Lt as sanitizePlotOrder,
|
|
3842
|
+
vr as wholeDistance
|
|
3640
3843
|
};
|