@vsleem-realsee-viewer/shared 2.0.9 → 2.0.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -41,10 +41,10 @@
41
41
  | 方法 | 类型 | 说明 |
42
42
  | ---------------------- | ----------------------------------------------------------------------------------- | -------------------------------------------- |
43
43
  | `constructor` | `(options?: Partial<Coordinate>) => Coordinate` | 初始化坐标系实例,支持部分属性配置 |
44
- | `addChild` | `(child: Partial<Coordinate> \ Partial<Coordinate>[]) => Promise<void>` | 添加一个或多个子坐标系,并建立映射关系 |
44
+ | `addChild` | `(child: Partial<Coordinate> \ Partial<Coordinate>[]) => Promise<Coordinate>` | 添加一个或多个子坐标系,并建立映射关系 |
45
45
  | `removeChild` | `(child: Partial<Coordinate> \ Partial<Coordinate>[]) => Promise<void>` | 移除一个或多个子坐标系 |
46
- | `updateChild` | `(child: Partial<Coordinate> \ Partial<Coordinate>[]) => Promise<void>` | 更新子坐标系的属性信息 |
47
- | `bindChild` | `(child: Partial<Coordinate> \ Partial<Coordinate>[]) => Promise<void>` | 绑定子坐标系但不建立映射关系 |
46
+ | `updateChild` | `(child: Partial<Coordinate> \ Partial<Coordinate>[]) => Promise<Coordinate>` | 更新子坐标系的属性信息 |
47
+ | `bindChild` | `(child: Partial<Coordinate> \ Partial<Coordinate>[]) => Promise<Coordinate>` | 绑定子坐标系但不建立映射关系 |
48
48
  | `mergeChild` | `(result?: Coordinate[]) => Promise<void>` | 合并更新的子坐标系数据到当前树结构 |
49
49
  | `mappingTo` | `(result: ProjectionModel[]) => Promise<void>` | 将当前坐标系映射到目标坐标系组 |
50
50
  | `fromMapping` | `() => Promise<ProjectionModel \ undefined>` | 查询当前坐标系被哪些源坐标系映射 |
package/dist/index.d.ts CHANGED
@@ -90,12 +90,6 @@ declare abstract class BaseElement {
90
90
  */
91
91
  declare function bindCoordinate(data: CoordinateModel[], options?: RequestOptions): Promise<CoordinateModel[]>;
92
92
 
93
- export declare type BindingModel = {
94
- id: number;
95
- modelId: number;
96
- parentId: number;
97
- };
98
-
99
93
  export declare type CADModel = {
100
94
  bindCsIds?: string;
101
95
  createBy?: string;
@@ -318,10 +312,10 @@ export declare class Coordinate {
318
312
  get modelList(): Coordinate[];
319
313
  get fullName(): string;
320
314
  setOptions(options?: Partial<Coordinate>): void;
321
- addChild(child: Partial<Coordinate> | Partial<Coordinate>[]): Promise<void>;
315
+ addChild(child: Partial<Coordinate> | Partial<Coordinate>[]): Promise<Coordinate[]>;
322
316
  removeChild(child: Partial<Coordinate> | Partial<Coordinate>[]): Promise<void>;
323
- updateChild(child: Partial<Coordinate> | Partial<Coordinate>[]): Promise<void>;
324
- bindChild(child: Partial<Coordinate> | Partial<Coordinate>[]): Promise<void>;
317
+ updateChild(child: Partial<Coordinate> | Partial<Coordinate>[]): Promise<Coordinate[]>;
318
+ bindChild(child: Partial<Coordinate> | Partial<Coordinate>[]): Promise<Coordinate[]>;
325
319
  mergeChild(result?: Coordinate[]): Promise<void>;
326
320
  mappingTo(result: ProjectionModel[]): Promise<void>;
327
321
  fromMapping(): Promise<ProjectionModel | undefined>;
@@ -479,6 +473,12 @@ export declare class DataSource {
479
473
  * @returns
480
474
  */
481
475
  static getCoordinateTree(projectId: number): Promise<Coordinate | undefined>;
476
+ /**
477
+ * 解析坐标系树
478
+ * @param tree 坐标系树
479
+ * @returns
480
+ */
481
+ static parsedCoordinateTree(tree: Coordinate): Coordinate;
482
482
  /**
483
483
  * 添加坐标系
484
484
  * @param parent 添加到的父级
@@ -513,13 +513,19 @@ export declare class DataSource {
513
513
  * @returns 处理后的坐标系数据
514
514
  */
515
515
  static handleCoordinateList(array: CoordinateModel[]): Coordinate[];
516
+ /**
517
+ * 将树形结构的节点扁平化为一个一维数组
518
+ * @param node 树的节点数组(可以是单个根节点数组或子节点数组)
519
+ * @returns 扁平化后的一维节点数组
520
+ */
521
+ static flattenCoordinateTree(tree: Coordinate | Coordinate[]): Coordinate[];
516
522
  /**
517
523
  * 递归函数将扁平列表转化为树形结构
518
524
  * @param flatNodes // 扁平列表
519
525
  * @param rootId // 根id
520
526
  * @returns
521
527
  */
522
- static buildCoordinateTree(flatNodes: Coordinate[], rootId: number): Coordinate;
528
+ static buildCoordinateTree(flatNodes: Coordinate[], rootId?: number): Coordinate;
523
529
  /**
524
530
  * 对子节点进行排序,首先按 status=0 升序,然后按 type=0 升序,最后按 createTime 降序
525
531
  * @param node // 节点
@@ -642,7 +648,7 @@ declare function isNull(val: unknown): val is null;
642
648
 
643
649
  declare function isNullOrUnDef(val: unknown): val is null | undefined;
644
650
 
645
- declare function isNumber(val: unknown): val is number;
651
+ declare function isNumeric(val: unknown): boolean;
646
652
 
647
653
  declare function isObject(val: any): val is Record<any, any>;
648
654
 
@@ -969,7 +975,7 @@ declare namespace utils {
969
975
  isArray,
970
976
  isWindow,
971
977
  isElement,
972
- isNumber,
978
+ isNumeric,
973
979
  isSameValue,
974
980
  isNullOrUnDef,
975
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 z = /* @__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))(z || {}), 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
32
  async function T(s, t) {
33
- const e = { ...it, ...t }, i = { ...nt, ...s };
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,28 +55,28 @@ 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
76
  request: T,
77
- setRequestGlobalConfig: ot
77
+ setRequestGlobalConfig: rt
78
78
  }, Symbol.toStringTag, { value: "Module" }));
79
- function Y(s, t) {
79
+ function G(s, t) {
80
80
  return T(
81
81
  {
82
82
  url: "/project/jssdk/cs/list",
@@ -86,7 +86,7 @@ function Y(s, t) {
86
86
  t
87
87
  );
88
88
  }
89
- function G(s, t) {
89
+ function B(s, t) {
90
90
  return T(
91
91
  {
92
92
  url: "/project/jssdk/cs/bind",
@@ -106,7 +106,7 @@ function O(s, t) {
106
106
  t
107
107
  );
108
108
  }
109
- function B(s, t) {
109
+ function $(s, t) {
110
110
  return T(
111
111
  {
112
112
  url: "/project/jssdk/cs/delete",
@@ -116,7 +116,7 @@ function B(s, t) {
116
116
  t
117
117
  );
118
118
  }
119
- function $(s, t) {
119
+ function _(s, t) {
120
120
  return T(
121
121
  {
122
122
  url: "/project/jssdk/cs/mapping",
@@ -126,7 +126,7 @@ function $(s, t) {
126
126
  t
127
127
  );
128
128
  }
129
- function _(s, t) {
129
+ function Z(s, t) {
130
130
  return T(
131
131
  {
132
132
  url: "/project/jssdk/cs/mapping/query",
@@ -136,7 +136,7 @@ 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
@@ -151,66 +151,66 @@ 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;
161
+ }, Symbol.toStringTag, { value: "Module" })), ut = typeof window < "u", dt = Object.prototype.toString;
162
162
  function P(s, t) {
163
- return ut.call(s) === `[object ${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
171
  function S(s) {
172
172
  return s !== null && P(s, "Object");
173
173
  }
174
- function J(s) {
174
+ function H(s) {
175
175
  return s === null;
176
176
  }
177
- function dt(s) {
177
+ function ft(s) {
178
178
  return P(s, "Date");
179
179
  }
180
- function ft(s) {
180
+ function mt(s) {
181
181
  return P(s, "String");
182
182
  }
183
183
  function L(s) {
184
184
  return typeof s == "function";
185
185
  }
186
- function mt(s) {
186
+ function yt(s) {
187
187
  return P(s, "Boolean");
188
188
  }
189
- function yt(s) {
189
+ function wt(s) {
190
190
  return P(s, "RegExp");
191
191
  }
192
- function g(s) {
192
+ function x(s) {
193
193
  return s && Array.isArray(s);
194
194
  }
195
- function wt(s) {
195
+ function pt(s) {
196
196
  return typeof window < "u" && P(s, "Window");
197
197
  }
198
- function pt(s) {
198
+ function gt(s) {
199
199
  return S(s) && !!s.tagName;
200
200
  }
201
201
  function b(s) {
202
- return typeof s == "number" || /^\d+(\.\d+)?$/.test(String(s ?? ""));
202
+ return typeof s == "number" ? !0 : typeof s != "string" ? !1 : /^[-+]?(?:\d+(?:\.\d*)?|\.\d+)(?:[eE][-+]?\d+)?$/.test(s);
203
203
  }
204
- function gt(s, t) {
204
+ function xt(s, t) {
205
205
  return JSON.stringify(s) === JSON.stringify(t);
206
206
  }
207
- function xt(s) {
208
- return q(s) || J(s);
209
- }
210
207
  function Mt(s) {
208
+ return J(s) || H(s);
209
+ }
210
+ function vt(s) {
211
211
  return P(s, "Promise") && S(s) && L(s.then) && L(s.catch);
212
212
  }
213
- function H(s) {
213
+ function V(s) {
214
214
  return E(s, /* @__PURE__ */ new WeakMap());
215
215
  }
216
216
  function E(s, t) {
@@ -253,7 +253,7 @@ function E(s, t) {
253
253
  Object.prototype.propertyIsEnumerable.call(s, n) && (e[n] = E(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 (S(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 = S(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
313
  else if (S(n) && S(o)) {
314
- const r = W(n, 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 (S(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
- const n = z(s);
327
- if (Tt(n)) {
326
+ const n = D(s);
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) {
342
- const t = z(s);
343
- return Array.from(document.scripts).some((e) => z(e.src) === t);
344
- }
345
341
  function Pt(s) {
342
+ const t = D(s);
343
+ return Array.from(document.scripts).some((e) => D(e.src) === t);
344
+ }
345
+ function Et(s) {
346
346
  return new Promise((t, e) => {
347
- const i = z(s);
348
- if (Et(i)) {
347
+ const i = D(s);
348
+ if (zt(i)) {
349
349
  t(!0);
350
350
  return;
351
351
  }
@@ -357,11 +357,13 @@ function Pt(s) {
357
357
  }, document.head.appendChild(n);
358
358
  });
359
359
  }
360
- function Et(s) {
361
- const t = z(s);
362
- return Array.from(document.links).some((e) => z(e.href) === t);
360
+ function zt(s) {
361
+ const t = D(s);
362
+ return Array.from(document.querySelectorAll('link[rel="stylesheet"]')).some(
363
+ (e) => D(e.href) === t
364
+ );
363
365
  }
364
- function z(s) {
366
+ function D(s) {
365
367
  try {
366
368
  const t = new URL(s, window.location.href);
367
369
  return `${t.origin}${t.pathname}`;
@@ -381,59 +383,59 @@ function Dt(s, t, e, i) {
381
383
  sh: r
382
384
  };
383
385
  }
384
- function zt(s, t, e) {
386
+ function Nt(s, t, e) {
385
387
  return {
386
388
  x: s * e.scale + e.x,
387
389
  // 缩放后加上偏移量
388
390
  y: t * e.scale + e.y
389
391
  };
390
392
  }
391
- function Nt(s, t, e) {
393
+ function It(s, t, e) {
392
394
  return {
393
395
  x: (s - e.x) / e.scale,
394
396
  // 减去偏移量后缩放到模型尺寸
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,
415
+ inBrowser: ut,
414
416
  is: P,
415
- isArray: g,
416
- isBoolean: mt,
417
- isDate: dt,
418
- isDef: Z,
419
- isElement: pt,
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,
423
+ isNull: H,
424
+ isNullOrUnDef: Mt,
425
+ isNumeric: b,
424
426
  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,
435
- toModelCoord: Nt,
436
- warn: It
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: Nt,
437
+ toModelCoord: It,
438
+ warn: Ct
437
439
  }, Symbol.toStringTag, { value: "Module" }));
438
440
  class f {
439
441
  // 直角坐标系坐标
@@ -552,7 +554,7 @@ 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 === z.SkyMapModel) {
556
558
  const { refPoint: n } = e?.relativeMap || {};
557
559
  if (this?.hasXYZ)
558
560
  return this.project(t);
@@ -560,9 +562,9 @@ class f {
560
562
  const o = N.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 === z.SkyMapModel) {
566
568
  const { refPoint: n } = i?.relativeMap || {};
567
569
  if (this?.hasGeo)
568
570
  return new f(this);
@@ -571,10 +573,11 @@ class f {
571
573
  const r = N.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平面投影转换
@@ -637,7 +640,7 @@ 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");
643
+ throw new y(w.GeoPointNoPlane, "点的plane应为xz或xy");
641
644
  return new N({
642
645
  lat: l,
643
646
  lon: h,
@@ -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;
@@ -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);
947
- this.mergeChild(i);
976
+ const e = x(t) ? t : [t], i = await m.addCoordinate(this, e);
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,13 +987,13 @@ class Rt {
957
987
  }
958
988
  //更新子节点
959
989
  async updateChild(t) {
960
- const e = g(t) ? t : [t], i = await w.updateCoordinate(this, e);
961
- this.mergeChild(i);
990
+ const e = x(t) ? t : [t], i = await m.updateCoordinate(this, e);
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);
966
- this.mergeChild(i);
995
+ const e = x(t) ? t : [t], i = await m.bindCoordinate(this, e);
996
+ return this.mergeChild(i), i;
967
997
  }
968
998
  // 合并子节点,没有查询到节点就插入
969
999
  async mergeChild(t) {
@@ -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 = [z.CADModel, z.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 = z.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
+ z as CoordinateModelType,
1678
1708
  C as CoordinateStatus,
1679
1709
  v as CoordinateType,
1680
1710
  At as DataHelper,
1681
- w as DataSource,
1711
+ m as DataSource,
1682
1712
  N 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);this.mergeChild(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);this.mergeChild(i)}async bindChild(t){const e=v(t)?t:[t],i=await p.bindCoordinate(this,e);this.mergeChild(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 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||{}),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||{}),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||{}),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"]=R.JSON),a===M.GET&&l){const x=new URLSearchParams(l);r+=`?${x.toString()}`}let m;return a===M.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(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 E(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 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 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=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.querySelectorAll('link[rel="stylesheet"]')).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:K,debounce:Pt,deepMerge:j,deepMergeProps:tt,error:kt,getDiffProps:et,getImageTransform:It,inBrowser:mt,is:S,isArray:v,isBoolean:gt,isDate:wt,isDef:V,isElement:xt,isFunction:A,isNull:Q,isNullOrUnDef:Tt,isNumeric:E,isObject:P,isPromise:St,isRegExp:Mt,isSameValue:bt,isString:pt,isUnDef:W,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:l,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(l)||E(c))&&(this.yaw=Number(h)||0,this.pitch=Number(l)||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),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===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(p.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(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=[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 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=C,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=R,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.9",
3
+ "version": "2.0.11",
4
4
  "private": false,
5
5
  "description": "Shared utilities for VSLeem RealSee Viewer",
6
6
  "main": "./dist/index.umd.js",