@vsleem-realsee-viewer/shared 2.0.10 → 2.0.12

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.d.ts CHANGED
@@ -473,6 +473,12 @@ export declare class DataSource {
473
473
  * @returns
474
474
  */
475
475
  static getCoordinateTree(projectId: number): Promise<Coordinate | undefined>;
476
+ /**
477
+ * 解析坐标系树
478
+ * @param tree 坐标系树
479
+ * @returns
480
+ */
481
+ static parsedCoordinateTree(tree: Coordinate): Coordinate;
476
482
  /**
477
483
  * 添加坐标系
478
484
  * @param parent 添加到的父级
@@ -507,13 +513,19 @@ export declare class DataSource {
507
513
  * @returns 处理后的坐标系数据
508
514
  */
509
515
  static handleCoordinateList(array: CoordinateModel[]): Coordinate[];
516
+ /**
517
+ * 将树形结构的节点扁平化为一个一维数组
518
+ * @param node 树的节点数组(可以是单个根节点数组或子节点数组)
519
+ * @returns 扁平化后的一维节点数组
520
+ */
521
+ static flattenCoordinateTree(tree: Coordinate | Coordinate[]): Coordinate[];
510
522
  /**
511
523
  * 递归函数将扁平列表转化为树形结构
512
524
  * @param flatNodes // 扁平列表
513
525
  * @param rootId // 根id
514
526
  * @returns
515
527
  */
516
- static buildCoordinateTree(flatNodes: Coordinate[], rootId: number): Coordinate;
528
+ static buildCoordinateTree(flatNodes: Coordinate[], rootId?: number): Coordinate;
517
529
  /**
518
530
  * 对子节点进行排序,首先按 status=0 升序,然后按 type=0 升序,最后按 createTime 降序
519
531
  * @param node // 节点
@@ -636,7 +648,7 @@ declare function isNull(val: unknown): val is null;
636
648
 
637
649
  declare function isNullOrUnDef(val: unknown): val is null | undefined;
638
650
 
639
- declare function isNumber(val: unknown): val is number;
651
+ declare function isNumeric(val: unknown): boolean;
640
652
 
641
653
  declare function isObject(val: any): val is Record<any, any>;
642
654
 
@@ -963,7 +975,7 @@ declare namespace utils {
963
975
  isArray,
964
976
  isWindow,
965
977
  isElement,
966
- isNumber,
978
+ isNumeric,
967
979
  isSameValue,
968
980
  isNullOrUnDef,
969
981
  isPromise,
package/dist/index.mjs CHANGED
@@ -1,6 +1,6 @@
1
- class m extends Error {
1
+ class y extends Error {
2
2
  constructor(t, e, i) {
3
- super(e), this.code = t, this.message = e, this.details = i, this.name = "Apprror", Object.setPrototypeOf(this, m.prototype);
3
+ super(e), this.code = t, this.message = e, this.details = i, this.name = "Apprror", Object.setPrototypeOf(this, y.prototype);
4
4
  }
5
5
  // 可选的:转换成 JSON 格式,方便返回给调用方
6
6
  toJSON() {
@@ -12,40 +12,40 @@ class m extends Error {
12
12
  };
13
13
  }
14
14
  }
15
- var D = /* @__PURE__ */ ((s) => (s[s.CADModel = 5] = "CADModel", s[s.BIMModel = 6] = "BIMModel", s[s.ForgeModel = 7] = "ForgeModel", s[s.ThreeDModel = 8] = "ThreeDModel", s[s.SkyMapModel = 9] = "SkyMapModel", s[s.ScaleModel = 10] = "ScaleModel", s))(D || {}), tt = /* @__PURE__ */ ((s) => (s[s.Global = 0] = "Global", s))(tt || {}), v = /* @__PURE__ */ ((s) => (s[s.Space = 0] = "Space", s[s.Model = 1] = "Model", s[s.Data = 2] = "Data", s))(v || {}), C = /* @__PURE__ */ ((s) => (s[s.Used = 0] = "Used", s[s.Enabled = 1] = "Enabled", s[s.Disabled = 2] = "Disabled", s))(C || {}), F = /* @__PURE__ */ ((s) => (s[s.SUCCESS = 200] = "SUCCESS", s[s.ERROR = -1] = "ERROR", s[s.TIMEOUT = 401] = "TIMEOUT", s))(F || {}), M = /* @__PURE__ */ ((s) => (s.GET = "GET", s.POST = "POST", s))(M || {}), R = /* @__PURE__ */ ((s) => (s.JSON = "application/json", s.FORM_URLENCODED = "application/x-www-form-urlencoded;charset=UTF-8", s.FORM_DATA = "multipart/form-data;charset=UTF-8", s.OCTET_STREAM = "'application/octet-stream", s))(R || {}), et = /* @__PURE__ */ ((s) => (s.Hw = "huawei", s.Ali = "aliyun", s.Hs = "hs", s.Aws = "amazon", s.Minio = "minio", s))(et || {}), y = /* @__PURE__ */ ((s) => (s[s.GeoPointNoPlane = 9e3] = "GeoPointNoPlane", s[s.PointUnmappedGIS = 9010] = "PointUnmappedGIS", s[s.PointNoXYZ = 9011] = "PointNoXYZ", s[s.PointNoPlane = 9012] = "PointNoPlane", s[s.RelativePlaneUnmatch = 9020] = "RelativePlaneUnmatch", s[s.RelativeNoPlane = 9021] = "RelativeNoPlane", s[s.RelativeJsonError = 9022] = "RelativeJsonError", s[s.RequestCodeError = 9030] = "RequestCodeError", s[s.RequestResultError = 9031] = "RequestResultError", s[s.RequestUnknownError = 9032] = "RequestUnknownError", s))(y || {});
16
- const st = {
15
+ var E = /* @__PURE__ */ ((s) => (s[s.CADModel = 5] = "CADModel", s[s.BIMModel = 6] = "BIMModel", s[s.ForgeModel = 7] = "ForgeModel", s[s.ThreeDModel = 8] = "ThreeDModel", s[s.SkyMapModel = 9] = "SkyMapModel", s[s.ScaleModel = 10] = "ScaleModel", s))(E || {}), et = /* @__PURE__ */ ((s) => (s[s.Global = 0] = "Global", s))(et || {}), v = /* @__PURE__ */ ((s) => (s[s.Space = 0] = "Space", s[s.Model = 1] = "Model", s[s.Data = 2] = "Data", s))(v || {}), C = /* @__PURE__ */ ((s) => (s[s.Used = 0] = "Used", s[s.Enabled = 1] = "Enabled", s[s.Disabled = 2] = "Disabled", s))(C || {}), U = /* @__PURE__ */ ((s) => (s[s.SUCCESS = 200] = "SUCCESS", s[s.ERROR = -1] = "ERROR", s[s.TIMEOUT = 401] = "TIMEOUT", s))(U || {}), M = /* @__PURE__ */ ((s) => (s.GET = "GET", s.POST = "POST", s))(M || {}), R = /* @__PURE__ */ ((s) => (s.JSON = "application/json", s.FORM_URLENCODED = "application/x-www-form-urlencoded;charset=UTF-8", s.FORM_DATA = "multipart/form-data;charset=UTF-8", s.OCTET_STREAM = "'application/octet-stream", s))(R || {}), st = /* @__PURE__ */ ((s) => (s.Hw = "huawei", s.Ali = "aliyun", s.Hs = "hs", s.Aws = "amazon", s.Minio = "minio", s))(st || {}), w = /* @__PURE__ */ ((s) => (s[s.GeoPointNoPlane = 9e3] = "GeoPointNoPlane", s[s.PointUnmappedGIS = 9010] = "PointUnmappedGIS", s[s.PointNoXYZ = 9011] = "PointNoXYZ", s[s.PointNoPlane = 9012] = "PointNoPlane", s[s.RelativePlaneUnmatch = 9020] = "RelativePlaneUnmatch", s[s.RelativeNoPlane = 9021] = "RelativeNoPlane", s[s.RelativeJsonError = 9022] = "RelativeJsonError", s[s.RequestCodeError = 9030] = "RequestCodeError", s[s.RequestResultError = 9031] = "RequestResultError", s[s.RequestUnknownError = 9032] = "RequestUnknownError", s))(w || {});
16
+ const it = {
17
17
  baseUrl: "https://vsleem.com/api",
18
18
  obsType: "hs",
19
19
  authorizeCode: ""
20
- }, it = {
20
+ }, nt = {
21
21
  isTransformResponse: !0,
22
22
  joinBaseUrl: !0,
23
23
  withAuthorize: !0
24
- }, nt = {
24
+ }, ot = {
25
25
  url: "",
26
26
  method: M.GET,
27
27
  headers: {}
28
- }, U = { ...st };
29
- function ot(s) {
30
- Object.assign(U, s);
28
+ }, Y = { ...it };
29
+ function rt(s) {
30
+ Object.assign(Y, s);
31
31
  }
32
- async function T(s, t) {
33
- const e = { ...it, ...t }, i = { ...nt, ...s };
32
+ async function S(s, t) {
33
+ const e = { ...nt, ...t }, i = { ...ot, ...s };
34
34
  try {
35
- const n = rt(i, e), { url: o, ...r } = n, h = await (await window.fetch(o, r)).json();
36
- return at(h, e);
35
+ const n = at(i, e), { url: o, ...r } = n, h = await (await window.fetch(o, r)).json();
36
+ return ht(h, e);
37
37
  } catch (n) {
38
- return ht(n);
38
+ return ct(n);
39
39
  }
40
40
  }
41
- function rt(s, t) {
42
- const { baseUrl: e, authorizeCode: i } = U, { joinBaseUrl: n, withAuthorize: o } = t;
41
+ function at(s, t) {
42
+ const { baseUrl: e, authorizeCode: i } = Y, { joinBaseUrl: n, withAuthorize: o } = t;
43
43
  let { url: r, method: a, headers: h = {}, params: l, data: c } = s;
44
44
  n && e && (r = `${e}${r}`), a = a?.toUpperCase();
45
45
  const u = { ...h };
46
46
  if (/^https?:\/\/.+$/i.test(e ?? "") ? u.PlatForm = new URL(e ?? "").host : u.PlatForm = new URL(window.location.href).host, o && i && (u.AuthorizationCode = i), a === M.POST && !u["Content-Type"] && (u["Content-Type"] = R.JSON), a === M.GET && l) {
47
- const p = new URLSearchParams(l);
48
- r += `?${p.toString()}`;
47
+ const g = new URLSearchParams(l);
48
+ r += `?${g.toString()}`;
49
49
  }
50
50
  let d;
51
51
  return a === M.POST && (d = u["Content-Type"] === R.JSON ? JSON.stringify(c || {}) : c), {
@@ -55,29 +55,29 @@ function rt(s, t) {
55
55
  body: d
56
56
  };
57
57
  }
58
- function at(s, t) {
58
+ function ht(s, t) {
59
59
  if (!t.isTransformResponse)
60
60
  return s;
61
61
  if (!s)
62
- throw new m(y.RequestResultError, "请求返回的结果错误");
62
+ throw new y(w.RequestResultError, "请求返回的结果错误");
63
63
  const { code: e, data: i, msg: n } = s;
64
- if (e === F.SUCCESS)
64
+ if (e === U.SUCCESS)
65
65
  return i;
66
- throw new m(y.RequestCodeError, n || "请求返回的Code错误");
66
+ throw new y(w.RequestCodeError, n || "请求返回的Code错误");
67
67
  }
68
- function ht(s) {
69
- throw s instanceof Error ? s : new m(
70
- y.RequestUnknownError,
68
+ function ct(s) {
69
+ throw s instanceof Error ? s : new y(
70
+ w.RequestUnknownError,
71
71
  typeof s == "string" ? s : "未知的请求错误"
72
72
  );
73
73
  }
74
74
  const Ot = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
75
75
  __proto__: null,
76
- request: T,
77
- setRequestGlobalConfig: ot
76
+ request: S,
77
+ setRequestGlobalConfig: rt
78
78
  }, Symbol.toStringTag, { value: "Module" }));
79
- function Y(s, t) {
80
- return T(
79
+ function G(s, t) {
80
+ return S(
81
81
  {
82
82
  url: "/project/jssdk/cs/list",
83
83
  method: M.GET,
@@ -86,8 +86,8 @@ function Y(s, t) {
86
86
  t
87
87
  );
88
88
  }
89
- function G(s, t) {
90
- return T(
89
+ function B(s, t) {
90
+ return S(
91
91
  {
92
92
  url: "/project/jssdk/cs/bind",
93
93
  method: M.POST,
@@ -97,7 +97,7 @@ function G(s, t) {
97
97
  );
98
98
  }
99
99
  function O(s, t) {
100
- return T(
100
+ return S(
101
101
  {
102
102
  url: "/project/jssdk/cs/save",
103
103
  method: M.POST,
@@ -106,8 +106,8 @@ function O(s, t) {
106
106
  t
107
107
  );
108
108
  }
109
- function B(s, t) {
110
- return T(
109
+ function $(s, t) {
110
+ return S(
111
111
  {
112
112
  url: "/project/jssdk/cs/delete",
113
113
  method: M.POST,
@@ -116,8 +116,8 @@ function B(s, t) {
116
116
  t
117
117
  );
118
118
  }
119
- function $(s, t) {
120
- return T(
119
+ function _(s, t) {
120
+ return S(
121
121
  {
122
122
  url: "/project/jssdk/cs/mapping",
123
123
  method: M.POST,
@@ -126,8 +126,8 @@ function $(s, t) {
126
126
  t
127
127
  );
128
128
  }
129
- function _(s, t) {
130
- return T(
129
+ function Z(s, t) {
130
+ return S(
131
131
  {
132
132
  url: "/project/jssdk/cs/mapping/query",
133
133
  method: M.GET,
@@ -136,12 +136,12 @@ function _(s, t) {
136
136
  t
137
137
  );
138
138
  }
139
- function ct(s, t = {
139
+ function lt(s, t = {
140
140
  isTransformResponse: !1,
141
141
  joinBaseUrl: !1,
142
142
  withAuthorize: !1
143
143
  }) {
144
- return T(
144
+ return S(
145
145
  {
146
146
  url: s,
147
147
  method: M.GET
@@ -151,69 +151,69 @@ function ct(s, t = {
151
151
  }
152
152
  const Lt = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
153
153
  __proto__: null,
154
- bindCoordinate: G,
155
- getCoordinateList: Y,
156
- getImageInfo: ct,
157
- getMappingRelation: _,
158
- mapingCoordinate: $,
159
- removeCoordinate: B,
154
+ bindCoordinate: B,
155
+ getCoordinateList: G,
156
+ getImageInfo: lt,
157
+ getMappingRelation: Z,
158
+ mapingCoordinate: _,
159
+ removeCoordinate: $,
160
160
  saveCoordinate: O
161
- }, Symbol.toStringTag, { value: "Module" })), lt = typeof window < "u", ut = Object.prototype.toString;
162
- function P(s, t) {
163
- return ut.call(s) === `[object ${t}]`;
161
+ }, Symbol.toStringTag, { value: "Module" })), ut = typeof window < "u", dt = Object.prototype.toString;
162
+ function T(s, t) {
163
+ return dt.call(s) === `[object ${t}]`;
164
164
  }
165
- function Z(s) {
165
+ function q(s) {
166
166
  return typeof s < "u";
167
167
  }
168
- function q(s) {
169
- return !Z(s);
168
+ function J(s) {
169
+ return !q(s);
170
170
  }
171
- function S(s) {
172
- return s !== null && P(s, "Object");
171
+ function b(s) {
172
+ return s !== null && T(s, "Object");
173
173
  }
174
- function J(s) {
174
+ function H(s) {
175
175
  return s === null;
176
176
  }
177
- function dt(s) {
178
- return P(s, "Date");
179
- }
180
177
  function ft(s) {
181
- return P(s, "String");
178
+ return T(s, "Date");
179
+ }
180
+ function mt(s) {
181
+ return T(s, "String");
182
182
  }
183
183
  function L(s) {
184
184
  return typeof s == "function";
185
185
  }
186
- function mt(s) {
187
- return P(s, "Boolean");
188
- }
189
186
  function yt(s) {
190
- return P(s, "RegExp");
191
- }
192
- function g(s) {
193
- return s && Array.isArray(s);
187
+ return T(s, "Boolean");
194
188
  }
195
189
  function wt(s) {
196
- return typeof window < "u" && P(s, "Window");
190
+ return T(s, "RegExp");
191
+ }
192
+ function x(s) {
193
+ return s && Array.isArray(s);
197
194
  }
198
195
  function pt(s) {
199
- return S(s) && !!s.tagName;
196
+ return typeof window < "u" && T(s, "Window");
200
197
  }
201
- function b(s) {
202
- return typeof s == "number" || /^\d+(\.\d+)?$/.test(String(s ?? ""));
198
+ function gt(s) {
199
+ return b(s) && !!s.tagName;
203
200
  }
204
- function gt(s, t) {
205
- return JSON.stringify(s) === JSON.stringify(t);
201
+ function N(s) {
202
+ return typeof s == "number" ? !0 : typeof s != "string" ? !1 : /^[-+]?(?:\d+(?:\.\d*)?|\.\d+)(?:[eE][-+]?\d+)?$/.test(s);
206
203
  }
207
- function xt(s) {
208
- return q(s) || J(s);
204
+ function xt(s, t) {
205
+ return JSON.stringify(s) === JSON.stringify(t);
209
206
  }
210
207
  function Mt(s) {
211
- return P(s, "Promise") && S(s) && L(s.then) && L(s.catch);
208
+ return J(s) || H(s);
212
209
  }
213
- function H(s) {
214
- return E(s, /* @__PURE__ */ new WeakMap());
210
+ function vt(s) {
211
+ return T(s, "Promise") && b(s) && L(s.then) && L(s.catch);
215
212
  }
216
- function E(s, t) {
213
+ function V(s) {
214
+ return P(s, /* @__PURE__ */ new WeakMap());
215
+ }
216
+ function P(s, t) {
217
217
  if (typeof s != "object" || s === null)
218
218
  return s;
219
219
  if (t.has(s))
@@ -225,11 +225,11 @@ function E(s, t) {
225
225
  return e = new RegExp(s), t.set(s, e), e;
226
226
  if (s instanceof Map)
227
227
  return e = /* @__PURE__ */ new Map(), t.set(s, e), s.forEach((n, o) => {
228
- e.set(o, E(n, t));
228
+ e.set(o, P(n, t));
229
229
  }), e;
230
230
  if (s instanceof Set)
231
231
  return e = /* @__PURE__ */ new Set(), t.set(s, e), s.forEach((n) => {
232
- e.add(E(n, t));
232
+ e.add(P(n, t));
233
233
  }), e;
234
234
  if (ArrayBuffer.isView(s))
235
235
  return e = new s.constructor(
@@ -242,18 +242,18 @@ function E(s, t) {
242
242
  if (Array.isArray(s)) {
243
243
  e = [], t.set(s, e);
244
244
  for (let n = 0; n < s.length; n++)
245
- n in s && (e[n] = E(s[n], t));
245
+ n in s && (e[n] = P(s[n], t));
246
246
  return e;
247
247
  }
248
248
  e = Object.create(Object.getPrototypeOf(s)), t.set(s, e);
249
249
  for (const n in s)
250
- Object.prototype.hasOwnProperty.call(s, n) && (e[n] = E(s[n], t));
250
+ Object.prototype.hasOwnProperty.call(s, n) && (e[n] = P(s[n], t));
251
251
  const i = Object.getOwnPropertySymbols(s);
252
252
  for (const n of i)
253
- Object.prototype.propertyIsEnumerable.call(s, n) && (e[n] = E(s[n], t));
253
+ Object.prototype.propertyIsEnumerable.call(s, n) && (e[n] = P(s[n], t));
254
254
  return e;
255
255
  }
256
- function vt(s, t, e = !1) {
256
+ function bt(s, t, e = !1) {
257
257
  let i;
258
258
  const n = function(...o) {
259
259
  const r = this, a = e && !i;
@@ -265,7 +265,7 @@ function vt(s, t, e = !1) {
265
265
  i && clearTimeout(i), i = void 0;
266
266
  }, n;
267
267
  }
268
- function bt(s, t, e = !1) {
268
+ function St(s, t, e = !1) {
269
269
  let i, n;
270
270
  const o = function(...r) {
271
271
  const a = this;
@@ -291,40 +291,40 @@ function k(s, ...t) {
291
291
  function I(s) {
292
292
  return s !== null && typeof s == "object" && !Array.isArray(s);
293
293
  }
294
- function V(s, ...t) {
294
+ function W(s, ...t) {
295
295
  if (!t.length) return s;
296
296
  for (const e of t)
297
297
  e != null && typeof e == "object" && Object.keys(e).forEach((i) => {
298
298
  const n = e[i], o = s[i];
299
- n !== null && typeof n == "object" && !Array.isArray(n) ? ((!o || typeof o != "object") && (s[i] = {}), V(s[i], n)) : s[i] = n;
299
+ n !== null && typeof n == "object" && !Array.isArray(n) ? ((!o || typeof o != "object") && (s[i] = {}), W(s[i], n)) : s[i] = n;
300
300
  });
301
301
  return s;
302
302
  }
303
- function W(s, t) {
303
+ function Q(s, t) {
304
304
  const e = {};
305
- if (S(s) && !g(s)) {
305
+ if (b(s) && !x(s)) {
306
306
  for (const i in s)
307
307
  if (Object.prototype.hasOwnProperty.call(s, i)) {
308
- const n = s[i], o = S(t) && !g(t) ? t[i] : void 0;
308
+ const n = s[i], o = b(t) && !x(t) ? t[i] : void 0;
309
309
  if (!(i in (t || {})))
310
310
  e[i] = n;
311
- else if (g(n) && g(o))
311
+ else if (x(n) && x(o))
312
312
  JSON.stringify(n) !== JSON.stringify(o) && (e[i] = n);
313
- else if (S(n) && S(o)) {
314
- const r = W(n, o);
313
+ else if (b(n) && b(o)) {
314
+ const r = Q(n, o);
315
315
  r && Object.keys(r).length > 0 && (e[i] = r);
316
316
  } else n !== o && (e[i] = n);
317
317
  }
318
318
  }
319
- if (S(t) && g(t))
319
+ if (b(t) && x(t))
320
320
  for (const i in t)
321
321
  Object.prototype.hasOwnProperty.call(t, i) && !(i in (s || {})) && (e[i] = void 0);
322
322
  return e;
323
323
  }
324
- function St(s, t = {}) {
324
+ function Tt(s, t = {}) {
325
325
  return new Promise((e, i) => {
326
326
  const n = z(s);
327
- if (Tt(n)) {
327
+ if (Pt(n)) {
328
328
  e(!0);
329
329
  return;
330
330
  }
@@ -338,14 +338,14 @@ function St(s, t = {}) {
338
338
  }, document.head.appendChild(o);
339
339
  });
340
340
  }
341
- function Tt(s) {
341
+ function Pt(s) {
342
342
  const t = z(s);
343
343
  return Array.from(document.scripts).some((e) => z(e.src) === t);
344
344
  }
345
- function Pt(s) {
345
+ function Et(s) {
346
346
  return new Promise((t, e) => {
347
347
  const i = z(s);
348
- if (Et(i)) {
348
+ if (zt(i)) {
349
349
  t(!0);
350
350
  return;
351
351
  }
@@ -357,9 +357,11 @@ function Pt(s) {
357
357
  }, document.head.appendChild(n);
358
358
  });
359
359
  }
360
- function Et(s) {
360
+ function zt(s) {
361
361
  const t = z(s);
362
- return Array.from(document.links).some((e) => z(e.href) === t);
362
+ return Array.from(document.querySelectorAll('link[rel="stylesheet"]')).some(
363
+ (e) => z(e.href) === t
364
+ );
363
365
  }
364
366
  function z(s) {
365
367
  try {
@@ -381,7 +383,7 @@ function Dt(s, t, e, i) {
381
383
  sh: r
382
384
  };
383
385
  }
384
- function zt(s, t, e) {
386
+ function It(s, t, e) {
385
387
  return {
386
388
  x: s * e.scale + e.x,
387
389
  // 缩放后加上偏移量
@@ -395,45 +397,45 @@ function Nt(s, t, e) {
395
397
  y: (t - e.y) / e.scale
396
398
  };
397
399
  }
398
- function It(s) {
400
+ function Ct(s) {
399
401
  console.warn(`[warn]:${s}`);
400
402
  }
401
- function Ct(s) {
403
+ function Rt(s) {
402
404
  throw new Error(`[error]:${s}`);
403
405
  }
404
406
  const kt = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
405
407
  __proto__: null,
406
- cloneDeep: H,
407
- debounce: vt,
408
+ cloneDeep: V,
409
+ debounce: bt,
408
410
  deepMerge: k,
409
- deepMergeProps: V,
410
- error: Ct,
411
- getDiffProps: W,
411
+ deepMergeProps: W,
412
+ error: Rt,
413
+ getDiffProps: Q,
412
414
  getImageTransform: Dt,
413
- inBrowser: lt,
414
- is: P,
415
- isArray: g,
416
- isBoolean: mt,
417
- isDate: dt,
418
- isDef: Z,
419
- isElement: pt,
415
+ inBrowser: ut,
416
+ is: T,
417
+ isArray: x,
418
+ isBoolean: yt,
419
+ isDate: ft,
420
+ isDef: q,
421
+ isElement: gt,
420
422
  isFunction: L,
421
- isNull: J,
422
- isNullOrUnDef: xt,
423
- isNumber: b,
424
- isObject: S,
425
- isPromise: Mt,
426
- isRegExp: yt,
427
- isSameValue: gt,
428
- isString: ft,
429
- isUnDef: q,
430
- isWindow: wt,
431
- loadCss: Pt,
432
- loadScript: St,
433
- throttle: bt,
434
- toCanvasCoord: zt,
423
+ isNull: H,
424
+ isNullOrUnDef: Mt,
425
+ isNumeric: N,
426
+ isObject: b,
427
+ isPromise: vt,
428
+ isRegExp: wt,
429
+ isSameValue: xt,
430
+ isString: mt,
431
+ isUnDef: J,
432
+ isWindow: pt,
433
+ loadCss: Et,
434
+ loadScript: Tt,
435
+ throttle: St,
436
+ toCanvasCoord: It,
435
437
  toModelCoord: Nt,
436
- warn: It
438
+ warn: Ct
437
439
  }, Symbol.toStringTag, { value: "Module" }));
438
440
  class f {
439
441
  // 直角坐标系坐标
@@ -465,7 +467,7 @@ class f {
465
467
  // 默认平面 ('xy' 或 'xz')
466
468
  constructor(t) {
467
469
  const { x: e, y: i, z: n, lat: o, lon: r, alt: a, yaw: h, pitch: l, roll: c, plane: u = "xy" } = t || {};
468
- b(e) && b(i) && Number(e) !== 0 && Number(i) !== 0 && (this.x = Number(e) || 0, this.y = Number(i) || 0, this.z = Number(n) || 0, this.plane = u, this.hasXYZ = !0), b(o) && b(r) && Number(o) !== 0 && Number(r) !== 0 && (this.lat = Number(o) || 0, this.lon = Number(r) || 0, this.alt = Number(a) || 0, this.hasGeo = !0), (b(h) || b(l) || b(c)) && (this.yaw = Number(h) || 0, this.pitch = Number(l) || 0, this.roll = Number(c) || 0, this.hasAngle = !0);
470
+ this.x = Number(e) || 0, this.y = Number(i) || 0, this.z = Number(n) || 0, (this.x !== 0 || this.y !== 0 || this.z !== 0) && (this.plane = u, this.hasXYZ = !0), this.lat = Number(o) || 0, this.lon = Number(r) || 0, this.alt = Number(a) || 0, (this.lat !== 0 || this.lon !== 0 || this.alt !== 0) && (this.hasGeo = !0), this.yaw = Number(h) || 0, this.pitch = Number(l) || 0, this.roll = Number(c) || 0, (N(h) || N(l) || N(c)) && (this.hasAngle = !0);
469
471
  }
470
472
  /**
471
473
  * 计算两点之间的三维距离
@@ -552,29 +554,30 @@ class f {
552
554
  try {
553
555
  if (e?.id === i?.id)
554
556
  return new f(this);
555
- if (e?.modelType === D.SkyMapModel) {
557
+ if (e?.modelType === E.SkyMapModel) {
556
558
  const { refPoint: n } = e?.relativeMap || {};
557
559
  if (this?.hasXYZ)
558
560
  return this.project(t);
559
561
  if (this.hasGeo && n) {
560
- const o = N.LLHToXYZ(this, n);
562
+ const o = D.LLHToXYZ(this, n);
561
563
  return this.x = o.x, this.y = o.y, this.z = o.z, this.hasXYZ = !0, this.project(t);
562
564
  }
563
- throw new m(y.PointUnmappedGIS, "没有完成GIS与其他空间的映射");
565
+ throw new y(w.PointUnmappedGIS, "没有完成GIS与其他空间的映射");
564
566
  }
565
- if (i?.modelType === D.SkyMapModel) {
567
+ if (i?.modelType === E.SkyMapModel) {
566
568
  const { refPoint: n } = i?.relativeMap || {};
567
569
  if (this?.hasGeo)
568
570
  return new f(this);
569
571
  const o = this.project(t);
570
572
  if (o?.hasXYZ && n) {
571
- const r = N.XYZToLLH(o, n);
573
+ const r = D.XYZToLLH(o, n);
572
574
  return o.lat = r.lat, o.lon = r.lon, o.alt = r.alt, o.hasGeo = !0, o;
573
575
  }
574
- throw new m(y.PointUnmappedGIS, "没有完成GIS与其他空间的映射");
576
+ throw new y(w.PointUnmappedGIS, "没有完成GIS与其他空间的映射");
575
577
  }
576
578
  return this.project(t);
577
- } catch {
579
+ } catch (n) {
580
+ console.error(n);
578
581
  return;
579
582
  }
580
583
  }
@@ -586,12 +589,12 @@ class f {
586
589
  */
587
590
  project(t) {
588
591
  if (!this.hasXYZ)
589
- throw new m(y.PointNoXYZ, "点没有xxz坐标信息");
592
+ throw new y(w.PointNoXYZ, "点没有xxz坐标信息");
590
593
  if (this.plane === "xz")
591
594
  return this.projectXZ(t);
592
595
  if (this.plane === "xy")
593
596
  return this.projectXY(t);
594
- throw new m(y.PointNoPlane, "点的plane应为xz或xy");
597
+ throw new y(w.PointNoPlane, "点的plane应为xz或xy");
595
598
  }
596
599
  /**
597
600
  * XZ平面投影转换
@@ -616,7 +619,7 @@ class f {
616
619
  return e.x = i + t.x, e.y = n + t.y, e.z += t.z, e;
617
620
  }
618
621
  }
619
- class N {
622
+ class D {
620
623
  lat = 0;
621
624
  //经度
622
625
  lon = 0;
@@ -637,8 +640,8 @@ class N {
637
640
  const u = t.x / 1e3 / (a * Math.cos(r)), d = t.y / 1e3 / a;
638
641
  h = e.lon + f.toDegrees(u), l = e.lat - f.toDegrees(d), c = e.alt + t.z / 1e3;
639
642
  } else
640
- throw new m(y.GeoPointNoPlane, "点的plane应为xz或xy");
641
- return new N({
643
+ throw new y(w.GeoPointNoPlane, "点的plane应为xz或xy");
644
+ return new D({
642
645
  lat: l,
643
646
  lon: h,
644
647
  alt: c
@@ -660,10 +663,10 @@ class N {
660
663
  z: (t.alt - e.alt) * 1e3,
661
664
  plane: "xy"
662
665
  });
663
- throw new m(y.GeoPointNoPlane, "点的plane应为xz或xy");
666
+ throw new y(w.GeoPointNoPlane, "点的plane应为xz或xy");
664
667
  }
665
668
  }
666
- class x {
669
+ class p {
667
670
  scale = 1;
668
671
  yaw = 0;
669
672
  x = 0;
@@ -676,7 +679,7 @@ class x {
676
679
  //参考点
677
680
  constructor(t) {
678
681
  const { refPoint: e, ...i } = t || {};
679
- e && (this.refPoint = new N(e)), Object.assign(this, i);
682
+ e && (this.refPoint = new D(e)), Object.assign(this, i);
680
683
  }
681
684
  /**
682
685
  * 合并两个相对坐标系的映射关系
@@ -686,7 +689,7 @@ class x {
686
689
  */
687
690
  static addRelativeMap(t, e) {
688
691
  if (t.plane !== e.plane)
689
- throw new m(y.RelativePlaneUnmatch, "两个映射关系的plane应该相同");
692
+ throw new y(w.RelativePlaneUnmatch, "两个映射关系的plane应该相同");
690
693
  const i = t.scale * e.scale, n = t.yaw + e.yaw, o = Math.cos(e.yaw), r = Math.sin(e.yaw);
691
694
  let a = 0, h = 0, l = 0;
692
695
  if (t.plane === "xz") {
@@ -696,8 +699,8 @@ class x {
696
699
  const c = t.x * o - t.y * r, u = t.x * r + t.y * o, d = t.z;
697
700
  a = e.x + c * e.scale, h = e.y + u * e.scale, l = e.z + d * e.scale;
698
701
  } else
699
- throw new m(y.RelativeNoPlane, "映射关系的plane应为xz或xy");
700
- return new x({
702
+ throw new y(w.RelativeNoPlane, "映射关系的plane应为xz或xy");
703
+ return new p({
701
704
  scale: i,
702
705
  yaw: n,
703
706
  x: a,
@@ -721,8 +724,8 @@ class x {
721
724
  else if (t.plane === "xy")
722
725
  r = -(t.x * n + t.y * o) * e, a = -(t.y * n - t.x * o) * e, h = -t.z * e;
723
726
  else
724
- throw new m(y.RelativeNoPlane, "映射关系的plane应为xz或xy");
725
- return new x({
727
+ throw new y(w.RelativeNoPlane, "映射关系的plane应为xz或xy");
728
+ return new p({
726
729
  scale: e,
727
730
  yaw: i,
728
731
  x: r,
@@ -737,28 +740,37 @@ class x {
737
740
  try {
738
741
  let e = t ? JSON.parse(t) : void 0;
739
742
  const { reference_point: i } = e || {};
740
- return i && (e = { refPoint: i }), e ? new x(e) : void 0;
743
+ return i && (e = { refPoint: i }), e ? new p(e) : void 0;
741
744
  } catch {
742
- throw new m(y.RelativeJsonError, "relativeMap格式化失败");
745
+ throw new y(w.RelativeJsonError, "relativeMap格式化失败");
743
746
  }
744
747
  }
745
748
  static toStringify(t) {
746
749
  return t ? JSON.stringify(t) : void 0;
747
750
  }
748
751
  }
749
- class w {
752
+ class m {
750
753
  /**
751
754
  * 获取坐标系树
752
755
  * @param projectId 项目id
753
756
  * @returns
754
757
  */
755
758
  static async getCoordinateTree(t) {
756
- const e = await Y({ projectId: t });
759
+ const e = await G({ projectId: t });
757
760
  if (e.length) {
758
- const i = w.handleCoordinateList(e);
759
- return w.buildCoordinateTree(i, 0);
761
+ const i = m.handleCoordinateList(e);
762
+ return m.buildCoordinateTree(i, 0);
760
763
  }
761
764
  }
765
+ /**
766
+ * 解析坐标系树
767
+ * @param tree 坐标系树
768
+ * @returns
769
+ */
770
+ static parsedCoordinateTree(t) {
771
+ const e = m.flattenCoordinateTree(t);
772
+ return m.buildCoordinateTree(e, 0);
773
+ }
762
774
  /**
763
775
  * 添加坐标系
764
776
  * @param parent 添加到的父级
@@ -767,17 +779,17 @@ class w {
767
779
  */
768
780
  static async addCoordinate(t, e) {
769
781
  const { projectId: i, id: n } = t, o = e.map((a) => {
770
- const { type: h, modelType: l, relativeMap: c, level: u, ...d } = a, p = c ? JSON.stringify(c) : void 0;
782
+ const { type: h, modelType: l, relativeMap: c, level: u, ...d } = a, g = c ? JSON.stringify(c) : void 0;
771
783
  return {
772
784
  ...d,
773
785
  projectId: i,
774
786
  parentId: n,
775
787
  coordinateType: h,
776
788
  renderType: l,
777
- relativePosition: p
789
+ relativePosition: g
778
790
  };
779
791
  }), r = await O(o);
780
- return w.handleCoordinateList(r);
792
+ return m.handleCoordinateList(r);
781
793
  }
782
794
  /**
783
795
  * 删除坐标系
@@ -787,7 +799,7 @@ class w {
787
799
  */
788
800
  static async removeCoordinate(t, e) {
789
801
  const i = e.map((n) => n.id ?? -1);
790
- return await B(i);
802
+ return await $(i);
791
803
  }
792
804
  /**
793
805
  * 更新坐标系
@@ -797,10 +809,10 @@ class w {
797
809
  */
798
810
  static async updateCoordinate(t, e) {
799
811
  const { projectId: i, id: n } = t, o = e.map((a) => {
800
- const { type: h, relativeMap: l, level: c, ...u } = a, d = x.toStringify(l);
812
+ const { type: h, relativeMap: l, level: c, ...u } = a, d = p.toStringify(l);
801
813
  return { ...u, relativePosition: d, projectId: i, parentId: n };
802
814
  }), r = await O(o);
803
- return w.handleCoordinateList(r);
815
+ return m.handleCoordinateList(r);
804
816
  }
805
817
  /**
806
818
  * 绑定坐标系
@@ -812,8 +824,8 @@ class w {
812
824
  const { projectId: i, id: n } = t, o = e.map((a) => {
813
825
  const { modelId: h } = a;
814
826
  return { modelId: h, parentId: n, projectId: i };
815
- }), r = await G(o);
816
- return w.handleCoordinateList(r);
827
+ }), r = await B(o);
828
+ return m.handleCoordinateList(r);
817
829
  }
818
830
  /**
819
831
  * 处理坐标系数据
@@ -828,8 +840,8 @@ class w {
828
840
  renderType: o,
829
841
  relativePosition: r,
830
842
  ...a
831
- } = e, h = x.toParse(r);
832
- return new Rt({
843
+ } = e, h = p.toParse(r);
844
+ return new A({
833
845
  ...a,
834
846
  type: i,
835
847
  modelType: o,
@@ -838,13 +850,31 @@ class w {
838
850
  });
839
851
  });
840
852
  }
853
+ /**
854
+ * 将树形结构的节点扁平化为一个一维数组
855
+ * @param node 树的节点数组(可以是单个根节点数组或子节点数组)
856
+ * @returns 扁平化后的一维节点数组
857
+ */
858
+ static flattenCoordinateTree(t) {
859
+ const e = Array.isArray(t) ? t : [t], i = [];
860
+ function n(o) {
861
+ for (const r of o) {
862
+ const { level: a, parent: h, relativeMap: l, ...c } = r, u = new A({
863
+ ...c,
864
+ relativeMap: new p(l)
865
+ });
866
+ i.push(u), r.children && r.children.length > 0 && n(r.children);
867
+ }
868
+ }
869
+ return n(e), i;
870
+ }
841
871
  /**
842
872
  * 递归函数将扁平列表转化为树形结构
843
873
  * @param flatNodes // 扁平列表
844
874
  * @param rootId // 根id
845
875
  * @returns
846
876
  */
847
- static buildCoordinateTree(t, e) {
877
+ static buildCoordinateTree(t, e = 0) {
848
878
  const i = /* @__PURE__ */ new Map(), n = [];
849
879
  return t.forEach((o) => {
850
880
  i.set(String(o.id), o);
@@ -857,7 +887,7 @@ class w {
857
887
  const a = i.get(String(o.parentId ?? -1));
858
888
  a && (r.level = (Number(a.level) || 0) + 1, r.parent = a, a.children?.push(r));
859
889
  }
860
- }), n.forEach(w.sortCoordinateTree), n[0];
890
+ }), n.forEach(m.sortCoordinateTree), n[0];
861
891
  }
862
892
  /**
863
893
  * 对子节点进行排序,首先按 status=0 升序,然后按 type=0 升序,最后按 createTime 降序
@@ -871,7 +901,7 @@ class w {
871
901
  return n !== 0 ? n : Number(i.createTime) - Number(e.createTime);
872
902
  } else
873
903
  return e.status === 0 && i.status !== 0 ? -1 : i.status === 0 && e.status !== 0 ? 1 : Number(i.createTime) - Number(e.createTime);
874
- }), t.children.forEach(w.sortCoordinateTree));
904
+ }), t.children.forEach(m.sortCoordinateTree));
875
905
  }
876
906
  /**
877
907
  * 过滤空间坐标系树
@@ -880,12 +910,12 @@ class w {
880
910
  static filterSpaceTree(t) {
881
911
  const e = [];
882
912
  return t.forEach((i) => {
883
- const n = w.filterSpaceTree(i.children);
913
+ const n = m.filterSpaceTree(i.children);
884
914
  i.children = n, i.disabled = i.disabled ?? !1, i.type !== v.Model && e.push(i);
885
915
  }), e;
886
916
  }
887
917
  }
888
- class Rt {
918
+ class A {
889
919
  id = 0;
890
920
  //id
891
921
  type = 0;
@@ -939,17 +969,17 @@ class Rt {
939
969
  //设置参数
940
970
  setOptions(t) {
941
971
  const { relativeMap: e, parent: i, children: n, ...o } = t || {};
942
- e && (this.relativeMap = new x(e)), i && (this.parent = i), n?.length && (this.children = n), Object.assign(this, o);
972
+ e && (this.relativeMap = new p(e)), i && (this.parent = i), n?.length && (this.children = n), Object.assign(this, o);
943
973
  }
944
974
  //添加子节点
945
975
  async addChild(t) {
946
- const e = g(t) ? t : [t], i = await w.addCoordinate(this, e);
976
+ const e = x(t) ? t : [t], i = await m.addCoordinate(this, e);
947
977
  return this.mergeChild(i), i;
948
978
  }
949
979
  //删除子节点
950
980
  async removeChild(t) {
951
- const e = g(t) ? t : [t];
952
- await w.removeCoordinate(this, e);
981
+ const e = x(t) ? t : [t];
982
+ await m.removeCoordinate(this, e);
953
983
  for (const i of e) {
954
984
  const n = this.children.findIndex((o) => o.id === i.id);
955
985
  n !== -1 && this.children.splice(n, 1);
@@ -957,12 +987,12 @@ class Rt {
957
987
  }
958
988
  //更新子节点
959
989
  async updateChild(t) {
960
- const e = g(t) ? t : [t], i = await w.updateCoordinate(this, e);
990
+ const e = x(t) ? t : [t], i = await m.updateCoordinate(this, e);
961
991
  return this.mergeChild(i), i;
962
992
  }
963
993
  //绑定子节点,不建立映射关系
964
994
  async bindChild(t) {
965
- const e = g(t) ? t : [t], i = await w.bindCoordinate(this, e);
995
+ const e = x(t) ? t : [t], i = await m.bindCoordinate(this, e);
966
996
  return this.mergeChild(i), i;
967
997
  }
968
998
  // 合并子节点,没有查询到节点就插入
@@ -985,11 +1015,11 @@ class Rt {
985
1015
  }
986
1016
  //映射到(模型映射到空间,空间映射到空间)
987
1017
  async mappingTo(t) {
988
- await $(t);
1018
+ await _(t);
989
1019
  }
990
1020
  // 来自映射(被映射过的源坐标系关系)
991
1021
  async fromMapping() {
992
- const t = await _({ srcCsId: this.id });
1022
+ const t = await Z({ srcCsId: this.id });
993
1023
  return t[t.length - 1];
994
1024
  }
995
1025
  /**
@@ -1008,8 +1038,8 @@ class Rt {
1008
1038
  * @param mapped 是否被映射
1009
1039
  * @returns
1010
1040
  */
1011
- findChildModel(t = [D.CADModel, D.SkyMapModel], e = !0) {
1012
- const i = g(t) ? t : [t];
1041
+ findChildModel(t = [E.CADModel, E.SkyMapModel], e = !0) {
1042
+ const i = x(t) ? t : [t];
1013
1043
  return i.includes(this.modelType ?? -1) && this.status !== C.Disabled ? this : ([v.Data, v.Model].includes(this.type) ? this.findParentSpace() : this)?.modelList?.filter((a) => i.includes(a.modelType ?? -1) ? e ? !!a.relativeMap : !0 : !1)?.sort((a, h) => Number(a.status) - Number(h.status))?.[0];
1014
1044
  }
1015
1045
  /**
@@ -1018,11 +1048,11 @@ class Rt {
1018
1048
  * @param excludeNodes //排除的坐标系
1019
1049
  * @returns
1020
1050
  */
1021
- findClosestModel(t = D.CADModel, e) {
1051
+ findClosestModel(t = E.CADModel, e) {
1022
1052
  const i = /* @__PURE__ */ new Set();
1023
1053
  for (const l of e ?? [])
1024
1054
  i.add(String(l.id));
1025
- const n = [{ node: this, distance: 0 }], o = g(t) ? t : [t], r = /* @__PURE__ */ new Set();
1055
+ const n = [{ node: this, distance: 0 }], o = x(t) ? t : [t], r = /* @__PURE__ */ new Set();
1026
1056
  let a, h = 1 / 0;
1027
1057
  for (; n.length > 0; ) {
1028
1058
  const l = n.shift();
@@ -1038,14 +1068,14 @@ class Rt {
1038
1068
  r.add(c);
1039
1069
  const d = [];
1040
1070
  if (c.children)
1041
- for (const p of c.children)
1042
- r.has(p) || d.push(p);
1071
+ for (const g of c.children)
1072
+ r.has(g) || d.push(g);
1043
1073
  if (c.parent?.children)
1044
- for (const p of c.parent.children)
1045
- p !== c && !r.has(p) && d.push(p);
1074
+ for (const g of c.parent.children)
1075
+ g !== c && !r.has(g) && d.push(g);
1046
1076
  c.parent && !r.has(c.parent) && d.push(c.parent);
1047
- for (const p of d)
1048
- n.push({ node: p, distance: u + 1 });
1077
+ for (const g of d)
1078
+ n.push({ node: g, distance: u + 1 });
1049
1079
  }
1050
1080
  return a;
1051
1081
  }
@@ -1125,7 +1155,7 @@ class Rt {
1125
1155
  function t(n) {
1126
1156
  return n.children?.length && (n.children = n.children.filter((o) => !!o?.relativeMap && o.status !== C.Disabled).map((o) => t(o))), n;
1127
1157
  }
1128
- const e = H(this.findRoot(!0)), i = t(e);
1158
+ const e = V(this.findRoot(!0)), i = t(e);
1129
1159
  return i.parentId = 0, i.parent = void 0, i;
1130
1160
  }
1131
1161
  /**
@@ -1135,13 +1165,13 @@ class Rt {
1135
1165
  */
1136
1166
  getDestRelativeMap(t) {
1137
1167
  if (this.id === t.id)
1138
- return new x();
1168
+ return new p();
1139
1169
  const e = this.getRelativeMaps(), i = t.getRelativeMaps();
1140
- let n = new x();
1170
+ let n = new p();
1141
1171
  return e?.forEach((o) => {
1142
- n = x.addRelativeMap(n, o);
1172
+ n = p.addRelativeMap(n, o);
1143
1173
  }), i?.reverse()?.forEach((o) => {
1144
- n = x.addRelativeMap(n, x.inverseRelativeMap(o));
1174
+ n = p.addRelativeMap(n, p.inverseRelativeMap(o));
1145
1175
  }), n;
1146
1176
  }
1147
1177
  /**
@@ -1203,7 +1233,7 @@ class Rt {
1203
1233
  } else return !1;
1204
1234
  }
1205
1235
  }
1206
- class Q {
1236
+ class K {
1207
1237
  yaw = 0;
1208
1238
  //偏航角
1209
1239
  pitch = 0;
@@ -1217,14 +1247,14 @@ class Q {
1217
1247
  static toParse(t) {
1218
1248
  if (t) {
1219
1249
  const e = t?.split(",").map((i) => Number(i) || 0);
1220
- return new Q({ yaw: e[0], pitch: e[1], roll: e[2] });
1250
+ return new K({ yaw: e[0], pitch: e[1], roll: e[2] });
1221
1251
  }
1222
1252
  }
1223
1253
  static toStringify(t) {
1224
1254
  return t ? `${t.yaw},${t.pitch},${t.roll}` : "";
1225
1255
  }
1226
1256
  }
1227
- class K {
1257
+ class tt {
1228
1258
  x = 0;
1229
1259
  //x轴
1230
1260
  y = 0;
@@ -1238,7 +1268,7 @@ class K {
1238
1268
  static toParse(t) {
1239
1269
  if (t) {
1240
1270
  const e = t?.split(",").map((i) => Number(i) || 0);
1241
- return new K({ x: e[0], y: e[1], z: e[2] });
1271
+ return new tt({ x: e[0], y: e[1], z: e[2] });
1242
1272
  }
1243
1273
  }
1244
1274
  static toStringify(t) {
@@ -1449,7 +1479,7 @@ class jt {
1449
1479
  this.isBindEvent && (this.canvas.removeEventListener("mousemove", this.onMousemove), this.canvas.removeEventListener("DOMMouseScroll", this.onMousewheel), this.canvas.removeEventListener("mousewheel", this.onMousewheel), this.canvas.removeEventListener("mousedown", this.onMousedown), this.canvas.removeEventListener("mouseout", this.onMouseout), this.canvas.removeEventListener("dblclick", this.onDblclick));
1450
1480
  }
1451
1481
  }
1452
- const A = {};
1482
+ const j = {};
1453
1483
  class Xt {
1454
1484
  type = "image";
1455
1485
  // 修改为更通用的名称
@@ -1464,7 +1494,7 @@ class Xt {
1464
1494
  this.x = t.x || 0, this.y = t.y || 0, this.width = t.width || 0, this.height = t.height || 0, this.src = t.src, this.redraw = t.redraw, this.img = this.loadImage(t.onload);
1465
1495
  }
1466
1496
  loadImage(t) {
1467
- const e = A[this.src];
1497
+ const e = j[this.src];
1468
1498
  if (e)
1469
1499
  return queueMicrotask(() => {
1470
1500
  t?.(e), this.redraw?.();
@@ -1472,7 +1502,7 @@ class Xt {
1472
1502
  {
1473
1503
  const i = new Image();
1474
1504
  return i.crossOrigin = "anonymous", i.src = this.src, i.onload = () => {
1475
- A[this.src] = i, t?.(i), this.redraw?.();
1505
+ j[this.src] = i, t?.(i), this.redraw?.();
1476
1506
  }, i;
1477
1507
  }
1478
1508
  }
@@ -1505,7 +1535,7 @@ class Ft {
1505
1535
  t.beginPath(), t.arc(this.x, this.y, this.r * i, 0, 2 * Math.PI), t.fillStyle = this.backgroundColor, t.fill(), t.font = `${this.r * i}px Microsoft YaHei`, t.textAlign = "center", t.fillStyle = "#FFFFFF", t.fillText(this.text, this.x, this.y + this.r * i / 3), t.restore();
1506
1536
  }
1507
1537
  }
1508
- const j = {};
1538
+ const X = {};
1509
1539
  class Ut {
1510
1540
  id = "";
1511
1541
  type = "issue";
@@ -1526,7 +1556,7 @@ class Ut {
1526
1556
  this.id = t.id, this.x = t.x, this.y = t.y, this.width = t.width || 0, this.height = t.height || 0, this.index = t.index, this.pIndex = t.pIndex, this.parentId = t.parentId, this.count = t.count || 0, this.badgeR = 3, this.src = t.src, this.redraw = t.redraw, this.img = this.loadImage(t.onload);
1527
1557
  }
1528
1558
  loadImage(t) {
1529
- const e = j[this.src];
1559
+ const e = X[this.src];
1530
1560
  if (e)
1531
1561
  return queueMicrotask(() => {
1532
1562
  t?.(e), this.redraw?.();
@@ -1534,7 +1564,7 @@ class Ut {
1534
1564
  {
1535
1565
  const i = new Image();
1536
1566
  return i.src = this.src, i.crossOrigin = "anonymous", i.onload = () => {
1537
- j[this.src] = i, t?.(i), this.redraw?.();
1567
+ X[this.src] = i, t?.(i), this.redraw?.();
1538
1568
  }, i;
1539
1569
  }
1540
1570
  }
@@ -1544,7 +1574,7 @@ class Ut {
1544
1574
  t.save(), t.drawImage(this.img, r, a, n, o), t.beginPath(), this.count > 1 && (t.arc(this.x + n * 0.3, this.y - o * 0.8, h, 0, 2 * Math.PI), t.fillStyle = "red", t.fill(), t.font = `${l}px Microsoft YaHei`, t.textAlign = "center", t.fillStyle = "#FFFFFF", t.fillText(this.count.toString(), this.x + n * 0.3, this.y - o * 0.8 + h / 2)), t.restore();
1545
1575
  }
1546
1576
  }
1547
- const X = {};
1577
+ const F = {};
1548
1578
  class Yt {
1549
1579
  type = "marker";
1550
1580
  x;
@@ -1561,7 +1591,7 @@ class Yt {
1561
1591
  this.x = t.x, this.y = t.y, this.url = t.url, this.width = t.width ?? 0, this.height = t.height ?? 0, this.anchor = t.anchor, this.scale = t.scale ?? 1, t.redraw && (this.redraw = t.redraw), t.beforeDraw && (this.beforeDraw = t.beforeDraw), this.img = this.loadImage(t.onload);
1562
1592
  }
1563
1593
  loadImage(t) {
1564
- const e = X[this.url];
1594
+ const e = F[this.url];
1565
1595
  if (e)
1566
1596
  return queueMicrotask(() => {
1567
1597
  t?.(e), this.redraw?.();
@@ -1569,7 +1599,7 @@ class Yt {
1569
1599
  {
1570
1600
  const i = new Image();
1571
1601
  return i.src = this.url, i.crossOrigin = "anonymous", i.onload = () => {
1572
- X[this.url] = i, t?.(i), this.redraw?.();
1602
+ F[this.url] = i, t?.(i), this.redraw?.();
1573
1603
  }, i;
1574
1604
  }
1575
1605
  }
@@ -1661,10 +1691,10 @@ class Bt {
1661
1691
  }
1662
1692
  }
1663
1693
  export {
1664
- st as APP_SETTING,
1665
- m as AppError,
1666
- y as AppErrorCode,
1667
- et as AppObsType,
1694
+ it as APP_SETTING,
1695
+ y as AppError,
1696
+ w as AppErrorCode,
1697
+ st as AppObsType,
1668
1698
  jt as CanvasElement,
1669
1699
  Xt as CanvasImageElement,
1670
1700
  Ut as CanvasIssueElement,
@@ -1672,21 +1702,21 @@ export {
1672
1702
  Ft as CanvasPointElement,
1673
1703
  Gt as CanvasRadarElement,
1674
1704
  Bt as CanvasRegionElement,
1675
- Rt as Coordinate,
1676
- tt as CoordinateLevel,
1677
- D as CoordinateModelType,
1705
+ A as Coordinate,
1706
+ et as CoordinateLevel,
1707
+ E as CoordinateModelType,
1678
1708
  C as CoordinateStatus,
1679
1709
  v as CoordinateType,
1680
1710
  At as DataHelper,
1681
- w as DataSource,
1682
- N as GeoPoint,
1711
+ m as DataSource,
1712
+ D as GeoPoint,
1683
1713
  f as Point,
1684
- Q as Position,
1685
- x as RelativeMap,
1714
+ K as Position,
1715
+ p as RelativeMap,
1686
1716
  R as RequestContentType,
1687
1717
  M as RequestMethod,
1688
- F as RequestResultCode,
1689
- K as Vector3,
1718
+ U as RequestResultCode,
1719
+ tt as Vector3,
1690
1720
  Lt as api,
1691
1721
  Ot as http,
1692
1722
  kt as utils
package/dist/index.umd.js CHANGED
@@ -1 +1 @@
1
- (function(l,f){typeof exports=="object"&&typeof module<"u"?f(exports):typeof define=="function"&&define.amd?define(["exports"],f):(l=typeof globalThis<"u"?globalThis:l||self,f(l.Shared={}))})(this,(function(l){"use strict";class f extends Error{constructor(t,e,i){super(e),this.code=t,this.message=e,this.details=i,this.name="Apprror",Object.setPrototypeOf(this,f.prototype)}toJSON(){return{code:this.code,message:this.message,details:this.details,timestamp:new Date().toISOString()}}}var C=(s=>(s[s.CADModel=5]="CADModel",s[s.BIMModel=6]="BIMModel",s[s.ForgeModel=7]="ForgeModel",s[s.ThreeDModel=8]="ThreeDModel",s[s.SkyMapModel=9]="SkyMapModel",s[s.ScaleModel=10]="ScaleModel",s))(C||{}),U=(s=>(s[s.Global=0]="Global",s))(U||{}),b=(s=>(s[s.Space=0]="Space",s[s.Model=1]="Model",s[s.Data=2]="Data",s))(b||{}),I=(s=>(s[s.Used=0]="Used",s[s.Enabled=1]="Enabled",s[s.Disabled=2]="Disabled",s))(I||{}),L=(s=>(s[s.SUCCESS=200]="SUCCESS",s[s.ERROR=-1]="ERROR",s[s.TIMEOUT=401]="TIMEOUT",s))(L||{}),g=(s=>(s.GET="GET",s.POST="POST",s))(g||{}),R=(s=>(s.JSON="application/json",s.FORM_URLENCODED="application/x-www-form-urlencoded;charset=UTF-8",s.FORM_DATA="multipart/form-data;charset=UTF-8",s.OCTET_STREAM="'application/octet-stream",s))(R||{}),Y=(s=>(s.Hw="huawei",s.Ali="aliyun",s.Hs="hs",s.Aws="amazon",s.Minio="minio",s))(Y||{}),w=(s=>(s[s.GeoPointNoPlane=9e3]="GeoPointNoPlane",s[s.PointUnmappedGIS=9010]="PointUnmappedGIS",s[s.PointNoXYZ=9011]="PointNoXYZ",s[s.PointNoPlane=9012]="PointNoPlane",s[s.RelativePlaneUnmatch=9020]="RelativePlaneUnmatch",s[s.RelativeNoPlane=9021]="RelativeNoPlane",s[s.RelativeJsonError=9022]="RelativeJsonError",s[s.RequestCodeError=9030]="RequestCodeError",s[s.RequestResultError=9031]="RequestResultError",s[s.RequestUnknownError=9032]="RequestUnknownError",s))(w||{});const G={baseUrl:"https://vsleem.com/api",obsType:"hs",authorizeCode:""},ot={isTransformResponse:!0,joinBaseUrl:!0,withAuthorize:!0},rt={url:"",method:g.GET,headers:{}},B={...G};function at(s){Object.assign(B,s)}async function S(s,t){const e={...ot,...t},i={...rt,...s};try{const n=ht(i,e),{url:o,...r}=n,h=await(await window.fetch(o,r)).json();return ct(h,e)}catch(n){return lt(n)}}function ht(s,t){const{baseUrl:e,authorizeCode:i}=B,{joinBaseUrl:n,withAuthorize:o}=t;let{url:r,method:a,headers:h={},params:u,data:c}=s;n&&e&&(r=`${e}${r}`),a=a?.toUpperCase();const d={...h};if(/^https?:\/\/.+$/i.test(e??"")?d.PlatForm=new URL(e??"").host:d.PlatForm=new URL(window.location.href).host,o&&i&&(d.AuthorizationCode=i),a===g.POST&&!d["Content-Type"]&&(d["Content-Type"]=R.JSON),a===g.GET&&u){const x=new URLSearchParams(u);r+=`?${x.toString()}`}let m;return a===g.POST&&(m=d["Content-Type"]===R.JSON?JSON.stringify(c||{}):c),{url:r,method:a,headers:d,body:m}}function ct(s,t){if(!t.isTransformResponse)return s;if(!s)throw new f(w.RequestResultError,"请求返回的结果错误");const{code:e,data:i,msg:n}=s;if(e===L.SUCCESS)return i;throw new f(w.RequestCodeError,n||"请求返回的Code错误")}function lt(s){throw s instanceof Error?s:new f(w.RequestUnknownError,typeof s=="string"?s:"未知的请求错误")}const ut=Object.freeze(Object.defineProperty({__proto__:null,request:S,setRequestGlobalConfig:at},Symbol.toStringTag,{value:"Module"}));function $(s,t){return S({url:"/project/jssdk/cs/list",method:g.GET,params:s},t)}function _(s,t){return S({url:"/project/jssdk/cs/bind",method:g.POST,data:s},t)}function k(s,t){return S({url:"/project/jssdk/cs/save",method:g.POST,data:s},t)}function q(s,t){return S({url:"/project/jssdk/cs/delete",method:g.POST,data:s},t)}function Z(s,t){return S({url:"/project/jssdk/cs/mapping",method:g.POST,data:s},t)}function J(s,t){return S({url:"/project/jssdk/cs/mapping/query",method:g.GET,params:s},t)}function dt(s,t={isTransformResponse:!1,joinBaseUrl:!1,withAuthorize:!1}){return S({url:s,method:g.GET},t)}const ft=Object.freeze(Object.defineProperty({__proto__:null,bindCoordinate:_,getCoordinateList:$,getImageInfo:dt,getMappingRelation:J,mapingCoordinate:Z,removeCoordinate:q,saveCoordinate:k},Symbol.toStringTag,{value:"Module"})),mt=typeof window<"u",yt=Object.prototype.toString;function T(s,t){return yt.call(s)===`[object ${t}]`}function H(s){return typeof s<"u"}function V(s){return!H(s)}function P(s){return s!==null&&T(s,"Object")}function W(s){return s===null}function wt(s){return T(s,"Date")}function pt(s){return T(s,"String")}function A(s){return typeof s=="function"}function gt(s){return T(s,"Boolean")}function Mt(s){return T(s,"RegExp")}function v(s){return s&&Array.isArray(s)}function vt(s){return typeof window<"u"&&T(s,"Window")}function xt(s){return P(s)&&!!s.tagName}function E(s){return typeof s=="number"||/^\d+(\.\d+)?$/.test(String(s??""))}function bt(s,t){return JSON.stringify(s)===JSON.stringify(t)}function St(s){return V(s)||W(s)}function Tt(s){return T(s,"Promise")&&P(s)&&A(s.then)&&A(s.catch)}function Q(s){return D(s,new WeakMap)}function D(s,t){if(typeof s!="object"||s===null)return s;if(t.has(s))return t.get(s);let e;if(s instanceof Date)return e=new Date(s),t.set(s,e),e;if(s instanceof RegExp)return e=new RegExp(s),t.set(s,e),e;if(s instanceof Map)return e=new Map,t.set(s,e),s.forEach((n,o)=>{e.set(o,D(n,t))}),e;if(s instanceof Set)return e=new Set,t.set(s,e),s.forEach(n=>{e.add(D(n,t))}),e;if(ArrayBuffer.isView(s))return e=new s.constructor(s.buffer.slice(0),s.byteOffset,s.byteLength),t.set(s,e),e;if(s instanceof ArrayBuffer)return e=s.slice(0),t.set(s,e),e;if(Array.isArray(s)){e=[],t.set(s,e);for(let n=0;n<s.length;n++)n in s&&(e[n]=D(s[n],t));return e}e=Object.create(Object.getPrototypeOf(s)),t.set(s,e);for(const n in s)Object.prototype.hasOwnProperty.call(s,n)&&(e[n]=D(s[n],t));const i=Object.getOwnPropertySymbols(s);for(const n of i)Object.prototype.propertyIsEnumerable.call(s,n)&&(e[n]=D(s[n],t));return e}function Pt(s,t,e=!1){let i;const n=function(...o){const r=this,a=e&&!i;i&&clearTimeout(i),i=setTimeout(()=>{i=void 0,e||s.apply(r,o)},t),a&&s.apply(r,o)};return n.cancel=()=>{i&&clearTimeout(i),i=void 0},n}function Et(s,t,e=!1){let i,n;const o=function(...r){const a=this;n?(clearTimeout(i),i=setTimeout(()=>{Date.now()-n>=t&&(s.apply(a,r),n=Date.now())},t-(Date.now()-n))):(e&&s.apply(a,r),n=Date.now())};return o.cancel=()=>{clearTimeout(i),i=void 0,n=void 0},o}function j(s,...t){if(!t.length)return s;const e=t.shift();return e===void 0?s:(O(s)&&O(e)&&Object.keys(e).forEach(i=>{const n=s[i],o=e[i];Array.isArray(n)&&Array.isArray(o)?s[i]=[...n,...o]:O(n)&&O(o)?s[i]=j({...n},o):o!==void 0&&(s[i]=o)}),j(s,...t))}function O(s){return s!==null&&typeof s=="object"&&!Array.isArray(s)}function K(s,...t){if(!t.length)return s;for(const e of t)e!=null&&typeof e=="object"&&Object.keys(e).forEach(i=>{const n=e[i],o=s[i];n!==null&&typeof n=="object"&&!Array.isArray(n)?((!o||typeof o!="object")&&(s[i]={}),K(s[i],n)):s[i]=n});return s}function tt(s,t){const e={};if(P(s)&&!v(s)){for(const i in s)if(Object.prototype.hasOwnProperty.call(s,i)){const n=s[i],o=P(t)&&!v(t)?t[i]:void 0;if(!(i in(t||{})))e[i]=n;else if(v(n)&&v(o))JSON.stringify(n)!==JSON.stringify(o)&&(e[i]=n);else if(P(n)&&P(o)){const r=tt(n,o);r&&Object.keys(r).length>0&&(e[i]=r)}else n!==o&&(e[i]=n)}}if(P(t)&&v(t))for(const i in t)Object.prototype.hasOwnProperty.call(t,i)&&!(i in(s||{}))&&(e[i]=void 0);return e}function Ct(s,t={}){return new Promise((e,i)=>{const n=N(s);if(Dt(n)){e(!0);return}const o=document.createElement("script");o.src=s,Object.entries(t).forEach(([r,a])=>{a!==!1&&o.setAttribute(r,a===!0?"":String(a))}),o.onload=()=>{e(!0)},o.onerror=()=>{document.head.removeChild(o),i(new Error(`Failed to load script: ${s}`))},document.head.appendChild(o)})}function Dt(s){const t=N(s);return Array.from(document.scripts).some(e=>N(e.src)===t)}function Nt(s){return new Promise((t,e)=>{const i=N(s);if(zt(i)){t(!0);return}const n=document.createElement("link");n.rel="stylesheet",n.type="text/css",n.href=s,n.onload=()=>{t(!0)},n.onerror=()=>{document.head.removeChild(n),e(new Error(`Failed to load link: ${s}`))},document.head.appendChild(n)})}function zt(s){const t=N(s);return Array.from(document.links).some(e=>N(e.href)===t)}function N(s){try{const t=new URL(s,window.location.href);return`${t.origin}${t.pathname}`}catch{return s}}function It(s,t,e,i){const n=Math.min(s/e,t/i),o=e*n,r=i*n;return{scale:n,x:(s-o)/2,y:(t-r)/2,sw:o,sh:r}}function Rt(s,t,e){return{x:s*e.scale+e.x,y:t*e.scale+e.y}}function Ot(s,t,e){return{x:(s-e.x)/e.scale,y:(t-e.y)/e.scale}}function Lt(s){console.warn(`[warn]:${s}`)}function kt(s){throw new Error(`[error]:${s}`)}const At=Object.freeze(Object.defineProperty({__proto__:null,cloneDeep:Q,debounce:Pt,deepMerge:j,deepMergeProps:K,error:kt,getDiffProps:tt,getImageTransform:It,inBrowser:mt,is:T,isArray:v,isBoolean:gt,isDate:wt,isDef:H,isElement:xt,isFunction:A,isNull:W,isNullOrUnDef:St,isNumber:E,isObject:P,isPromise:Tt,isRegExp:Mt,isSameValue:bt,isString:pt,isUnDef:V,isWindow:vt,loadCss:Nt,loadScript:Ct,throttle:Et,toCanvasCoord:Rt,toModelCoord:Ot,warn:Lt},Symbol.toStringTag,{value:"Module"}));class y{x=0;y=0;z=0;lat=0;lon=0;alt=0;yaw=0;pitch=0;roll=0;hasXYZ=!1;hasGeo=!1;hasAngle=!1;plane="xy";constructor(t){const{x:e,y:i,z:n,lat:o,lon:r,alt:a,yaw:h,pitch:u,roll:c,plane:d="xy"}=t||{};E(e)&&E(i)&&Number(e)!==0&&Number(i)!==0&&(this.x=Number(e)||0,this.y=Number(i)||0,this.z=Number(n)||0,this.plane=d,this.hasXYZ=!0),E(o)&&E(r)&&Number(o)!==0&&Number(r)!==0&&(this.lat=Number(o)||0,this.lon=Number(r)||0,this.alt=Number(a)||0,this.hasGeo=!0),(E(h)||E(u)||E(c))&&(this.yaw=Number(h)||0,this.pitch=Number(u)||0,this.roll=Number(c)||0,this.hasAngle=!0)}static dist(t,e){return Math.hypot(t.x-e.x,t.y-e.y,t.z-e.z)}static distXZ(t,e){return Math.hypot(t.x-e.x,t.z-e.z)}static distXY(t,e){return Math.hypot(t.x-e.x,t.y-e.y)}static toRadians(t){return(Number(t)||0)*Math.PI/180}static toDegrees(t){return(Number(t)||0)*180/Math.PI}static angleXZ(t,e,i){const n={x:t.x-e.x,z:t.z-e.z},o={x:i.x-e.x,z:i.z-e.z},r=n.x*o.x+n.z*o.z,a=Math.sqrt(n.x**2+n.z**2),h=Math.sqrt(o.x**2+o.z**2),u=Math.max(-1,Math.min(1,r/(a*h))),d=Math.acos(u)*180/Math.PI;return Math.min(d,360-d)}static toParse(t){if(t){const e=t?.split(",").map(i=>Number(i)||0);return new y({x:e[0],y:e[1],z:e[2]})}}static toStringify(t){return t?`${t.x},${t.y},${t.z}`:""}projection(t,e,i){try{if(e?.id===i?.id)return new y(this);if(e?.modelType===C.SkyMapModel){const{refPoint:n}=e?.relativeMap||{};if(this?.hasXYZ)return this.project(t);if(this.hasGeo&&n){const o=z.LLHToXYZ(this,n);return this.x=o.x,this.y=o.y,this.z=o.z,this.hasXYZ=!0,this.project(t)}throw new f(w.PointUnmappedGIS,"没有完成GIS与其他空间的映射")}if(i?.modelType===C.SkyMapModel){const{refPoint:n}=i?.relativeMap||{};if(this?.hasGeo)return new y(this);const o=this.project(t);if(o?.hasXYZ&&n){const r=z.XYZToLLH(o,n);return o.lat=r.lat,o.lon=r.lon,o.alt=r.alt,o.hasGeo=!0,o}throw new f(w.PointUnmappedGIS,"没有完成GIS与其他空间的映射")}return this.project(t)}catch{return}}project(t){if(!this.hasXYZ)throw new f(w.PointNoXYZ,"点没有xxz坐标信息");if(this.plane==="xz")return this.projectXZ(t);if(this.plane==="xy")return this.projectXY(t);throw new f(w.PointNoPlane,"点的plane应为xz或xy")}projectXZ(t){const e=new y(this);e.x*=t.scale,e.y*=t.scale,e.z*=t.scale,e.yaw!==void 0&&(e.yaw+=t.yaw);const i=e.x*Math.cos(t.yaw)-e.z*Math.sin(t.yaw),n=e.x*Math.sin(t.yaw)+e.z*Math.cos(t.yaw);return e.x=i+t.x,e.y+=t.y,e.z=n+t.z,e}projectXY(t){const e=new y(this);e.x*=t.scale,e.y*=t.scale,e.z*=t.scale,e.yaw!==void 0&&(e.yaw+=t.yaw);const i=e.x*Math.cos(t.yaw)-e.y*Math.sin(t.yaw),n=e.x*Math.sin(t.yaw)+e.y*Math.cos(t.yaw);return e.x=i+t.x,e.y=n+t.y,e.z+=t.z,e}}class z{lat=0;lon=0;alt=0;constructor(t){const{lat:e=0,lon:i=0,alt:n=0}=t||{};this.lat=e,this.lon=i,this.alt=n}static XYZToLLH(t,e){const n=.0033528106647474805,o=n*(2-n),r=y.toRadians(e.lat),a=6378137/Math.sqrt(1-o*Math.sin(r)**2)+e.alt;let h,u,c;if(t.plane==="xz"){const d=t.x/1e3/(a*Math.cos(r)),m=t.z/1e3/a;h=e.lon+y.toDegrees(d),u=e.lat-y.toDegrees(m),c=e.alt+t.y/1e3}else if(t.plane==="xy"){const d=t.x/1e3/(a*Math.cos(r)),m=t.y/1e3/a;h=e.lon+y.toDegrees(d),u=e.lat-y.toDegrees(m),c=e.alt+t.z/1e3}else throw new f(w.GeoPointNoPlane,"点的plane应为xz或xy");return new z({lat:u,lon:h,alt:c})}static LLHToXYZ(t,e){const n=.0033528106647474805,o=n*(2-n),r=y.toRadians(e.lat),a=6378137/Math.sqrt(1-o*Math.sin(r)**2)+e.alt,h=y.toRadians(t.lon-e.lon),u=y.toRadians(e.lat-t.lat),c=a*h*Math.cos(r),d=a*u;if(t.plane==="xz")return new y({x:c*1e3,y:(t.alt-e.alt)*1e3,z:d*1e3,plane:"xz"});if(t.plane==="xy")return new y({x:c*1e3,y:d*1e3,z:(t.alt-e.alt)*1e3,plane:"xy"});throw new f(w.GeoPointNoPlane,"点的plane应为xz或xy")}}class M{scale=1;yaw=0;x=0;y=0;z=0;start=0;end=-1;plane="xy";refPoint;constructor(t){const{refPoint:e,...i}=t||{};e&&(this.refPoint=new z(e)),Object.assign(this,i)}static addRelativeMap(t,e){if(t.plane!==e.plane)throw new f(w.RelativePlaneUnmatch,"两个映射关系的plane应该相同");const i=t.scale*e.scale,n=t.yaw+e.yaw,o=Math.cos(e.yaw),r=Math.sin(e.yaw);let a=0,h=0,u=0;if(t.plane==="xz"){const c=t.x*o-t.z*r,d=t.y,m=t.x*r+t.z*o;a=e.x+c*e.scale,h=e.y+d*e.scale,u=e.z+m*e.scale}else if(t.plane==="xy"){const c=t.x*o-t.y*r,d=t.x*r+t.y*o,m=t.z;a=e.x+c*e.scale,h=e.y+d*e.scale,u=e.z+m*e.scale}else throw new f(w.RelativeNoPlane,"映射关系的plane应为xz或xy");return new M({scale:i,yaw:n,x:a,y:h,z:u,start:t.start,end:t.end,plane:t.plane})}static inverseRelativeMap(t){const e=1/t.scale,i=-t.yaw,n=Math.cos(-i),o=Math.sin(-i);let r=0,a=0,h=0;if(t.plane==="xz")r=-(t.x*n+t.z*o)*e,a=-t.y*e,h=-(t.z*n-t.x*o)*e;else if(t.plane==="xy")r=-(t.x*n+t.y*o)*e,a=-(t.y*n-t.x*o)*e,h=-t.z*e;else throw new f(w.RelativeNoPlane,"映射关系的plane应为xz或xy");return new M({scale:e,yaw:i,x:r,y:a,z:h,start:t.start,end:t.end,plane:t.plane})}static toParse(t){try{let e=t?JSON.parse(t):void 0;const{reference_point:i}=e||{};return i&&(e={refPoint:i}),e?new M(e):void 0}catch{throw new f(w.RelativeJsonError,"relativeMap格式化失败")}}static toStringify(t){return t?JSON.stringify(t):void 0}}class p{static async getCoordinateTree(t){const e=await $({projectId:t});if(e.length){const i=p.handleCoordinateList(e);return p.buildCoordinateTree(i,0)}}static async addCoordinate(t,e){const{projectId:i,id:n}=t,o=e.map(a=>{const{type:h,modelType:u,relativeMap:c,level:d,...m}=a,x=c?JSON.stringify(c):void 0;return{...m,projectId:i,parentId:n,coordinateType:h,renderType:u,relativePosition:x}}),r=await k(o);return p.handleCoordinateList(r)}static async removeCoordinate(t,e){const i=e.map(n=>n.id??-1);return await q(i)}static async updateCoordinate(t,e){const{projectId:i,id:n}=t,o=e.map(a=>{const{type:h,relativeMap:u,level:c,...d}=a,m=M.toStringify(u);return{...d,relativePosition:m,projectId:i,parentId:n}}),r=await k(o);return p.handleCoordinateList(r)}static async bindCoordinate(t,e){const{projectId:i,id:n}=t,o=e.map(a=>{const{modelId:h}=a;return{modelId:h,parentId:n,projectId:i}}),r=await _(o);return p.handleCoordinateList(r)}static handleCoordinateList(t){return t?.map(e=>{const{coordinateType:i,modelKey:n,renderType:o,relativePosition:r,...a}=e,h=M.toParse(r);return new et({...a,type:i,modelType:o,modelValue:n,relativeMap:h})})}static buildCoordinateTree(t,e){const i=new Map,n=[];return t.forEach(o=>{i.set(String(o.id),o)}),t.forEach(o=>{const r=i.get(String(o.id));if(r)if(o.parentId===e)r.level=0,n.push(r);else{const a=i.get(String(o.parentId??-1));a&&(r.level=(Number(a.level)||0)+1,r.parent=a,a.children?.push(r))}}),n.forEach(p.sortCoordinateTree),n[0]}static sortCoordinateTree(t){t.children&&(t.children.sort((e,i)=>{if(e.type===b.Space){const n=Number(i?.relativeMap?.z)-Number(e?.relativeMap?.z);return n!==0?n:Number(i.createTime)-Number(e.createTime)}else return e.status===0&&i.status!==0?-1:i.status===0&&e.status!==0?1:Number(i.createTime)-Number(e.createTime)}),t.children.forEach(p.sortCoordinateTree))}static filterSpaceTree(t){const e=[];return t.forEach(i=>{const n=p.filterSpaceTree(i.children);i.children=n,i.disabled=i.disabled??!1,i.type!==b.Model&&e.push(i)}),e}}class et{id=0;type=0;children=[];level;relativeMap;no;name;shortName;status;modelId;modelType;modelValue;projectId;parentId;parent;groupUuid;z;createTime;disabled;constructor(t){this.setOptions(t)}get spaceList(){return this.children.filter(t=>t.type===b.Space)}get modelList(){return this.children.filter(t=>t.type===b.Model)}get fullName(){const t=this.name?`(${this.name})`:"";return this.shortName?`${this.shortName}${t}`:this.name??""}setOptions(t){const{relativeMap:e,parent:i,children:n,...o}=t||{};e&&(this.relativeMap=new M(e)),i&&(this.parent=i),n?.length&&(this.children=n),Object.assign(this,o)}async addChild(t){const e=v(t)?t:[t],i=await p.addCoordinate(this,e);return this.mergeChild(i),i}async removeChild(t){const e=v(t)?t:[t];await p.removeCoordinate(this,e);for(const i of e){const n=this.children.findIndex(o=>o.id===i.id);n!==-1&&this.children.splice(n,1)}}async updateChild(t){const e=v(t)?t:[t],i=await p.updateCoordinate(this,e);return this.mergeChild(i),i}async bindChild(t){const e=v(t)?t:[t],i=await p.bindCoordinate(this,e);return this.mergeChild(i),i}async mergeChild(t){t?.length&&t.forEach(e=>{const i=this.children.find(n=>n.id===e.id);if(i){const{relativeMap:n,no:o,name:r,shortName:a,status:h,modelId:u,modelValue:c}=e;Object.assign(i,{relativeMap:n,no:o,name:r,shortName:a,status:h,modelId:u,modelValue:c})}else this.id===e.parentId&&(e.parent=this,this.children.unshift(e))})}async mappingTo(t){await Z(t)}async fromMapping(){const t=await J({srcCsId:this.id});return t[t.length-1]}findRoot(t=!1){let e=this;for(;e.parent&&!(t&&!e.relativeMap);)e=e.parent;return e}findChildModel(t=[C.CADModel,C.SkyMapModel],e=!0){const i=v(t)?t:[t];return i.includes(this.modelType??-1)&&this.status!==I.Disabled?this:([b.Data,b.Model].includes(this.type)?this.findParentSpace():this)?.modelList?.filter(a=>i.includes(a.modelType??-1)?e?!!a.relativeMap:!0:!1)?.sort((a,h)=>Number(a.status)-Number(h.status))?.[0]}findClosestModel(t=C.CADModel,e){const i=new Set;for(const u of e??[])i.add(String(u.id));const n=[{node:this,distance:0}],o=v(t)?t:[t],r=new Set;let a,h=1/0;for(;n.length>0;){const u=n.shift();if(!u)break;const{node:c,distance:d}=u;if(i.has(String(c.id)))continue;if(o.includes(c.modelType??-1)){if(d<h&&(a=c,h=d,d<=1))break;continue}r.add(c);const m=[];if(c.children)for(const x of c.children)r.has(x)||m.push(x);if(c.parent?.children)for(const x of c.parent.children)x!==c&&!r.has(x)&&m.push(x);c.parent&&!r.has(c.parent)&&m.push(c.parent);for(const x of m)n.push({node:x,distance:d+1})}return a}findParentSpace(){let t=this;for(;t&&t.type!==b.Space;)t=t.parent;return t}findParentSpaceNames(t=2){const e=[];let i=this;for(;i&&t>0;)i.type===b.Space&&(e.unshift(i.fullName),t--),i=i.parent;return e}findCsGroup(){const{groupUuid:t,parent:e}=this;return t?e?.children?.filter(i=>i.groupUuid===t)||[]:[this]}findCsByLevel(t){if(this.level===t)return this;if(this.children.length)for(const e of this.children){const i=e.findCsByLevel(t);if(i)return i}}findCsById(t){if(t){if(this.id===t)return this;for(const e of this.children){const i=e.findCsById(t);if(i)return i}}}getCsRoutes(t=!1){let e=this;const i=[e];for(;e?.parent&&!(t&&!e.relativeMap);)e=e.parent,e&&i.push(e);return i}getMappedCsTree(){function t(n){return n.children?.length&&(n.children=n.children.filter(o=>!!o?.relativeMap&&o.status!==I.Disabled).map(o=>t(o))),n}const e=Q(this.findRoot(!0)),i=t(e);return i.parentId=0,i.parent=void 0,i}getDestRelativeMap(t){if(this.id===t.id)return new M;const e=this.getRelativeMaps(),i=t.getRelativeMaps();let n=new M;return e?.forEach(o=>{n=M.addRelativeMap(n,o)}),i?.reverse()?.forEach(o=>{n=M.addRelativeMap(n,M.inverseRelativeMap(o))}),n}getRelativeMaps(){let t=this;const e=[];for(;t?.parent&&t.relativeMap;)e.push(t.relativeMap),t=t.parent;return e}static filterCoordinateTree(t,e=[],i=[]){if(i.includes(t.id)||e.includes(t.type))return;const n=t.children?.map(o=>this.filterCoordinateTree(o,e,i)).filter(o=>o!==void 0);return{...t,children:n}}static getCommonCoordinate(t){let e;const i=t.map(n=>n.getCsRoutes(!0).filter(r=>r.id&&r.type===b.Space));for(;this.checkSameCoordinate(i);){const o=i.shift();o?.length&&(e=o[0])}return e}static checkSameCoordinate(t){if(t.length){if(t.length===1)return!0;for(let e=0;e<t.length-1;e++){const i=t[e];if(!i?.length)return!1;const n=t[e+1];if(!n?.length||i[0].id!==n[0].id)return!1}return!0}else return!1}}class X{yaw=0;pitch=0;roll=0;constructor(t){const{yaw:e=0,pitch:i=0,roll:n=0}=t||{};this.yaw=Number(e)||0,this.pitch=Number(i)||0,this.roll=Number(n)||0}static toParse(t){if(t){const e=t?.split(",").map(i=>Number(i)||0);return new X({yaw:e[0],pitch:e[1],roll:e[2]})}}static toStringify(t){return t?`${t.yaw},${t.pitch},${t.roll}`:""}}class F{x=0;y=0;z=0;constructor(t){const{x:e=0,y:i=0,z:n=0}=t||{};this.x=Number(e)||0,this.y=Number(i)||0,this.z=Number(n)||0}static toParse(t){if(t){const e=t?.split(",").map(i=>Number(i)||0);return new F({x:e[0],y:e[1],z:e[2]})}}static toStringify(t){return t?`${t.x},${t.y},${t.z}`:""}}class jt{static srcPointToDstPoint(t,e,i){if(!e||!i||!t?.length)return[];const n=e?.getDestRelativeMap(i);if(!n)return[];const o=[];return t.forEach(r=>{const a=r.projection(n,e,i);a&&o.push(a)}),o}}class Xt{canvas;ctx;options;offset={x:0,y:0};curOffset={x:0,y:0};mousePosition={x:-1,y:-1};MAX_SCALE=60;MIN_SCALE=1;STEP_SCALE=.5;scale=1;preScale=1;width=0;height=0;x=0;y=0;timeout=0;lastTouch;initialDistance=0;touchMode=0;isMouseover=!1;isBindEvent=!0;isDrawAssist=!1;customDrawAssist;isMoveRedrawing;afterDraw;screenPos={screenX:0,screenY:0};constructor(t){const{container:e,width:i=300,height:n=300,isBindEvent:o=!0,isDrawAssist:r=!1,isMoveRedrawing:a,customDrawAssist:h,afterDraw:u,...c}=t;this.canvas=e,this.ctx=this.canvas.getContext("2d"),this.width=i,this.height=n,this.canvas.width=i,this.canvas.height=n,this.isBindEvent=o,this.isDrawAssist=r,this.customDrawAssist=h,this.isMoveRedrawing=a??r,this.options=c,this.onMousedown=this.onMousedown.bind(this),this.onMousemove=this.onMousemove.bind(this),this.onMousemoveTemp=this.onMousemoveTemp.bind(this),this.onMouseup=this.onMouseup.bind(this),this.onMousewheel=this.onMousewheel.bind(this),this.onDblclick=this.onDblclick.bind(this),this.onTouchstart=this.onTouchstart.bind(this),this.onTouchmove=this.onTouchmove.bind(this),this.onTouchend=this.onTouchend.bind(this),this.onMouseout=this.onMouseout.bind(this),this.afterDraw=this.afterDraw,o&&(this.canvas.addEventListener("DOMMouseScroll",this.onMousewheel),this.canvas.addEventListener("mousewheel",this.onMousewheel),this.canvas.addEventListener("mousedown",this.onMousedown),this.canvas.addEventListener("mousemove",this.onMousemove),this.canvas.addEventListener("mouseout",this.onMouseout),this.canvas.addEventListener("dblclick",this.onDblclick),this.canvas.addEventListener("touchstart",this.onTouchstart))}onClick(t){const{screenX:e,screenY:i}=t;this.timeout&&clearTimeout(this.timeout);const n=this.getPos(t);this.x=n.x,this.y=n.y,this.screenPos={screenX:e,screenY:i},this.options.onClick&&(this.timeout=setTimeout(()=>{const o=parseFloat(((this.x-this.offset.x)/this.scale).toFixed(2)),r=parseFloat(((this.y-this.offset.y)/this.scale).toFixed(2));this.options.onClick(o,r)},200))}onMouseout(t){this.isMouseover=!1,this.draw()}onTouchstart(t){t.preventDefault(),t.touches.length==1?this.touchMode===0&&(this.touchMode=1):t.touches.length>=2&&this.touchMode<2&&(this.touchMode=2),this.touchMode==1&&t.touches.length==1?this.onTouch(t.touches[0]):this.touchMode==2&&t.touches.length==2&&this.onBothTouchstart(t),this.canvas.addEventListener("touchmove",this.onTouchmove),this.canvas.addEventListener("touchend",this.onTouchend)}onMousedown(t){this.onClick(t),this.canvas.addEventListener("mousemove",this.onMousemoveTemp),this.canvas.addEventListener("mouseup",this.onMouseup)}onBothTouchstart(t){t.preventDefault();const e={x:t.touches[0].clientX,y:t.touches[0].clientY},i={x:t.touches[1].clientX,y:t.touches[1].clientY},n=this.getPos({clientX:(e.x+i.x)/2,clientY:(e.y+i.y)/2});this.x=n.x,this.y=n.y,this.curOffset.x=this.offset.x,this.curOffset.y=this.offset.y,this.initialDistance=Math.sqrt(Math.pow(i.x-e.x,2)+Math.pow(i.y-e.y,2))}onTouchmove(t){t.preventDefault(),this.touchMode==1&&t.touches.length==1?(this.onMousemoveTemp(t.touches[0]),this.onMousemove(t.touches[0])):this.touchMode==2&&t.touches.length==2&&this.onBothTouchmove(t)}onMousemove(t){const e=this.getPos(t);this.mousePosition.x=e.x,this.mousePosition.y=e.y,this.isMouseover=!0,this.isMoveRedrawing&&this.draw()}onMousemoveTemp(t){const{screenX:e,screenY:i}=this.screenPos;(Math.abs(e-t.screenX)>10||Math.abs(i-t.screenY)>10)&&(this.timeout&&clearTimeout(this.timeout),this.offset.x=this.curOffset.x+(this.mousePosition.x-this.x),this.offset.y=this.curOffset.y+(this.mousePosition.y-this.y),!this.isMoveRedrawing&&this.draw())}onBothTouchmove(t){if(t.preventDefault(),this.initialDistance){const e={x:t.touches[0].clientX,y:t.touches[0].clientY},i={x:t.touches[1].clientX,y:t.touches[1].clientY},n=Math.sqrt(Math.pow(i.x-e.x,2)+Math.pow(i.y-e.y,2));if(this.scale+=(n-this.initialDistance)/30*this.STEP_SCALE,this.initialDistance=n,this.scale>this.MAX_SCALE){this.scale=this.MAX_SCALE;return}if(this.scale<this.MIN_SCALE){this.scale=this.MIN_SCALE;return}this.zoom()}}onTouchend(){this.touchMode=0,this.onMouseup()}onMouseup(){this.curOffset.x=this.offset.x,this.curOffset.y=this.offset.y,this.canvas.removeEventListener("mousemove",this.onMousemoveTemp),this.canvas.removeEventListener("mouseup",this.onMouseup),this.canvas.removeEventListener("touchmove",this.onTouchmove),this.canvas.removeEventListener("touchend",this.onTouchend)}onMousewheel(t){this.timeout&&clearTimeout(this.timeout),t.preventDefault();const e=this.getPos(t);this.x=e.x,this.y=e.y;const i=t.wheelDelta>0||t.detail<0?this.STEP_SCALE:-this.STEP_SCALE;if(this.scale=parseFloat((this.scale+i).toFixed(2)),this.scale>this.MAX_SCALE){this.scale=this.MAX_SCALE;return}if(this.scale<this.MIN_SCALE){this.scale=this.MIN_SCALE;return}this.zoom()}onTouch(t){const e=Date.now(),{lastTouchTime:i=0,lastTouchX:n=0,lastTouchY:o=0}=this.lastTouch||{};e-i<300&&Math.abs(t.clientX-n)<30&&Math.abs(t.clientY-o)<30?(this.onDblclick(t),this.lastTouch={lastTouchTime:0,lastTouchX:0,lastTouchY:0}):(this.onClick(t),this.lastTouch={lastTouchTime:e,lastTouchX:t.clientX,lastTouchY:t.clientY})}onDblclick(t){this.timeout&&clearTimeout(this.timeout),this.reset(),this.draw()}zoom(){this.offset.x=this.x-(this.x-this.offset.x)*this.scale/this.preScale,this.offset.y=this.y-(this.y-this.offset.y)*this.scale/this.preScale,this.draw(),this.preScale=this.scale,this.curOffset.x=this.offset.x,this.curOffset.y=this.offset.y}reset(t){const{width:e=this.width,height:i=this.height,scale:n=1,preScale:o=1,offset:r={x:0,y:0},curOffset:a={x:0,y:0}}=t||{};this.width=e,this.height=i,this.canvas.width=e,this.canvas.height=i,this.scale=n,this.preScale=o,this.offset=r,this.curOffset=a}drawAssist(){const t=this.ctx;t.save(),t.beginPath(),t.lineWidth=1,t.strokeStyle="#C656D5",t.moveTo(0,this.mousePosition.y),t.lineTo(this.width,this.mousePosition.y),t.closePath(),t.stroke(),t.beginPath(),t.moveTo(this.mousePosition.x,0),t.lineTo(this.mousePosition.x,this.height),t.closePath(),t.stroke(),t.restore()}draw(){this.ctx.clearRect(0,0,this.width,this.height),this.ctx.save(),this.ctx.translate(this.offset.x,this.offset.y),this.ctx.scale(this.scale,this.scale),this.options.draw(this.ctx,this),this.ctx.restore(),this.isDrawAssist&&this.isMouseover&&(this.customDrawAssist?this.customDrawAssist():this.drawAssist()),this.afterDraw?.(this.ctx,this)}getPos(t){const e=this.canvas.getBoundingClientRect();let i=parseFloat((t.clientX-e.left).toFixed(2)),n=parseFloat((t.clientY-e.top).toFixed(2));return i=i<0?0:i,n=n<0?0:n,{x:i,y:n}}unBindEvent(){this.isBindEvent&&(this.canvas.removeEventListener("mousemove",this.onMousemove),this.canvas.removeEventListener("DOMMouseScroll",this.onMousewheel),this.canvas.removeEventListener("mousewheel",this.onMousewheel),this.canvas.removeEventListener("mousedown",this.onMousedown),this.canvas.removeEventListener("mouseout",this.onMouseout),this.canvas.removeEventListener("dblclick",this.onDblclick))}}const st={};class Ft{type="image";x;y;width;height;img;src;redraw;constructor(t){this.x=t.x||0,this.y=t.y||0,this.width=t.width||0,this.height=t.height||0,this.src=t.src,this.redraw=t.redraw,this.img=this.loadImage(t.onload)}loadImage(t){const e=st[this.src];if(e)return queueMicrotask(()=>{t?.(e),this.redraw?.()}),e;{const i=new Image;return i.crossOrigin="anonymous",i.src=this.src,i.onload=()=>{st[this.src]=i,t?.(i),this.redraw?.()},i}}draw(t){try{if(!this.img.complete)return;t.save(),t.drawImage(this.img,this.x,this.y,this.width,this.height),t.restore()}catch(e){console.error(e)}}}class Ut{id="";type="point";x;y;r;text;backgroundColor;index;pIndex;parentId;constructor(t){this.id=t.id,this.x=t.x,this.y=t.y,this.r=t.r||15,this.text=t.text||"",this.index=t.index,this.pIndex=t.pIndex,this.parentId=t.parentId,this.backgroundColor=t.backgroundColor||"rgba(91, 179, 111, 0.8)"}draw(t,e){t.save();const i=1/e.scale;t.beginPath(),t.arc(this.x,this.y,this.r*i,0,2*Math.PI),t.fillStyle=this.backgroundColor,t.fill(),t.font=`${this.r*i}px Microsoft YaHei`,t.textAlign="center",t.fillStyle="#FFFFFF",t.fillText(this.text,this.x,this.y+this.r*i/3),t.restore()}}const it={};class Yt{id="";type="issue";x;y;width;height;src;img;index;pIndex;parentId;count;badgeR;redraw;constructor(t){this.id=t.id,this.x=t.x,this.y=t.y,this.width=t.width||0,this.height=t.height||0,this.index=t.index,this.pIndex=t.pIndex,this.parentId=t.parentId,this.count=t.count||0,this.badgeR=3,this.src=t.src,this.redraw=t.redraw,this.img=this.loadImage(t.onload)}loadImage(t){const e=it[this.src];if(e)return queueMicrotask(()=>{t?.(e),this.redraw?.()}),e;{const i=new Image;return i.src=this.src,i.crossOrigin="anonymous",i.onload=()=>{it[this.src]=i,t?.(i),this.redraw?.()},i}}draw(t,e){if(!this.img.complete)return;const i=1/e.scale,n=this.width*i,o=this.height*i,r=this.x-n/2,a=this.y-o,h=this.badgeR*i,u=h*1.5;t.save(),t.drawImage(this.img,r,a,n,o),t.beginPath(),this.count>1&&(t.arc(this.x+n*.3,this.y-o*.8,h,0,2*Math.PI),t.fillStyle="red",t.fill(),t.font=`${u}px Microsoft YaHei`,t.textAlign="center",t.fillStyle="#FFFFFF",t.fillText(this.count.toString(),this.x+n*.3,this.y-o*.8+h/2)),t.restore()}}const nt={};class Gt{type="marker";x;y;url;width;height;anchor;img;scale;redraw;beforeDraw;constructor(t){this.x=t.x,this.y=t.y,this.url=t.url,this.width=t.width??0,this.height=t.height??0,this.anchor=t.anchor,this.scale=t.scale??1,t.redraw&&(this.redraw=t.redraw),t.beforeDraw&&(this.beforeDraw=t.beforeDraw),this.img=this.loadImage(t.onload)}loadImage(t){const e=nt[this.url];if(e)return queueMicrotask(()=>{t?.(e),this.redraw?.()}),e;{const i=new Image;return i.src=this.url,i.crossOrigin="anonymous",i.onload=()=>{nt[this.url]=i,t?.(i),this.redraw?.()},i}}calculateIconPosition(){const t=this.anchor?.x??this.width/2,e=this.anchor?.y??this.height/2;return{iconStartX:this.x-t*this.scale,iconStartY:this.y-e*this.scale}}draw(t,e){if(this.beforeDraw?.(t,e),!this.img?.complete)return;const{iconStartX:i,iconStartY:n}=this.calculateIconPosition();t.save();try{t.drawImage(this.img,i,n,this.width*this.scale,this.height*this.scale)}catch(o){console.error("绘制标记时出错:",o)}finally{t.restore()}}}class Bt{type="radar";x;y;r;angle;text;hFov=90;beforeDraw;constructor(t){this.x=t.x,this.y=t.y,this.r=t.r||15,this.angle=t.angle||0,this.text=t.text||"",this.hFov=t.fovh||90,this.beforeDraw=t.beforeDraw}draw(t,e){this.beforeDraw?.(t,e);const i=1/e.scale,[n,o]=[(this.angle-this.hFov/2)/180*Math.PI,(this.angle+this.hFov/2)/180*Math.PI];t.save();const r=t.createRadialGradient(this.x,this.y,0,this.x,this.y,this.r*i);r.addColorStop(0,"rgba(180, 42, 42, 1)"),r.addColorStop(1,"rgba(180, 42, 42, 0.5)"),t.beginPath(),t.moveTo(this.x,this.y),t.arc(this.x,this.y,this.r*i,n,o),t.closePath(),t.fillStyle=r,t.fill(),t.restore()}}class $t{type="region";x;y;shape;areaPoints;backgroundColor;constructor(t){if(this.x=t.x,this.y=t.y,this.shape=t.shape||"",this.backgroundColor=t.backgroundColor,t.areaPoints.length===2){const[{x:e,y:i},{},{x:n,y:o}]=t.areaPoints;this.areaPoints=[{x:Math.min(e,n),y:Math.min(i,o)},{x:Math.max(e,n),y:Math.min(i,o)},{x:Math.max(e,n),y:Math.max(i,o)},{x:Math.min(e,n),y:Math.max(i,o)}]}else this.areaPoints=t.areaPoints}draw(t,e){if(t.save(),t.beginPath(),t.globalAlpha=.3,t.fillStyle=this.backgroundColor,this.shape==="circle"){const[{x:i,y:n},{},{x:o,y:r}]=this.areaPoints,a=Math.abs(o-i)/2,h=i+(o-i)/2,u=n+(r-n)/2;t.arc(h,u,a,0,2*Math.PI)}else this.areaPoints.forEach((i,n)=>{const{x:o,y:r}=i;n===0?t.moveTo(o,r):t.lineTo(o,r)});t.fill(),t.restore()}}l.APP_SETTING=G,l.AppError=f,l.AppErrorCode=w,l.AppObsType=Y,l.CanvasElement=Xt,l.CanvasImageElement=Ft,l.CanvasIssueElement=Yt,l.CanvasMarkerElement=Gt,l.CanvasPointElement=Ut,l.CanvasRadarElement=Bt,l.CanvasRegionElement=$t,l.Coordinate=et,l.CoordinateLevel=U,l.CoordinateModelType=C,l.CoordinateStatus=I,l.CoordinateType=b,l.DataHelper=jt,l.DataSource=p,l.GeoPoint=z,l.Point=y,l.Position=X,l.RelativeMap=M,l.RequestContentType=R,l.RequestMethod=g,l.RequestResultCode=L,l.Vector3=F,l.api=ft,l.http=ut,l.utils=At,Object.defineProperty(l,Symbol.toStringTag,{value:"Module"})}));
1
+ (function(u,f){typeof exports=="object"&&typeof module<"u"?f(exports):typeof define=="function"&&define.amd?define(["exports"],f):(u=typeof globalThis<"u"?globalThis:u||self,f(u.Shared={}))})(this,(function(u){"use strict";class f extends Error{constructor(t,e,i){super(e),this.code=t,this.message=e,this.details=i,this.name="Apprror",Object.setPrototypeOf(this,f.prototype)}toJSON(){return{code:this.code,message:this.message,details:this.details,timestamp:new Date().toISOString()}}}var E=(s=>(s[s.CADModel=5]="CADModel",s[s.BIMModel=6]="BIMModel",s[s.ForgeModel=7]="ForgeModel",s[s.ThreeDModel=8]="ThreeDModel",s[s.SkyMapModel=9]="SkyMapModel",s[s.ScaleModel=10]="ScaleModel",s))(E||{}),Y=(s=>(s[s.Global=0]="Global",s))(Y||{}),b=(s=>(s[s.Space=0]="Space",s[s.Model=1]="Model",s[s.Data=2]="Data",s))(b||{}),I=(s=>(s[s.Used=0]="Used",s[s.Enabled=1]="Enabled",s[s.Disabled=2]="Disabled",s))(I||{}),L=(s=>(s[s.SUCCESS=200]="SUCCESS",s[s.ERROR=-1]="ERROR",s[s.TIMEOUT=401]="TIMEOUT",s))(L||{}),M=(s=>(s.GET="GET",s.POST="POST",s))(M||{}),N=(s=>(s.JSON="application/json",s.FORM_URLENCODED="application/x-www-form-urlencoded;charset=UTF-8",s.FORM_DATA="multipart/form-data;charset=UTF-8",s.OCTET_STREAM="'application/octet-stream",s))(N||{}),G=(s=>(s.Hw="huawei",s.Ali="aliyun",s.Hs="hs",s.Aws="amazon",s.Minio="minio",s))(G||{}),p=(s=>(s[s.GeoPointNoPlane=9e3]="GeoPointNoPlane",s[s.PointUnmappedGIS=9010]="PointUnmappedGIS",s[s.PointNoXYZ=9011]="PointNoXYZ",s[s.PointNoPlane=9012]="PointNoPlane",s[s.RelativePlaneUnmatch=9020]="RelativePlaneUnmatch",s[s.RelativeNoPlane=9021]="RelativeNoPlane",s[s.RelativeJsonError=9022]="RelativeJsonError",s[s.RequestCodeError=9030]="RequestCodeError",s[s.RequestResultError=9031]="RequestResultError",s[s.RequestUnknownError=9032]="RequestUnknownError",s))(p||{});const B={baseUrl:"https://vsleem.com/api",obsType:"hs",authorizeCode:""},ot={isTransformResponse:!0,joinBaseUrl:!0,withAuthorize:!0},rt={url:"",method:M.GET,headers:{}},$={...B};function at(s){Object.assign($,s)}async function T(s,t){const e={...ot,...t},i={...rt,...s};try{const n=ht(i,e),{url:o,...r}=n,h=await(await window.fetch(o,r)).json();return ct(h,e)}catch(n){return lt(n)}}function ht(s,t){const{baseUrl:e,authorizeCode:i}=$,{joinBaseUrl:n,withAuthorize:o}=t;let{url:r,method:a,headers:h={},params:l,data:c}=s;n&&e&&(r=`${e}${r}`),a=a?.toUpperCase();const d={...h};if(/^https?:\/\/.+$/i.test(e??"")?d.PlatForm=new URL(e??"").host:d.PlatForm=new URL(window.location.href).host,o&&i&&(d.AuthorizationCode=i),a===M.POST&&!d["Content-Type"]&&(d["Content-Type"]=N.JSON),a===M.GET&&l){const x=new URLSearchParams(l);r+=`?${x.toString()}`}let m;return a===M.POST&&(m=d["Content-Type"]===N.JSON?JSON.stringify(c||{}):c),{url:r,method:a,headers:d,body:m}}function ct(s,t){if(!t.isTransformResponse)return s;if(!s)throw new f(p.RequestResultError,"请求返回的结果错误");const{code:e,data:i,msg:n}=s;if(e===L.SUCCESS)return i;throw new f(p.RequestCodeError,n||"请求返回的Code错误")}function lt(s){throw s instanceof Error?s:new f(p.RequestUnknownError,typeof s=="string"?s:"未知的请求错误")}const ut=Object.freeze(Object.defineProperty({__proto__:null,request:T,setRequestGlobalConfig:at},Symbol.toStringTag,{value:"Module"}));function _(s,t){return T({url:"/project/jssdk/cs/list",method:M.GET,params:s},t)}function q(s,t){return T({url:"/project/jssdk/cs/bind",method:M.POST,data:s},t)}function k(s,t){return T({url:"/project/jssdk/cs/save",method:M.POST,data:s},t)}function Z(s,t){return T({url:"/project/jssdk/cs/delete",method:M.POST,data:s},t)}function J(s,t){return T({url:"/project/jssdk/cs/mapping",method:M.POST,data:s},t)}function H(s,t){return T({url:"/project/jssdk/cs/mapping/query",method:M.GET,params:s},t)}function dt(s,t={isTransformResponse:!1,joinBaseUrl:!1,withAuthorize:!1}){return T({url:s,method:M.GET},t)}const ft=Object.freeze(Object.defineProperty({__proto__:null,bindCoordinate:q,getCoordinateList:_,getImageInfo:dt,getMappingRelation:H,mapingCoordinate:J,removeCoordinate:Z,saveCoordinate:k},Symbol.toStringTag,{value:"Module"})),mt=typeof window<"u",yt=Object.prototype.toString;function S(s,t){return yt.call(s)===`[object ${t}]`}function V(s){return typeof s<"u"}function W(s){return!V(s)}function P(s){return s!==null&&S(s,"Object")}function Q(s){return s===null}function wt(s){return S(s,"Date")}function pt(s){return S(s,"String")}function A(s){return typeof s=="function"}function gt(s){return S(s,"Boolean")}function Mt(s){return S(s,"RegExp")}function v(s){return s&&Array.isArray(s)}function vt(s){return typeof window<"u"&&S(s,"Window")}function xt(s){return P(s)&&!!s.tagName}function R(s){return typeof s=="number"?!0:typeof s!="string"?!1:/^[-+]?(?:\d+(?:\.\d*)?|\.\d+)(?:[eE][-+]?\d+)?$/.test(s)}function bt(s,t){return JSON.stringify(s)===JSON.stringify(t)}function Tt(s){return W(s)||Q(s)}function St(s){return S(s,"Promise")&&P(s)&&A(s.then)&&A(s.catch)}function K(s){return C(s,new WeakMap)}function C(s,t){if(typeof s!="object"||s===null)return s;if(t.has(s))return t.get(s);let e;if(s instanceof Date)return e=new Date(s),t.set(s,e),e;if(s instanceof RegExp)return e=new RegExp(s),t.set(s,e),e;if(s instanceof Map)return e=new Map,t.set(s,e),s.forEach((n,o)=>{e.set(o,C(n,t))}),e;if(s instanceof Set)return e=new Set,t.set(s,e),s.forEach(n=>{e.add(C(n,t))}),e;if(ArrayBuffer.isView(s))return e=new s.constructor(s.buffer.slice(0),s.byteOffset,s.byteLength),t.set(s,e),e;if(s instanceof ArrayBuffer)return e=s.slice(0),t.set(s,e),e;if(Array.isArray(s)){e=[],t.set(s,e);for(let n=0;n<s.length;n++)n in s&&(e[n]=C(s[n],t));return e}e=Object.create(Object.getPrototypeOf(s)),t.set(s,e);for(const n in s)Object.prototype.hasOwnProperty.call(s,n)&&(e[n]=C(s[n],t));const i=Object.getOwnPropertySymbols(s);for(const n of i)Object.prototype.propertyIsEnumerable.call(s,n)&&(e[n]=C(s[n],t));return e}function Pt(s,t,e=!1){let i;const n=function(...o){const r=this,a=e&&!i;i&&clearTimeout(i),i=setTimeout(()=>{i=void 0,e||s.apply(r,o)},t),a&&s.apply(r,o)};return n.cancel=()=>{i&&clearTimeout(i),i=void 0},n}function Et(s,t,e=!1){let i,n;const o=function(...r){const a=this;n?(clearTimeout(i),i=setTimeout(()=>{Date.now()-n>=t&&(s.apply(a,r),n=Date.now())},t-(Date.now()-n))):(e&&s.apply(a,r),n=Date.now())};return o.cancel=()=>{clearTimeout(i),i=void 0,n=void 0},o}function j(s,...t){if(!t.length)return s;const e=t.shift();return e===void 0?s:(O(s)&&O(e)&&Object.keys(e).forEach(i=>{const n=s[i],o=e[i];Array.isArray(n)&&Array.isArray(o)?s[i]=[...n,...o]:O(n)&&O(o)?s[i]=j({...n},o):o!==void 0&&(s[i]=o)}),j(s,...t))}function O(s){return s!==null&&typeof s=="object"&&!Array.isArray(s)}function tt(s,...t){if(!t.length)return s;for(const e of t)e!=null&&typeof e=="object"&&Object.keys(e).forEach(i=>{const n=e[i],o=s[i];n!==null&&typeof n=="object"&&!Array.isArray(n)?((!o||typeof o!="object")&&(s[i]={}),tt(s[i],n)):s[i]=n});return s}function et(s,t){const e={};if(P(s)&&!v(s)){for(const i in s)if(Object.prototype.hasOwnProperty.call(s,i)){const n=s[i],o=P(t)&&!v(t)?t[i]:void 0;if(!(i in(t||{})))e[i]=n;else if(v(n)&&v(o))JSON.stringify(n)!==JSON.stringify(o)&&(e[i]=n);else if(P(n)&&P(o)){const r=et(n,o);r&&Object.keys(r).length>0&&(e[i]=r)}else n!==o&&(e[i]=n)}}if(P(t)&&v(t))for(const i in t)Object.prototype.hasOwnProperty.call(t,i)&&!(i in(s||{}))&&(e[i]=void 0);return e}function Ct(s,t={}){return new Promise((e,i)=>{const n=D(s);if(Dt(n)){e(!0);return}const o=document.createElement("script");o.src=s,Object.entries(t).forEach(([r,a])=>{a!==!1&&o.setAttribute(r,a===!0?"":String(a))}),o.onload=()=>{e(!0)},o.onerror=()=>{document.head.removeChild(o),i(new Error(`Failed to load script: ${s}`))},document.head.appendChild(o)})}function Dt(s){const t=D(s);return Array.from(document.scripts).some(e=>D(e.src)===t)}function zt(s){return new Promise((t,e)=>{const i=D(s);if(It(i)){t(!0);return}const n=document.createElement("link");n.rel="stylesheet",n.type="text/css",n.href=s,n.onload=()=>{t(!0)},n.onerror=()=>{document.head.removeChild(n),e(new Error(`Failed to load link: ${s}`))},document.head.appendChild(n)})}function It(s){const t=D(s);return Array.from(document.querySelectorAll('link[rel="stylesheet"]')).some(e=>D(e.href)===t)}function D(s){try{const t=new URL(s,window.location.href);return`${t.origin}${t.pathname}`}catch{return s}}function Nt(s,t,e,i){const n=Math.min(s/e,t/i),o=e*n,r=i*n;return{scale:n,x:(s-o)/2,y:(t-r)/2,sw:o,sh:r}}function Rt(s,t,e){return{x:s*e.scale+e.x,y:t*e.scale+e.y}}function Ot(s,t,e){return{x:(s-e.x)/e.scale,y:(t-e.y)/e.scale}}function Lt(s){console.warn(`[warn]:${s}`)}function kt(s){throw new Error(`[error]:${s}`)}const At=Object.freeze(Object.defineProperty({__proto__:null,cloneDeep:K,debounce:Pt,deepMerge:j,deepMergeProps:tt,error:kt,getDiffProps:et,getImageTransform:Nt,inBrowser:mt,is:S,isArray:v,isBoolean:gt,isDate:wt,isDef:V,isElement:xt,isFunction:A,isNull:Q,isNullOrUnDef:Tt,isNumeric:R,isObject:P,isPromise:St,isRegExp:Mt,isSameValue:bt,isString:pt,isUnDef:W,isWindow:vt,loadCss:zt,loadScript:Ct,throttle:Et,toCanvasCoord:Rt,toModelCoord:Ot,warn:Lt},Symbol.toStringTag,{value:"Module"}));class y{x=0;y=0;z=0;lat=0;lon=0;alt=0;yaw=0;pitch=0;roll=0;hasXYZ=!1;hasGeo=!1;hasAngle=!1;plane="xy";constructor(t){const{x:e,y:i,z:n,lat:o,lon:r,alt:a,yaw:h,pitch:l,roll:c,plane:d="xy"}=t||{};this.x=Number(e)||0,this.y=Number(i)||0,this.z=Number(n)||0,(this.x!==0||this.y!==0||this.z!==0)&&(this.plane=d,this.hasXYZ=!0),this.lat=Number(o)||0,this.lon=Number(r)||0,this.alt=Number(a)||0,(this.lat!==0||this.lon!==0||this.alt!==0)&&(this.hasGeo=!0),this.yaw=Number(h)||0,this.pitch=Number(l)||0,this.roll=Number(c)||0,(R(h)||R(l)||R(c))&&(this.hasAngle=!0)}static dist(t,e){return Math.hypot(t.x-e.x,t.y-e.y,t.z-e.z)}static distXZ(t,e){return Math.hypot(t.x-e.x,t.z-e.z)}static distXY(t,e){return Math.hypot(t.x-e.x,t.y-e.y)}static toRadians(t){return(Number(t)||0)*Math.PI/180}static toDegrees(t){return(Number(t)||0)*180/Math.PI}static angleXZ(t,e,i){const n={x:t.x-e.x,z:t.z-e.z},o={x:i.x-e.x,z:i.z-e.z},r=n.x*o.x+n.z*o.z,a=Math.sqrt(n.x**2+n.z**2),h=Math.sqrt(o.x**2+o.z**2),l=Math.max(-1,Math.min(1,r/(a*h))),d=Math.acos(l)*180/Math.PI;return Math.min(d,360-d)}static toParse(t){if(t){const e=t?.split(",").map(i=>Number(i)||0);return new y({x:e[0],y:e[1],z:e[2]})}}static toStringify(t){return t?`${t.x},${t.y},${t.z}`:""}projection(t,e,i){try{if(e?.id===i?.id)return new y(this);if(e?.modelType===E.SkyMapModel){const{refPoint:n}=e?.relativeMap||{};if(this?.hasXYZ)return this.project(t);if(this.hasGeo&&n){const o=z.LLHToXYZ(this,n);return this.x=o.x,this.y=o.y,this.z=o.z,this.hasXYZ=!0,this.project(t)}throw new f(p.PointUnmappedGIS,"没有完成GIS与其他空间的映射")}if(i?.modelType===E.SkyMapModel){const{refPoint:n}=i?.relativeMap||{};if(this?.hasGeo)return new y(this);const o=this.project(t);if(o?.hasXYZ&&n){const r=z.XYZToLLH(o,n);return o.lat=r.lat,o.lon=r.lon,o.alt=r.alt,o.hasGeo=!0,o}throw new f(p.PointUnmappedGIS,"没有完成GIS与其他空间的映射")}return this.project(t)}catch(n){console.error(n);return}}project(t){if(!this.hasXYZ)throw new f(p.PointNoXYZ,"点没有xxz坐标信息");if(this.plane==="xz")return this.projectXZ(t);if(this.plane==="xy")return this.projectXY(t);throw new f(p.PointNoPlane,"点的plane应为xz或xy")}projectXZ(t){const e=new y(this);e.x*=t.scale,e.y*=t.scale,e.z*=t.scale,e.yaw!==void 0&&(e.yaw+=t.yaw);const i=e.x*Math.cos(t.yaw)-e.z*Math.sin(t.yaw),n=e.x*Math.sin(t.yaw)+e.z*Math.cos(t.yaw);return e.x=i+t.x,e.y+=t.y,e.z=n+t.z,e}projectXY(t){const e=new y(this);e.x*=t.scale,e.y*=t.scale,e.z*=t.scale,e.yaw!==void 0&&(e.yaw+=t.yaw);const i=e.x*Math.cos(t.yaw)-e.y*Math.sin(t.yaw),n=e.x*Math.sin(t.yaw)+e.y*Math.cos(t.yaw);return e.x=i+t.x,e.y=n+t.y,e.z+=t.z,e}}class z{lat=0;lon=0;alt=0;constructor(t){const{lat:e=0,lon:i=0,alt:n=0}=t||{};this.lat=e,this.lon=i,this.alt=n}static XYZToLLH(t,e){const n=.0033528106647474805,o=n*(2-n),r=y.toRadians(e.lat),a=6378137/Math.sqrt(1-o*Math.sin(r)**2)+e.alt;let h,l,c;if(t.plane==="xz"){const d=t.x/1e3/(a*Math.cos(r)),m=t.z/1e3/a;h=e.lon+y.toDegrees(d),l=e.lat-y.toDegrees(m),c=e.alt+t.y/1e3}else if(t.plane==="xy"){const d=t.x/1e3/(a*Math.cos(r)),m=t.y/1e3/a;h=e.lon+y.toDegrees(d),l=e.lat-y.toDegrees(m),c=e.alt+t.z/1e3}else throw new f(p.GeoPointNoPlane,"点的plane应为xz或xy");return new z({lat:l,lon:h,alt:c})}static LLHToXYZ(t,e){const n=.0033528106647474805,o=n*(2-n),r=y.toRadians(e.lat),a=6378137/Math.sqrt(1-o*Math.sin(r)**2)+e.alt,h=y.toRadians(t.lon-e.lon),l=y.toRadians(e.lat-t.lat),c=a*h*Math.cos(r),d=a*l;if(t.plane==="xz")return new y({x:c*1e3,y:(t.alt-e.alt)*1e3,z:d*1e3,plane:"xz"});if(t.plane==="xy")return new y({x:c*1e3,y:d*1e3,z:(t.alt-e.alt)*1e3,plane:"xy"});throw new f(p.GeoPointNoPlane,"点的plane应为xz或xy")}}class g{scale=1;yaw=0;x=0;y=0;z=0;start=0;end=-1;plane="xy";refPoint;constructor(t){const{refPoint:e,...i}=t||{};e&&(this.refPoint=new z(e)),Object.assign(this,i)}static addRelativeMap(t,e){if(t.plane!==e.plane)throw new f(p.RelativePlaneUnmatch,"两个映射关系的plane应该相同");const i=t.scale*e.scale,n=t.yaw+e.yaw,o=Math.cos(e.yaw),r=Math.sin(e.yaw);let a=0,h=0,l=0;if(t.plane==="xz"){const c=t.x*o-t.z*r,d=t.y,m=t.x*r+t.z*o;a=e.x+c*e.scale,h=e.y+d*e.scale,l=e.z+m*e.scale}else if(t.plane==="xy"){const c=t.x*o-t.y*r,d=t.x*r+t.y*o,m=t.z;a=e.x+c*e.scale,h=e.y+d*e.scale,l=e.z+m*e.scale}else throw new f(p.RelativeNoPlane,"映射关系的plane应为xz或xy");return new g({scale:i,yaw:n,x:a,y:h,z:l,start:t.start,end:t.end,plane:t.plane})}static inverseRelativeMap(t){const e=1/t.scale,i=-t.yaw,n=Math.cos(-i),o=Math.sin(-i);let r=0,a=0,h=0;if(t.plane==="xz")r=-(t.x*n+t.z*o)*e,a=-t.y*e,h=-(t.z*n-t.x*o)*e;else if(t.plane==="xy")r=-(t.x*n+t.y*o)*e,a=-(t.y*n-t.x*o)*e,h=-t.z*e;else throw new f(p.RelativeNoPlane,"映射关系的plane应为xz或xy");return new g({scale:e,yaw:i,x:r,y:a,z:h,start:t.start,end:t.end,plane:t.plane})}static toParse(t){try{let e=t?JSON.parse(t):void 0;const{reference_point:i}=e||{};return i&&(e={refPoint:i}),e?new g(e):void 0}catch{throw new f(p.RelativeJsonError,"relativeMap格式化失败")}}static toStringify(t){return t?JSON.stringify(t):void 0}}class w{static async getCoordinateTree(t){const e=await _({projectId:t});if(e.length){const i=w.handleCoordinateList(e);return w.buildCoordinateTree(i,0)}}static parsedCoordinateTree(t){const e=w.flattenCoordinateTree(t);return w.buildCoordinateTree(e,0)}static async addCoordinate(t,e){const{projectId:i,id:n}=t,o=e.map(a=>{const{type:h,modelType:l,relativeMap:c,level:d,...m}=a,x=c?JSON.stringify(c):void 0;return{...m,projectId:i,parentId:n,coordinateType:h,renderType:l,relativePosition:x}}),r=await k(o);return w.handleCoordinateList(r)}static async removeCoordinate(t,e){const i=e.map(n=>n.id??-1);return await Z(i)}static async updateCoordinate(t,e){const{projectId:i,id:n}=t,o=e.map(a=>{const{type:h,relativeMap:l,level:c,...d}=a,m=g.toStringify(l);return{...d,relativePosition:m,projectId:i,parentId:n}}),r=await k(o);return w.handleCoordinateList(r)}static async bindCoordinate(t,e){const{projectId:i,id:n}=t,o=e.map(a=>{const{modelId:h}=a;return{modelId:h,parentId:n,projectId:i}}),r=await q(o);return w.handleCoordinateList(r)}static handleCoordinateList(t){return t?.map(e=>{const{coordinateType:i,modelKey:n,renderType:o,relativePosition:r,...a}=e,h=g.toParse(r);return new X({...a,type:i,modelType:o,modelValue:n,relativeMap:h})})}static flattenCoordinateTree(t){const e=Array.isArray(t)?t:[t],i=[];function n(o){for(const r of o){const{level:a,parent:h,relativeMap:l,...c}=r,d=new X({...c,relativeMap:new g(l)});i.push(d),r.children&&r.children.length>0&&n(r.children)}}return n(e),i}static buildCoordinateTree(t,e=0){const i=new Map,n=[];return t.forEach(o=>{i.set(String(o.id),o)}),t.forEach(o=>{const r=i.get(String(o.id));if(r)if(o.parentId===e)r.level=0,n.push(r);else{const a=i.get(String(o.parentId??-1));a&&(r.level=(Number(a.level)||0)+1,r.parent=a,a.children?.push(r))}}),n.forEach(w.sortCoordinateTree),n[0]}static sortCoordinateTree(t){t.children&&(t.children.sort((e,i)=>{if(e.type===b.Space){const n=Number(i?.relativeMap?.z)-Number(e?.relativeMap?.z);return n!==0?n:Number(i.createTime)-Number(e.createTime)}else return e.status===0&&i.status!==0?-1:i.status===0&&e.status!==0?1:Number(i.createTime)-Number(e.createTime)}),t.children.forEach(w.sortCoordinateTree))}static filterSpaceTree(t){const e=[];return t.forEach(i=>{const n=w.filterSpaceTree(i.children);i.children=n,i.disabled=i.disabled??!1,i.type!==b.Model&&e.push(i)}),e}}class X{id=0;type=0;children=[];level;relativeMap;no;name;shortName;status;modelId;modelType;modelValue;projectId;parentId;parent;groupUuid;z;createTime;disabled;constructor(t){this.setOptions(t)}get spaceList(){return this.children.filter(t=>t.type===b.Space)}get modelList(){return this.children.filter(t=>t.type===b.Model)}get fullName(){const t=this.name?`(${this.name})`:"";return this.shortName?`${this.shortName}${t}`:this.name??""}setOptions(t){const{relativeMap:e,parent:i,children:n,...o}=t||{};e&&(this.relativeMap=new g(e)),i&&(this.parent=i),n?.length&&(this.children=n),Object.assign(this,o)}async addChild(t){const e=v(t)?t:[t],i=await w.addCoordinate(this,e);return this.mergeChild(i),i}async removeChild(t){const e=v(t)?t:[t];await w.removeCoordinate(this,e);for(const i of e){const n=this.children.findIndex(o=>o.id===i.id);n!==-1&&this.children.splice(n,1)}}async updateChild(t){const e=v(t)?t:[t],i=await w.updateCoordinate(this,e);return this.mergeChild(i),i}async bindChild(t){const e=v(t)?t:[t],i=await w.bindCoordinate(this,e);return this.mergeChild(i),i}async mergeChild(t){t?.length&&t.forEach(e=>{const i=this.children.find(n=>n.id===e.id);if(i){const{relativeMap:n,no:o,name:r,shortName:a,status:h,modelId:l,modelValue:c}=e;Object.assign(i,{relativeMap:n,no:o,name:r,shortName:a,status:h,modelId:l,modelValue:c})}else this.id===e.parentId&&(e.parent=this,this.children.unshift(e))})}async mappingTo(t){await J(t)}async fromMapping(){const t=await H({srcCsId:this.id});return t[t.length-1]}findRoot(t=!1){let e=this;for(;e.parent&&!(t&&!e.relativeMap);)e=e.parent;return e}findChildModel(t=[E.CADModel,E.SkyMapModel],e=!0){const i=v(t)?t:[t];return i.includes(this.modelType??-1)&&this.status!==I.Disabled?this:([b.Data,b.Model].includes(this.type)?this.findParentSpace():this)?.modelList?.filter(a=>i.includes(a.modelType??-1)?e?!!a.relativeMap:!0:!1)?.sort((a,h)=>Number(a.status)-Number(h.status))?.[0]}findClosestModel(t=E.CADModel,e){const i=new Set;for(const l of e??[])i.add(String(l.id));const n=[{node:this,distance:0}],o=v(t)?t:[t],r=new Set;let a,h=1/0;for(;n.length>0;){const l=n.shift();if(!l)break;const{node:c,distance:d}=l;if(i.has(String(c.id)))continue;if(o.includes(c.modelType??-1)){if(d<h&&(a=c,h=d,d<=1))break;continue}r.add(c);const m=[];if(c.children)for(const x of c.children)r.has(x)||m.push(x);if(c.parent?.children)for(const x of c.parent.children)x!==c&&!r.has(x)&&m.push(x);c.parent&&!r.has(c.parent)&&m.push(c.parent);for(const x of m)n.push({node:x,distance:d+1})}return a}findParentSpace(){let t=this;for(;t&&t.type!==b.Space;)t=t.parent;return t}findParentSpaceNames(t=2){const e=[];let i=this;for(;i&&t>0;)i.type===b.Space&&(e.unshift(i.fullName),t--),i=i.parent;return e}findCsGroup(){const{groupUuid:t,parent:e}=this;return t?e?.children?.filter(i=>i.groupUuid===t)||[]:[this]}findCsByLevel(t){if(this.level===t)return this;if(this.children.length)for(const e of this.children){const i=e.findCsByLevel(t);if(i)return i}}findCsById(t){if(t){if(this.id===t)return this;for(const e of this.children){const i=e.findCsById(t);if(i)return i}}}getCsRoutes(t=!1){let e=this;const i=[e];for(;e?.parent&&!(t&&!e.relativeMap);)e=e.parent,e&&i.push(e);return i}getMappedCsTree(){function t(n){return n.children?.length&&(n.children=n.children.filter(o=>!!o?.relativeMap&&o.status!==I.Disabled).map(o=>t(o))),n}const e=K(this.findRoot(!0)),i=t(e);return i.parentId=0,i.parent=void 0,i}getDestRelativeMap(t){if(this.id===t.id)return new g;const e=this.getRelativeMaps(),i=t.getRelativeMaps();let n=new g;return e?.forEach(o=>{n=g.addRelativeMap(n,o)}),i?.reverse()?.forEach(o=>{n=g.addRelativeMap(n,g.inverseRelativeMap(o))}),n}getRelativeMaps(){let t=this;const e=[];for(;t?.parent&&t.relativeMap;)e.push(t.relativeMap),t=t.parent;return e}static filterCoordinateTree(t,e=[],i=[]){if(i.includes(t.id)||e.includes(t.type))return;const n=t.children?.map(o=>this.filterCoordinateTree(o,e,i)).filter(o=>o!==void 0);return{...t,children:n}}static getCommonCoordinate(t){let e;const i=t.map(n=>n.getCsRoutes(!0).filter(r=>r.id&&r.type===b.Space));for(;this.checkSameCoordinate(i);){const o=i.shift();o?.length&&(e=o[0])}return e}static checkSameCoordinate(t){if(t.length){if(t.length===1)return!0;for(let e=0;e<t.length-1;e++){const i=t[e];if(!i?.length)return!1;const n=t[e+1];if(!n?.length||i[0].id!==n[0].id)return!1}return!0}else return!1}}class F{yaw=0;pitch=0;roll=0;constructor(t){const{yaw:e=0,pitch:i=0,roll:n=0}=t||{};this.yaw=Number(e)||0,this.pitch=Number(i)||0,this.roll=Number(n)||0}static toParse(t){if(t){const e=t?.split(",").map(i=>Number(i)||0);return new F({yaw:e[0],pitch:e[1],roll:e[2]})}}static toStringify(t){return t?`${t.yaw},${t.pitch},${t.roll}`:""}}class U{x=0;y=0;z=0;constructor(t){const{x:e=0,y:i=0,z:n=0}=t||{};this.x=Number(e)||0,this.y=Number(i)||0,this.z=Number(n)||0}static toParse(t){if(t){const e=t?.split(",").map(i=>Number(i)||0);return new U({x:e[0],y:e[1],z:e[2]})}}static toStringify(t){return t?`${t.x},${t.y},${t.z}`:""}}class jt{static srcPointToDstPoint(t,e,i){if(!e||!i||!t?.length)return[];const n=e?.getDestRelativeMap(i);if(!n)return[];const o=[];return t.forEach(r=>{const a=r.projection(n,e,i);a&&o.push(a)}),o}}class Xt{canvas;ctx;options;offset={x:0,y:0};curOffset={x:0,y:0};mousePosition={x:-1,y:-1};MAX_SCALE=60;MIN_SCALE=1;STEP_SCALE=.5;scale=1;preScale=1;width=0;height=0;x=0;y=0;timeout=0;lastTouch;initialDistance=0;touchMode=0;isMouseover=!1;isBindEvent=!0;isDrawAssist=!1;customDrawAssist;isMoveRedrawing;afterDraw;screenPos={screenX:0,screenY:0};constructor(t){const{container:e,width:i=300,height:n=300,isBindEvent:o=!0,isDrawAssist:r=!1,isMoveRedrawing:a,customDrawAssist:h,afterDraw:l,...c}=t;this.canvas=e,this.ctx=this.canvas.getContext("2d"),this.width=i,this.height=n,this.canvas.width=i,this.canvas.height=n,this.isBindEvent=o,this.isDrawAssist=r,this.customDrawAssist=h,this.isMoveRedrawing=a??r,this.options=c,this.onMousedown=this.onMousedown.bind(this),this.onMousemove=this.onMousemove.bind(this),this.onMousemoveTemp=this.onMousemoveTemp.bind(this),this.onMouseup=this.onMouseup.bind(this),this.onMousewheel=this.onMousewheel.bind(this),this.onDblclick=this.onDblclick.bind(this),this.onTouchstart=this.onTouchstart.bind(this),this.onTouchmove=this.onTouchmove.bind(this),this.onTouchend=this.onTouchend.bind(this),this.onMouseout=this.onMouseout.bind(this),this.afterDraw=this.afterDraw,o&&(this.canvas.addEventListener("DOMMouseScroll",this.onMousewheel),this.canvas.addEventListener("mousewheel",this.onMousewheel),this.canvas.addEventListener("mousedown",this.onMousedown),this.canvas.addEventListener("mousemove",this.onMousemove),this.canvas.addEventListener("mouseout",this.onMouseout),this.canvas.addEventListener("dblclick",this.onDblclick),this.canvas.addEventListener("touchstart",this.onTouchstart))}onClick(t){const{screenX:e,screenY:i}=t;this.timeout&&clearTimeout(this.timeout);const n=this.getPos(t);this.x=n.x,this.y=n.y,this.screenPos={screenX:e,screenY:i},this.options.onClick&&(this.timeout=setTimeout(()=>{const o=parseFloat(((this.x-this.offset.x)/this.scale).toFixed(2)),r=parseFloat(((this.y-this.offset.y)/this.scale).toFixed(2));this.options.onClick(o,r)},200))}onMouseout(t){this.isMouseover=!1,this.draw()}onTouchstart(t){t.preventDefault(),t.touches.length==1?this.touchMode===0&&(this.touchMode=1):t.touches.length>=2&&this.touchMode<2&&(this.touchMode=2),this.touchMode==1&&t.touches.length==1?this.onTouch(t.touches[0]):this.touchMode==2&&t.touches.length==2&&this.onBothTouchstart(t),this.canvas.addEventListener("touchmove",this.onTouchmove),this.canvas.addEventListener("touchend",this.onTouchend)}onMousedown(t){this.onClick(t),this.canvas.addEventListener("mousemove",this.onMousemoveTemp),this.canvas.addEventListener("mouseup",this.onMouseup)}onBothTouchstart(t){t.preventDefault();const e={x:t.touches[0].clientX,y:t.touches[0].clientY},i={x:t.touches[1].clientX,y:t.touches[1].clientY},n=this.getPos({clientX:(e.x+i.x)/2,clientY:(e.y+i.y)/2});this.x=n.x,this.y=n.y,this.curOffset.x=this.offset.x,this.curOffset.y=this.offset.y,this.initialDistance=Math.sqrt(Math.pow(i.x-e.x,2)+Math.pow(i.y-e.y,2))}onTouchmove(t){t.preventDefault(),this.touchMode==1&&t.touches.length==1?(this.onMousemoveTemp(t.touches[0]),this.onMousemove(t.touches[0])):this.touchMode==2&&t.touches.length==2&&this.onBothTouchmove(t)}onMousemove(t){const e=this.getPos(t);this.mousePosition.x=e.x,this.mousePosition.y=e.y,this.isMouseover=!0,this.isMoveRedrawing&&this.draw()}onMousemoveTemp(t){const{screenX:e,screenY:i}=this.screenPos;(Math.abs(e-t.screenX)>10||Math.abs(i-t.screenY)>10)&&(this.timeout&&clearTimeout(this.timeout),this.offset.x=this.curOffset.x+(this.mousePosition.x-this.x),this.offset.y=this.curOffset.y+(this.mousePosition.y-this.y),!this.isMoveRedrawing&&this.draw())}onBothTouchmove(t){if(t.preventDefault(),this.initialDistance){const e={x:t.touches[0].clientX,y:t.touches[0].clientY},i={x:t.touches[1].clientX,y:t.touches[1].clientY},n=Math.sqrt(Math.pow(i.x-e.x,2)+Math.pow(i.y-e.y,2));if(this.scale+=(n-this.initialDistance)/30*this.STEP_SCALE,this.initialDistance=n,this.scale>this.MAX_SCALE){this.scale=this.MAX_SCALE;return}if(this.scale<this.MIN_SCALE){this.scale=this.MIN_SCALE;return}this.zoom()}}onTouchend(){this.touchMode=0,this.onMouseup()}onMouseup(){this.curOffset.x=this.offset.x,this.curOffset.y=this.offset.y,this.canvas.removeEventListener("mousemove",this.onMousemoveTemp),this.canvas.removeEventListener("mouseup",this.onMouseup),this.canvas.removeEventListener("touchmove",this.onTouchmove),this.canvas.removeEventListener("touchend",this.onTouchend)}onMousewheel(t){this.timeout&&clearTimeout(this.timeout),t.preventDefault();const e=this.getPos(t);this.x=e.x,this.y=e.y;const i=t.wheelDelta>0||t.detail<0?this.STEP_SCALE:-this.STEP_SCALE;if(this.scale=parseFloat((this.scale+i).toFixed(2)),this.scale>this.MAX_SCALE){this.scale=this.MAX_SCALE;return}if(this.scale<this.MIN_SCALE){this.scale=this.MIN_SCALE;return}this.zoom()}onTouch(t){const e=Date.now(),{lastTouchTime:i=0,lastTouchX:n=0,lastTouchY:o=0}=this.lastTouch||{};e-i<300&&Math.abs(t.clientX-n)<30&&Math.abs(t.clientY-o)<30?(this.onDblclick(t),this.lastTouch={lastTouchTime:0,lastTouchX:0,lastTouchY:0}):(this.onClick(t),this.lastTouch={lastTouchTime:e,lastTouchX:t.clientX,lastTouchY:t.clientY})}onDblclick(t){this.timeout&&clearTimeout(this.timeout),this.reset(),this.draw()}zoom(){this.offset.x=this.x-(this.x-this.offset.x)*this.scale/this.preScale,this.offset.y=this.y-(this.y-this.offset.y)*this.scale/this.preScale,this.draw(),this.preScale=this.scale,this.curOffset.x=this.offset.x,this.curOffset.y=this.offset.y}reset(t){const{width:e=this.width,height:i=this.height,scale:n=1,preScale:o=1,offset:r={x:0,y:0},curOffset:a={x:0,y:0}}=t||{};this.width=e,this.height=i,this.canvas.width=e,this.canvas.height=i,this.scale=n,this.preScale=o,this.offset=r,this.curOffset=a}drawAssist(){const t=this.ctx;t.save(),t.beginPath(),t.lineWidth=1,t.strokeStyle="#C656D5",t.moveTo(0,this.mousePosition.y),t.lineTo(this.width,this.mousePosition.y),t.closePath(),t.stroke(),t.beginPath(),t.moveTo(this.mousePosition.x,0),t.lineTo(this.mousePosition.x,this.height),t.closePath(),t.stroke(),t.restore()}draw(){this.ctx.clearRect(0,0,this.width,this.height),this.ctx.save(),this.ctx.translate(this.offset.x,this.offset.y),this.ctx.scale(this.scale,this.scale),this.options.draw(this.ctx,this),this.ctx.restore(),this.isDrawAssist&&this.isMouseover&&(this.customDrawAssist?this.customDrawAssist():this.drawAssist()),this.afterDraw?.(this.ctx,this)}getPos(t){const e=this.canvas.getBoundingClientRect();let i=parseFloat((t.clientX-e.left).toFixed(2)),n=parseFloat((t.clientY-e.top).toFixed(2));return i=i<0?0:i,n=n<0?0:n,{x:i,y:n}}unBindEvent(){this.isBindEvent&&(this.canvas.removeEventListener("mousemove",this.onMousemove),this.canvas.removeEventListener("DOMMouseScroll",this.onMousewheel),this.canvas.removeEventListener("mousewheel",this.onMousewheel),this.canvas.removeEventListener("mousedown",this.onMousedown),this.canvas.removeEventListener("mouseout",this.onMouseout),this.canvas.removeEventListener("dblclick",this.onDblclick))}}const st={};class Ft{type="image";x;y;width;height;img;src;redraw;constructor(t){this.x=t.x||0,this.y=t.y||0,this.width=t.width||0,this.height=t.height||0,this.src=t.src,this.redraw=t.redraw,this.img=this.loadImage(t.onload)}loadImage(t){const e=st[this.src];if(e)return queueMicrotask(()=>{t?.(e),this.redraw?.()}),e;{const i=new Image;return i.crossOrigin="anonymous",i.src=this.src,i.onload=()=>{st[this.src]=i,t?.(i),this.redraw?.()},i}}draw(t){try{if(!this.img.complete)return;t.save(),t.drawImage(this.img,this.x,this.y,this.width,this.height),t.restore()}catch(e){console.error(e)}}}class Ut{id="";type="point";x;y;r;text;backgroundColor;index;pIndex;parentId;constructor(t){this.id=t.id,this.x=t.x,this.y=t.y,this.r=t.r||15,this.text=t.text||"",this.index=t.index,this.pIndex=t.pIndex,this.parentId=t.parentId,this.backgroundColor=t.backgroundColor||"rgba(91, 179, 111, 0.8)"}draw(t,e){t.save();const i=1/e.scale;t.beginPath(),t.arc(this.x,this.y,this.r*i,0,2*Math.PI),t.fillStyle=this.backgroundColor,t.fill(),t.font=`${this.r*i}px Microsoft YaHei`,t.textAlign="center",t.fillStyle="#FFFFFF",t.fillText(this.text,this.x,this.y+this.r*i/3),t.restore()}}const it={};class Yt{id="";type="issue";x;y;width;height;src;img;index;pIndex;parentId;count;badgeR;redraw;constructor(t){this.id=t.id,this.x=t.x,this.y=t.y,this.width=t.width||0,this.height=t.height||0,this.index=t.index,this.pIndex=t.pIndex,this.parentId=t.parentId,this.count=t.count||0,this.badgeR=3,this.src=t.src,this.redraw=t.redraw,this.img=this.loadImage(t.onload)}loadImage(t){const e=it[this.src];if(e)return queueMicrotask(()=>{t?.(e),this.redraw?.()}),e;{const i=new Image;return i.src=this.src,i.crossOrigin="anonymous",i.onload=()=>{it[this.src]=i,t?.(i),this.redraw?.()},i}}draw(t,e){if(!this.img.complete)return;const i=1/e.scale,n=this.width*i,o=this.height*i,r=this.x-n/2,a=this.y-o,h=this.badgeR*i,l=h*1.5;t.save(),t.drawImage(this.img,r,a,n,o),t.beginPath(),this.count>1&&(t.arc(this.x+n*.3,this.y-o*.8,h,0,2*Math.PI),t.fillStyle="red",t.fill(),t.font=`${l}px Microsoft YaHei`,t.textAlign="center",t.fillStyle="#FFFFFF",t.fillText(this.count.toString(),this.x+n*.3,this.y-o*.8+h/2)),t.restore()}}const nt={};class Gt{type="marker";x;y;url;width;height;anchor;img;scale;redraw;beforeDraw;constructor(t){this.x=t.x,this.y=t.y,this.url=t.url,this.width=t.width??0,this.height=t.height??0,this.anchor=t.anchor,this.scale=t.scale??1,t.redraw&&(this.redraw=t.redraw),t.beforeDraw&&(this.beforeDraw=t.beforeDraw),this.img=this.loadImage(t.onload)}loadImage(t){const e=nt[this.url];if(e)return queueMicrotask(()=>{t?.(e),this.redraw?.()}),e;{const i=new Image;return i.src=this.url,i.crossOrigin="anonymous",i.onload=()=>{nt[this.url]=i,t?.(i),this.redraw?.()},i}}calculateIconPosition(){const t=this.anchor?.x??this.width/2,e=this.anchor?.y??this.height/2;return{iconStartX:this.x-t*this.scale,iconStartY:this.y-e*this.scale}}draw(t,e){if(this.beforeDraw?.(t,e),!this.img?.complete)return;const{iconStartX:i,iconStartY:n}=this.calculateIconPosition();t.save();try{t.drawImage(this.img,i,n,this.width*this.scale,this.height*this.scale)}catch(o){console.error("绘制标记时出错:",o)}finally{t.restore()}}}class Bt{type="radar";x;y;r;angle;text;hFov=90;beforeDraw;constructor(t){this.x=t.x,this.y=t.y,this.r=t.r||15,this.angle=t.angle||0,this.text=t.text||"",this.hFov=t.fovh||90,this.beforeDraw=t.beforeDraw}draw(t,e){this.beforeDraw?.(t,e);const i=1/e.scale,[n,o]=[(this.angle-this.hFov/2)/180*Math.PI,(this.angle+this.hFov/2)/180*Math.PI];t.save();const r=t.createRadialGradient(this.x,this.y,0,this.x,this.y,this.r*i);r.addColorStop(0,"rgba(180, 42, 42, 1)"),r.addColorStop(1,"rgba(180, 42, 42, 0.5)"),t.beginPath(),t.moveTo(this.x,this.y),t.arc(this.x,this.y,this.r*i,n,o),t.closePath(),t.fillStyle=r,t.fill(),t.restore()}}class $t{type="region";x;y;shape;areaPoints;backgroundColor;constructor(t){if(this.x=t.x,this.y=t.y,this.shape=t.shape||"",this.backgroundColor=t.backgroundColor,t.areaPoints.length===2){const[{x:e,y:i},{},{x:n,y:o}]=t.areaPoints;this.areaPoints=[{x:Math.min(e,n),y:Math.min(i,o)},{x:Math.max(e,n),y:Math.min(i,o)},{x:Math.max(e,n),y:Math.max(i,o)},{x:Math.min(e,n),y:Math.max(i,o)}]}else this.areaPoints=t.areaPoints}draw(t,e){if(t.save(),t.beginPath(),t.globalAlpha=.3,t.fillStyle=this.backgroundColor,this.shape==="circle"){const[{x:i,y:n},{},{x:o,y:r}]=this.areaPoints,a=Math.abs(o-i)/2,h=i+(o-i)/2,l=n+(r-n)/2;t.arc(h,l,a,0,2*Math.PI)}else this.areaPoints.forEach((i,n)=>{const{x:o,y:r}=i;n===0?t.moveTo(o,r):t.lineTo(o,r)});t.fill(),t.restore()}}u.APP_SETTING=B,u.AppError=f,u.AppErrorCode=p,u.AppObsType=G,u.CanvasElement=Xt,u.CanvasImageElement=Ft,u.CanvasIssueElement=Yt,u.CanvasMarkerElement=Gt,u.CanvasPointElement=Ut,u.CanvasRadarElement=Bt,u.CanvasRegionElement=$t,u.Coordinate=X,u.CoordinateLevel=Y,u.CoordinateModelType=E,u.CoordinateStatus=I,u.CoordinateType=b,u.DataHelper=jt,u.DataSource=w,u.GeoPoint=z,u.Point=y,u.Position=F,u.RelativeMap=g,u.RequestContentType=N,u.RequestMethod=M,u.RequestResultCode=L,u.Vector3=U,u.api=ft,u.http=ut,u.utils=At,Object.defineProperty(u,Symbol.toStringTag,{value:"Module"})}));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vsleem-realsee-viewer/shared",
3
- "version": "2.0.10",
3
+ "version": "2.0.12",
4
4
  "private": false,
5
5
  "description": "Shared utilities for VSLeem RealSee Viewer",
6
6
  "main": "./dist/index.umd.js",