zhihao-ui 1.3.31 → 1.3.33

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (30) hide show
  1. package/dist/es/{BaseInfo-lEzbpRa-.js → BaseInfo-BhnEjLKF.js} +1 -1
  2. package/dist/es/{BaseItem-Ba9x8bVd.js → BaseItem-C4NJy1i4.js} +3 -3
  3. package/dist/es/{Button-BEYBRduL.js → Button-CGndQwez.js} +2 -2
  4. package/dist/es/{DatePicker-LYMSAOex.js → DatePicker-Dy1K1cJQ.js} +3 -3
  5. package/dist/es/{DetailHeader-BmAOi010.js → DetailHeader-DaabNj_4.js} +3 -3
  6. package/dist/es/{DetailSubTitle-BiVypTgw.js → DetailSubTitle-CzFZPXeE.js} +2 -2
  7. package/dist/es/{Dialog-CxVSOXNv.js → Dialog-BUW6ag1B.js} +3 -3
  8. package/dist/es/{DiyDataTable-Ccfx_x83.js → DiyDataTable-D-UZVciZ.js} +4 -4
  9. package/dist/es/{EditInfoPair-B13CtS67.js → EditInfoPair-B2f6zoGY.js} +3 -3
  10. package/dist/es/{FileWrapper-BS8tKD93.js → FileWrapper-D4IxJemr.js} +4 -4
  11. package/dist/es/{Grid-C2SGqgzr.js → Grid-DIs695lY.js} +2 -2
  12. package/dist/es/{InfoPair-Dh7Wmmxp.js → InfoPair-Ce7nDfxD.js} +3 -3
  13. package/dist/es/{Input-D2hOF2Qz.js → Input-C5X2X_YD.js} +3 -3
  14. package/dist/es/{Loading-D_TaBO77.js → Loading-BgoEv5qE.js} +2 -2
  15. package/dist/es/Map-DGFTTIAd.js +2157 -0
  16. package/dist/es/{MessageBox-jeff4H3s.js → MessageBox-DiGH5x51.js} +2 -2
  17. package/dist/es/{MoneyInput-DsPqwnRE.js → MoneyInput-D0kYiOfP.js} +8 -8
  18. package/dist/es/{PageHeadPanel-DzTiZsrm.js → PageHeadPanel-C6IdOq6I.js} +2 -2
  19. package/dist/es/{Table-DVUXl407.js → Table-B_3YA1mb.js} +5 -5
  20. package/dist/es/{ToolTips-D6btU9GM.js → ToolTips-CiQHxGrw.js} +6 -6
  21. package/dist/es/index.js +22 -22
  22. package/dist/es/{utils-BOPMDuno.js → utils-D2wHR1YB.js} +1 -1
  23. package/dist/es/{vendor-DHIg4jsE.js → vendor-D2mv9LHk.js} +1226 -1227
  24. package/dist/index.css +1 -1
  25. package/dist/types/components/Map/function/port.d.ts +2 -2
  26. package/dist/types/components/Map/function/ship/index.d.ts +1 -0
  27. package/dist/umd/index.css +1 -1
  28. package/dist/umd/index.umd.cjs +44 -46
  29. package/package.json +1 -1
  30. package/dist/es/Map-Ch5zj0xU.js +0 -2175
@@ -0,0 +1,2157 @@
1
+ import { defineComponent as Ye, openBlock as Be, createElementBlock as qe, createElementVNode as Ae, ref as I, computed as Te, h as ne, createVNode as De, render as Ft, reactive as St, onMounted as Nt, onUnmounted as Vt } from "vue";
2
+ import { S as $t, M as Ue, T as me, X as we, p as ee, V as zt, q as Ot, t as Rt, h as lt, r as He, s as Zt, u as ge, F as J, v as X, O as ce, P as le, w as ke, x as Ne, L as Fe, y as Gt, z as Ie, A as ie, B as he, C as de, D as ve, i as At, G as Ve, H as Dt, I as Oe, J as Wt, K as Yt, N as st, Q as Se, R as We, U as et, W as Bt, Y as qt, Z as Ht } from "./vendor-D2mv9LHk.js";
3
+ import { _ as Xe } from "./Button-CGndQwez.js";
4
+ import { w as Xt } from "./utils-D2wHR1YB.js";
5
+ const jt = { id: "scale-line-container" }, Qt = /* @__PURE__ */ Ye({
6
+ __name: "scaleLine",
7
+ setup(e, { expose: r }) {
8
+ return r({
9
+ setScaleLine: (s, a) => {
10
+ a || (a = "metric");
11
+ const o = new $t({
12
+ units: a
13
+ }), u = document.getElementById("scale-line-container");
14
+ u && (o.setTarget(u), s.addControl(o));
15
+ }
16
+ }), (s, a) => (Be(), qe("div", jt));
17
+ }
18
+ }), Jt = /* @__PURE__ */ Xe(Qt, [["__scopeId", "data-v-2bc5dee8"]]), Kt = { class: "zoom" }, _t = /* @__PURE__ */ Ye({
19
+ __name: "zoomControl",
20
+ props: {
21
+ mapInstance: {
22
+ type: Object,
23
+ default: () => null
24
+ }
25
+ },
26
+ setup(e) {
27
+ const r = e;
28
+ console.log("props", r);
29
+ const l = () => {
30
+ console.log("props");
31
+ const { setZoom: a, getZoom: o, getInstall: u } = r.mapInstance.methods;
32
+ if (!u()) return;
33
+ const t = o();
34
+ t && a(t + 1);
35
+ }, s = () => {
36
+ const { setZoom: a, getZoom: o, getInstall: u } = r.mapInstance.methods;
37
+ if (!u()) return;
38
+ const t = o();
39
+ t && a(t - 1);
40
+ };
41
+ return (a, o) => (Be(), qe("div", Kt, [
42
+ Ae("div", {
43
+ class: "button big-button",
44
+ onClick: l
45
+ }, " + "),
46
+ Ae("div", {
47
+ class: "button small-button",
48
+ onClick: s
49
+ }, " - ")
50
+ ]));
51
+ }
52
+ }), Ut = /* @__PURE__ */ Xe(_t, [["__scopeId", "data-v-c39c3075"]]), Pe = "a6e8f78974f2581f2ca00485b40c948f", te = {
53
+ // 地图默认层级
54
+ default: 13,
55
+ // 地图缩放最小层级
56
+ min: 3,
57
+ // 地图缩放最大层级
58
+ max: 18,
59
+ // 船形图标最小渲染层级
60
+ shipModelMin: 13,
61
+ // 船形图标最小渲染层级
62
+ shipTriggleMin: 16,
63
+ // 船形图标最大渲染层级
64
+ shipModelMax: 18,
65
+ //根据原系统canvas图片转换svg长宽比例计算缩放值
66
+ scaleNum: 0.555
67
+ }, K = {
68
+ // 经纬度 源数据 地理坐标 WGS84
69
+ data: "EPSG:4326",
70
+ // 墨卡托投影坐标 渲染坐标
71
+ mercator: "EPSG:3857"
72
+ }, It = [114.84, 30.52], it = "https://static.zhihaoscm.cn/", $e = 2003750834e-2;
73
+ var ue = ((e) => (e.vectorTile = `https://t0.tianditu.gov.cn/vec_w/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=vec&TILEMATRIXSET=w&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}&tk=${Pe}`, e.vectorTileMark = `https://t0.tianditu.gov.cn/cva_w/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=cva&TILEMATRIXSET=w&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}&tk=${Pe}`, e.satelliteImgTile = `https://t0.tianditu.gov.cn/img_w/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=img&TILEMATRIXSET=w&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}&tk=${Pe}`, e.satelliteImgTileMark = `https://t0.tianditu.gov.cn/cia_w/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=cia&TILEMATRIXSET=w&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}&tk=${Pe}`, e.greenTile = `${it}/map/tile/{z}/{x}/{y}.png`, e))(ue || {}), xe = /* @__PURE__ */ ((e) => (e[e.M = 1] = "M", e[e.KM = 2] = "KM", e[e.NM = 3] = "NM", e))(xe || {});
74
+ function eo() {
75
+ const e = I(), r = () => e.value, l = () => r().getView(), s = () => {
76
+ var v;
77
+ return (v = l()) == null ? void 0 : v.getZoom();
78
+ }, a = (v) => {
79
+ var S;
80
+ (S = l()) == null || S.setZoom(v);
81
+ }, o = (v, S) => {
82
+ var M;
83
+ (M = l()) == null || M.setCenter(ee([v, S]));
84
+ }, u = () => {
85
+ var S;
86
+ const v = (S = l()) == null ? void 0 : S.getCenter();
87
+ return Rt(v);
88
+ }, y = () => {
89
+ var v;
90
+ return (v = r()) == null ? void 0 : v.getSize();
91
+ }, t = new Ue(), n = (v, S) => {
92
+ m(S);
93
+ const M = {
94
+ zoom: S.zoom,
95
+ center: ee(S.center),
96
+ minZoom: te.min,
97
+ maxZoom: te.max,
98
+ constrainResolution: !0,
99
+ enableRotation: !1,
100
+ multiWorld: !0
101
+ };
102
+ let h = {
103
+ target: v,
104
+ controls: Ot({
105
+ zoom: !1
106
+ }),
107
+ layers: [
108
+ t.get("vectorTile"),
109
+ t.get("vectorTileMark"),
110
+ t.get("satelliteImgTile"),
111
+ t.get("satelliteImgTileMark")
112
+ ],
113
+ view: new zt(M)
114
+ };
115
+ const w = new Ue(h);
116
+ e.value = w;
117
+ }, m = (v) => {
118
+ t.set("vectorTile", new me({
119
+ source: new we({ url: ue.vectorTile }),
120
+ visible: v.layerType === "vector",
121
+ zIndex: 0,
122
+ preload: 1,
123
+ className: "vector"
124
+ })), t.set("vectorTileMark", new me({
125
+ source: new we({ url: ue.vectorTileMark }),
126
+ visible: v.layerType === "vector",
127
+ zIndex: 1,
128
+ preload: 1,
129
+ className: "vector"
130
+ })), t.set("satelliteImgTile", new me({
131
+ source: new we({ url: ue.satelliteImgTile }),
132
+ visible: v.layerType === "satellite",
133
+ zIndex: 0,
134
+ preload: 1,
135
+ className: "satellite"
136
+ })), t.set("satelliteImgTileMark", new me({
137
+ source: new we({ url: ue.satelliteImgTileMark }),
138
+ visible: v.layerType === "satellite",
139
+ zIndex: 1,
140
+ preload: 1,
141
+ className: "satellite"
142
+ })), t.set("greenMark", new me({
143
+ source: new we({ url: ue.greenTile }),
144
+ visible: v.showGreenLayer,
145
+ zIndex: 2,
146
+ className: "greenTile"
147
+ }));
148
+ };
149
+ return {
150
+ getInstall: r,
151
+ getView: l,
152
+ getZoom: s,
153
+ setZoom: a,
154
+ setCenter: o,
155
+ getCenter: u,
156
+ getSize: y,
157
+ initMap: n,
158
+ setBaseLayerMap: m
159
+ };
160
+ }
161
+ const je = function(e, r) {
162
+ const l = Number(r) / 6e5;
163
+ return [Number(e) / 6e5, l];
164
+ }, to = (e, r) => {
165
+ const l = ee(e), s = r * 1e3, a = [
166
+ l[0] - s,
167
+ l[1] - s,
168
+ l[0] + s,
169
+ l[1] + s
170
+ ], o = Zt(a, K.mercator, K.data);
171
+ return {
172
+ leftTopPoint: { lng: o[0], lat: o[3] },
173
+ rightTopPoint: { lng: o[2], lat: o[3] },
174
+ rightBottomPoint: { lng: o[2], lat: o[1] },
175
+ leftBottomPoint: { lng: o[0], lat: o[1] }
176
+ };
177
+ }, oo = function(e, r) {
178
+ const s = He(e);
179
+ let a = "";
180
+ switch (console.log(r, xe), r) {
181
+ case xe.M:
182
+ a = Math.round(s * 100) / 100 + " m";
183
+ break;
184
+ case xe.KM:
185
+ a = Math.round(s / 1e3 * 100) / 100 + " km";
186
+ break;
187
+ case xe.NM:
188
+ a = (Math.round(s / 1e3 * 100) / 100 / 1.852).toFixed(2) + " nm";
189
+ break;
190
+ }
191
+ return a;
192
+ };
193
+ function ro(e) {
194
+ const r = e[0] * $e / 180;
195
+ let l = Math.log(Math.tan((90 + e[1]) * Math.PI / 360)) / (Math.PI / 180);
196
+ return l = l * $e / 180, [r, l];
197
+ }
198
+ function fe(e = "") {
199
+ let r = e.replace(/&?/g, "&");
200
+ return r = r.replace(/&#x([0-9a-fA-F]+);?/g, (l, s) => {
201
+ const a = parseInt(s, 16);
202
+ return String.fromCodePoint(a);
203
+ }), r;
204
+ }
205
+ const tt = (e) => {
206
+ const r = new ge({
207
+ font: "Normal 14px map-iconfont",
208
+ text: fe(e),
209
+ fill: new J({ color: "#fff" }),
210
+ offsetY: -14
211
+ });
212
+ return new X({
213
+ text: r,
214
+ zIndex: 100
215
+ });
216
+ }, ot = (e, r = "lonlat") => {
217
+ const l = { lon: 0, lat: 0 }, s = e[0] / $e * 180;
218
+ let a = e[1] / $e * 180;
219
+ return a = 180 / Math.PI * (2 * Math.atan(Math.exp(a * Math.PI / 180)) - Math.PI / 2), l.lon = s, l.lat = a, r === "lonlat" ? l : [s, a];
220
+ }, no = (e) => {
221
+ const r = lt.duration(e, "minutes"), l = Math.floor(r.asDays()), s = r.hours(), a = r.minutes();
222
+ let o = `${String(a).padStart(2, "0")}分`;
223
+ return s !== 0 && (o = `${String(s).padStart(2, "0")}时${o}`), l !== 0 && (o = `${String(l).padStart(2, "0")}天${o}`), o;
224
+ }, lo = (e, r) => {
225
+ let l = null;
226
+ const s = async (m) => {
227
+ if (!e || (console.log("vehicleInfo", m), !(m != null && m.lon && (m != null && m.lat)))) return;
228
+ const v = Math.abs(Number(m.lon)) > 180 ? je(m.lon, m.lat) : [m.lon, m.lat];
229
+ a(m, ee(v));
230
+ const S = e == null ? void 0 : e.getView(), M = new le(v);
231
+ S.setCenter(ke(M.getCoordinates(), K.data, K.mercator));
232
+ }, a = (m, v) => {
233
+ const S = `${it}map/car-icon.gif`;
234
+ l || (l = new ce({
235
+ element: document.createElement("div"),
236
+ positioning: "center-center",
237
+ stopEvent: !1
238
+ // 允许交互事件穿透
239
+ }), e.addOverlay(l));
240
+ const M = l.getElement();
241
+ M.style.backgroundImage = `url(${S})`, M.style.width = "80px", M.style.height = "80px";
242
+ const h = (m == null ? void 0 : m.drc) || "";
243
+ M.style.transform = `rotate(${h}deg)`, M.style.backgroundSize = "cover", l == null || l.setPosition(v);
244
+ };
245
+ return {
246
+ location: s,
247
+ remove: () => {
248
+ const m = l == null ? void 0 : l.getElement();
249
+ m && (m.innerHTML = "");
250
+ },
251
+ renderTrack: (m, v, S) => {
252
+ r.render(m, v, S, "truck", 1e3);
253
+ },
254
+ setCenter: (m) => {
255
+ r.setCenter(m);
256
+ },
257
+ closeTrack: () => {
258
+ r.close();
259
+ },
260
+ playTrack: (m, v) => {
261
+ r.play(m, v);
262
+ }
263
+ };
264
+ };
265
+ var ct = /* @__PURE__ */ ((e) => (e[e.发动机使用中 = 0] = "发动机使用中", e[e.锚泊 = 1] = "锚泊", e[e.未操作 = 2] = "未操作", e[e.操纵能力受限 = 3] = "操纵能力受限", e[e.吃水受限 = 4] = "吃水受限", e[e.系泊 = 5] = "系泊", e[e.搁浅 = 6] = "搁浅", e[e.从事捕捞 = 7] = "从事捕捞", e[e.航行中 = 8] = "航行中", e[e.留作将来修正导航状态 = 9] = "留作将来修正导航状态", e[e.高速船留用 = 10] = "高速船留用", e[e.机动船尾推作业 = 11] = "机动船尾推作业", e[e.机动船顶推或侧推作业 = 12] = "机动船顶推或侧推作业", e[e.飞翼船留用 = 13] = "飞翼船留用", e[e.现行的 = 14] = "现行的", e[e.未定义 = 15] = "未定义", e))(ct || {}), oe = /* @__PURE__ */ ((e) => (e.left = "left", e.right = "right", e.front = "front", e.up = "up", e.down = "down", e.back = "back", e))(oe || {});
266
+ const so = (e) => {
267
+ const r = /* @__PURE__ */ new Map(), l = {};
268
+ let s = null;
269
+ const a = "--";
270
+ let o = null;
271
+ const u = document.createElement("div"), y = new ce({
272
+ element: u,
273
+ positioning: "top-left",
274
+ className: "track-label-popup"
275
+ });
276
+ let t, n, m, v, S, M = !1, h = Date.now(), w, N = 0, C = null, b = 20;
277
+ const Y = 8, A = [], q = (i) => {
278
+ var d;
279
+ for (A.unshift(i); A.length > Y; ) {
280
+ const f = A.pop(), p = r.get(f);
281
+ p && ((d = p.getSource()) == null || d.clear(), e == null || e.removeLayer(p), r.delete(f), delete l[f]);
282
+ }
283
+ };
284
+ let B = "";
285
+ const R = ["#ff0000", "#00ff00", "#0079ff", "#ffa500", "#800080", "#008080", "#ffc0cb", "#800000", "#000080", "#808000"], Z = Ne(() => {
286
+ if (s && l[s] && r.get(s).getVisible()) {
287
+ console.log("reRenderTrackLine------------");
288
+ const i = At(F(s, l[s]));
289
+ re(s, i);
290
+ }
291
+ }, 300), F = (i, d) => {
292
+ let f = [];
293
+ const p = Math.max(1, Math.floor(d.length / b));
294
+ return f = d.filter((E, O) => O % p === 0).map((E, O) => {
295
+ if (Number(E.lon) > 180 || Number(E.lat) > 180) {
296
+ const [$, D] = je(E.lon, E.lat);
297
+ E.lon = $, E.lat = D;
298
+ }
299
+ return E.center = [E.lon, E.lat], E.centerPoint = ro(E.center), E.time = lt(E.createdAt).format("YYYY-MM-DD HH:mm:ss"), E.id = i, E.index = O, E;
300
+ }), f;
301
+ }, c = async (i, d, f, p = "ship", L = 200) => {
302
+ if (!e || JSON.stringify(l[i]) === JSON.stringify(d) && s === i || (d = d == null ? void 0 : d.reverse(), y && p === "ship" && (e != null && e.getOverlays().getArray().includes(y) || e.addOverlay(y)), (d == null ? void 0 : d.length) < 2))
303
+ return;
304
+ q(i), s = i, l[i] = d, b = L;
305
+ const E = Object.keys(l).findIndex((O) => O === i) || 0;
306
+ B = f || R[E > 10 ? 10 : E], await k(), await Je(s);
307
+ }, x = (i) => {
308
+ const d = new de();
309
+ return new he({
310
+ source: d,
311
+ visible: !1,
312
+ // 默认隐藏
313
+ className: `track-layer-${i}`,
314
+ renderBuffer: 1024
315
+ // 增大渲染缓冲区
316
+ });
317
+ }, g = (i) => {
318
+ r.forEach((d, f) => {
319
+ var L;
320
+ const p = f === i;
321
+ d.getVisible() !== p && (d.setVisible(p), e.getLayers().getArray().includes(d) || e.addLayer(d), p || (L = d.getSource()) == null || L.clear());
322
+ }), s = i;
323
+ }, k = async () => {
324
+ const i = s;
325
+ if (!r.has(i)) {
326
+ const E = x(i);
327
+ r.set(i, E);
328
+ }
329
+ await g(i);
330
+ const d = B || "", f = l[i] || [];
331
+ if (!(f && f.length > 1)) return [];
332
+ let p = [];
333
+ p = F(i, f);
334
+ const L = p.map((E) => E.centerPoint);
335
+ p.length >= 2 && await T(i, L, d);
336
+ }, T = (i, d, f) => {
337
+ const p = new Fe(d), L = r.get(i).getSource(), E = L.getFeatureById(i);
338
+ if (E)
339
+ E.setGeometry(p), E.setId(i), E.setStyle(V(f)), C = E;
340
+ else {
341
+ const O = new ie({ geometry: p });
342
+ O.setId(i), O.set("type", "line"), O.setStyle(V(f)), L.addFeature(O), C = O;
343
+ }
344
+ return C;
345
+ }, V = (i) => new X({
346
+ stroke: new ve({
347
+ color: i,
348
+ width: 2
349
+ })
350
+ }), G = (i, d, f) => {
351
+ const p = i == null ? void 0 : i.get("trackId");
352
+ if (i && p && d === "hover") {
353
+ e.getTargetElement().style.cursor = p ? "pointer" : "";
354
+ const L = i.get("data"), E = j(L), O = f == null ? void 0 : f.coordinate;
355
+ O && (u.querySelector(".popup-content"), u.innerHTML = E, y == null || y.setPosition(O));
356
+ } else
357
+ y && y.setPosition(void 0);
358
+ }, j = (i) => {
359
+ if (!(i != null && i.time)) return;
360
+ let d = "";
361
+ return i != null && i.stayTime && (d = `
362
+ <div class="item w-100">
363
+ <div class="item-label">停泊时间约</div>
364
+ <div class="item-item">${no(Number(i.stayTime))}</div>
365
+ </div>
366
+ `), `
367
+ <div class="track-point-popup">
368
+ <div class="item">
369
+ <div class="item-label">状态</div>
370
+ <div class="item-item">${i != null && i.sailStatus ? ct[i.sailStatus] : a}</div>
371
+ </div>
372
+ <div class="item">
373
+ <div class="item-label">航速</div>
374
+ <div class="item-item">${i.speed || a}</div>
375
+ </div>
376
+ <div class="item">
377
+ <div class="item-label">艏向</div>
378
+ <div class="item-item">${i.hdg || a}</div>
379
+ </div>
380
+ <div class="item">
381
+ <div class="item-label">航向</div>
382
+ <div class="item-item">${i.cog || a}</div>
383
+ </div>
384
+ <div class="item">
385
+ <div class="item-label">经度</div>
386
+ <div class="item-item">${i.lon || a}</div>
387
+ </div>
388
+ <div class="item">
389
+ <div class="item-label">纬度</div>
390
+ <div class="item-item">${i.lat || a}</div>
391
+ </div>
392
+ <div class="item w-100">
393
+ <div class="item-label">时间</div>
394
+ <div class="item-item">${i.time}</div>
395
+ </div>
396
+ ${d ?? d}
397
+ </div>`;
398
+ }, z = (i) => {
399
+ const f = i.map(($) => {
400
+ const D = e.getPixelFromCoordinate(ee($.center));
401
+ return {
402
+ ...$,
403
+ original: $,
404
+ pixel: D,
405
+ distance: 0
406
+ // 先初始化,后续计算
407
+ };
408
+ });
409
+ let p = 0;
410
+ f[0].distance = 0;
411
+ for (let $ = 1; $ < f.length; $++) {
412
+ const D = f[$ - 1].pixel, H = f[$].pixel, _ = H[0] - D[0], P = H[1] - D[1];
413
+ p += Math.sqrt(_ * _ + P * P), f[$].distance = p;
414
+ }
415
+ const L = f.filter(
416
+ ($, D) => D === 0 || D === f.length - 1
417
+ ), E = [];
418
+ for (let $ = 0; $ < L.length; $++) {
419
+ const D = L[$];
420
+ if (E.push(D), $ < L.length - 1) {
421
+ const H = L[$ + 1], _ = H.distance - D.distance, P = Math.floor(_ / 100);
422
+ for (let W = 1; W <= P; W++) {
423
+ const Q = D.distance + W * 100;
424
+ if (Q >= H.distance) break;
425
+ const U = ae(
426
+ f,
427
+ Q
428
+ );
429
+ U && E.push(U);
430
+ }
431
+ }
432
+ }
433
+ return Array.from(
434
+ new Map(E.map(($) => [$.distance.toFixed(2), $])).values()
435
+ ).map(($) => ({
436
+ ...$.original,
437
+ // 优先保留原始数据
438
+ ...$,
439
+ // 覆盖坐标等计算属性
440
+ coord: $.coord,
441
+ // 确保使用插值后的坐标
442
+ pixel: $.pixel,
443
+ distance: $.distance
444
+ }));
445
+ };
446
+ function ae(i, d) {
447
+ for (let f = 1; f < i.length; f++) {
448
+ const p = i[f - 1], L = i[f];
449
+ if (d >= p.distance && d <= L.distance) {
450
+ const E = (d - p.distance) / (L.distance - p.distance), O = p.pixel[0] + E * (L.pixel[0] - p.pixel[0]), $ = p.pixel[1] + E * (L.pixel[1] - p.pixel[1]), D = e == null ? void 0 : e.getCoordinateFromPixel([O, $]);
451
+ return {
452
+ ...p,
453
+ // 继承前一个点的属性(可调整)
454
+ coord: D,
455
+ pixel: [O, $],
456
+ distance: d,
457
+ original: void 0
458
+ // 明确标记为插值生成点
459
+ };
460
+ }
461
+ }
462
+ return null;
463
+ }
464
+ const re = async (i, d) => {
465
+ await be(), await pe(i);
466
+ const f = z(d), p = f.map((E) => se(E));
467
+ r.get(i).getSource().addFeatures(p), ht(i, f, d, B), f.forEach((E) => {
468
+ const O = Re(i, B, E);
469
+ e.addOverlay(O);
470
+ });
471
+ }, se = (i) => {
472
+ const d = new ie({
473
+ geometry: new le(i.centerPoint),
474
+ data: i
475
+ });
476
+ d.set("type", "track_point"), d.set("trackId", i.id), d.set("data", i);
477
+ let f = [
478
+ ...ft(i, B)
479
+ ];
480
+ return (i.index === 0 || i.index === l[i.id].length - 1) && (f = [...yt(i)], d.set("type", "track_begin")), i.state !== void 0 && i.state !== null && (f = [...vt(i)], d.set("type", "track_icon")), d.setStyle(f), d;
481
+ }, Re = (i, d, f) => {
482
+ const p = document.createElement("div");
483
+ p.className = "track-overlay-label", p.style.position = "relative", p.style.backgroundColor = "rgba(255,255,255,0.8)", p.style.border = `1px solid ${d}`, p.style.fontSize = "12px", p.innerHTML = `
484
+ <span>${f.time}</span>
485
+ <svg
486
+ style="position: absolute;right: -20px;top: 0;"
487
+ viewBox="0 0 20 20"
488
+ xmlns="http://www.w3.org/2000/svg"
489
+ width="20"
490
+ height="20">
491
+ <line x1="-20" y1="0"
492
+ x2="20" y2="20"
493
+ stroke="${d}"
494
+ stroke-width="1" />
495
+ `;
496
+ const L = new ce({
497
+ element: p,
498
+ position: ee(f.center),
499
+ positioning: "top-right",
500
+ offset: [-20, -20],
501
+ stopEvent: !1,
502
+ className: "track-label-time-overlay"
503
+ });
504
+ return L.set("class", "track-label-overlay"), L.set("trackId", i), L;
505
+ }, be = () => {
506
+ const i = e == null ? void 0 : e.getOverlays().getArray(), d = i == null ? void 0 : i.filter((f) => f.get("class") === "track-label-overlay");
507
+ d && d.length > 0 && d.forEach((f) => {
508
+ f.setPosition(void 0), f.dispose();
509
+ });
510
+ }, pe = (i) => {
511
+ const d = r.get(i).getSource();
512
+ d.forEachFeature((f) => {
513
+ f.get("type") !== "line" && d.removeFeature(f);
514
+ });
515
+ }, ft = (i, d) => (`${i.time}`, [
516
+ new X({
517
+ // 扩大交互热区
518
+ image: new Ve({
519
+ stroke: new ve({ color: "rgba(0, 0, 0, 0.01)", width: 20 }),
520
+ radius: 3
521
+ })
522
+ }),
523
+ // 轨迹点样式
524
+ new X({
525
+ image: new Ve({
526
+ fill: new J({ color: d }),
527
+ stroke: new ve({ color: "#fff", width: 2 }),
528
+ radius: 3
529
+ })
530
+ })
531
+ // textStyle,
532
+ ]), vt = (i) => {
533
+ const d = "#E31818", f = "#1890FF", p = "&#xe6d2", L = new X({
534
+ text: new ge({
535
+ font: "Normal 22px map-iconfont",
536
+ text: fe(p),
537
+ offsetY: -10,
538
+ fill: new J({
539
+ color: Number(i.state) === 0 ? d : Number(i.state) === 1 ? f : ""
540
+ })
541
+ }),
542
+ zIndex: 99
543
+ }), O = tt("&#xe6e2;"), D = tt("&#xe703;"), H = [];
544
+ return Number(i.state) === 0 ? H.push(O) : Number(i.state) === 1 && H.push(D), H.push(L), H;
545
+ }, ht = (i, d, f, p) => {
546
+ const L = d || [], E = d.length;
547
+ E || (L.push(f[0]), L.push(f[f.length - 1]));
548
+ const O = [];
549
+ for (let D = 0; D < E - 1; D++) {
550
+ let H;
551
+ const _ = d[D], P = (d[D + 1].index + _.index) / 2;
552
+ if (P % 2 === 0)
553
+ H = f[P].centerPoint;
554
+ else {
555
+ const W = f[Math.floor(P)], Q = f[Math.ceil(P)];
556
+ if (W && Q) {
557
+ const [U, Ce] = W.centerPoint, [Le, Ee] = Q.centerPoint;
558
+ H = [(U + Le) / 2, (Ce + Ee) / 2];
559
+ }
560
+ }
561
+ if (H) {
562
+ const W = new ie({
563
+ geometry: new le(H)
564
+ });
565
+ W.set("type", "track_arrow"), W.setStyle(
566
+ new X({
567
+ text: new ge({
568
+ font: "700 12px map-iconfont",
569
+ text: fe("&#xe6bc;"),
570
+ fill: new J({ color: p }),
571
+ // 设置箭头旋转 角度转为弧度
572
+ rotation: Ke(
573
+ d[D].center,
574
+ d[D + 1].center
575
+ ) * (Math.PI / 180)
576
+ })
577
+ })
578
+ ), O.push(W);
579
+ }
580
+ }
581
+ const $ = r.get(i).getSource();
582
+ $ == null || $.addFeatures(O);
583
+ }, Je = (i) => {
584
+ var E, O;
585
+ const d = e.getView(), f = (E = r == null ? void 0 : r.get(i)) == null ? void 0 : E.getSource(), p = C || (i ? f == null ? void 0 : f.getFeatureById(i) : null);
586
+ if (!p) return;
587
+ const L = (O = p == null ? void 0 : p.getGeometry()) == null ? void 0 : O.getExtent();
588
+ if (L != null && L.length)
589
+ try {
590
+ const $ = Gt(L, Math.max(L[2] - L[0], L[3] - L[1]) * 0.02);
591
+ d.fit($);
592
+ } catch ($) {
593
+ console.log($);
594
+ }
595
+ }, yt = (i) => {
596
+ const d = "&#xe69b;", L = i.index === 0 ? "#fcdc3f" : "#ff0000";
597
+ return [new X({
598
+ text: new ge({
599
+ font: "Normal 14px map-iconfont",
600
+ text: fe(d),
601
+ fill: new J({ color: L })
602
+ }),
603
+ zIndex: 101
604
+ })];
605
+ }, mt = () => {
606
+ console.log("清除所有的轨迹-----"), Me(), r.forEach((d) => {
607
+ var f;
608
+ (f = d.getSource()) == null || f.clear(), e == null || e.removeLayer(d);
609
+ }), Object.keys(l).forEach((d) => {
610
+ r.delete(d), delete l[d];
611
+ }), isRender = !1, be();
612
+ }, wt = (i) => {
613
+ const d = r.get(i || s);
614
+ d == null || d.setVisible(!1);
615
+ const f = e.getOverlays().getArray();
616
+ for (let p = 0; p < f.length; ) {
617
+ const L = f[p];
618
+ L.get("class") === "track-label-overlay" ? (L.setPosition(void 0), e.removeOverlay(L)) : p++;
619
+ }
620
+ Me();
621
+ }, xt = (i, d = xe.NM) => {
622
+ const f = {
623
+ id: i,
624
+ length: "--"
625
+ }, L = (l[i] || []).map(
626
+ (O) => ke([O.lon, O.lat], K.data, K.mercator)
627
+ ), E = new Fe(L);
628
+ return f.length = oo(E, d) || "--", f;
629
+ }, bt = (i, d) => {
630
+ kt(String(i), d);
631
+ }, kt = (i, d) => {
632
+ const f = l[String(i)], p = f == null ? void 0 : f.map((L) => [L.lon, L.lat]);
633
+ p && Ct(p, d);
634
+ }, Ze = new X({
635
+ text: new ge({
636
+ font: "700 20px map-iconfont",
637
+ text: fe("&#xe657;"),
638
+ fill: new J({ color: "#ff0000" }),
639
+ rotation: 0
640
+ // 初始旋转角度
641
+ })
642
+ }), pt = (i, d) => {
643
+ var P, W;
644
+ const f = Number(50 * d), p = ((P = i.frameState) == null ? void 0 : P.time) ?? Date.now(), L = p - h;
645
+ if (N = (N + f * L / 1e6) % 2, h = p, N >= 1) {
646
+ Me();
647
+ return;
648
+ }
649
+ const E = n.getCoordinateAt(
650
+ N > 1 ? 2 - N : N
651
+ ), O = n.getCoordinateAt(
652
+ N > 1 ? N - 0.01 : N
653
+ ), $ = n.getCoordinateAt(
654
+ N > 1 ? 2 - N : N + 0.01
655
+ ), H = Ke(
656
+ ot(O, "array"),
657
+ ot($, "array")
658
+ ) * Math.PI / 180;
659
+ (W = Ze.getText()) == null || W.setRotation(H), v.setCoordinates(E);
660
+ const _ = Dt(i);
661
+ _.setStyle(Ze), _.drawGeometry(v), e == null || e.render();
662
+ }, Mt = () => {
663
+ var i;
664
+ M = !0, h = Date.now(), N = 0, v = ((i = m.getGeometry()) == null ? void 0 : i.clone()) || new le([0, 0]), o && (w == null || w.on("postrender", o)), S == null || S.setGeometry(void 0);
665
+ }, Me = () => {
666
+ M && (M = !1, S == null || S.setGeometry(void 0), o && w && w.un("postrender", o), w && (e == null || e.removeLayer(w)), w = null, S = null);
667
+ }, Ct = (i, d) => {
668
+ M && Me(), t = new Ie({
669
+ factor: 1e6
670
+ }).writeGeometry(new Fe(i)), n = new Ie({
671
+ factor: 1e6
672
+ }).readGeometry(t, {
673
+ dataProjection: K.data,
674
+ featureProjection: K.mercator
675
+ }), m = new ie({
676
+ type: "icon",
677
+ geometry: new le(n.getFirstCoordinate())
678
+ });
679
+ const f = m.getGeometry();
680
+ v = f ? f.clone() : new le([0, 0]), S = new ie({
681
+ type: "geoMarker",
682
+ style: Ze,
683
+ geometry: v
684
+ }), w = new he({
685
+ source: new de({
686
+ features: [S]
687
+ })
688
+ }), e == null || e.addLayer(w), o = (p) => pt(p, d), Mt();
689
+ }, Ke = (i, d, f) => {
690
+ function p(P) {
691
+ return 180 * (P % (2 * Math.PI)) / Math.PI;
692
+ }
693
+ function L(P) {
694
+ return P % 360 * Math.PI / 180;
695
+ }
696
+ function E(P) {
697
+ var W;
698
+ if (!P) throw new Error("Coordinate is required");
699
+ if (!Array.isArray(P)) {
700
+ if ((P == null ? void 0 : P.type) === "Feature" && (P == null ? void 0 : P.geometry) !== null && ((W = P == null ? void 0 : P.geometry) == null ? void 0 : W.type) === "Point")
701
+ return P == null ? void 0 : P.geometry.coordinates;
702
+ if (P.type === "Point") return (P == null ? void 0 : P.coordinates) || [];
703
+ }
704
+ if (Array.isArray(P) && P.length >= 2 && !Array.isArray(P[0]) && !Array.isArray(P[1]))
705
+ return P;
706
+ throw new Error(
707
+ "Coordinate must be GeoJSON Point or an Array of numbers"
708
+ );
709
+ }
710
+ function O(P, W, Q = {}) {
711
+ if (Q.final)
712
+ return function(Tt, Pt) {
713
+ return (O(Pt, Tt) + 180) % 360;
714
+ }(P, W);
715
+ const U = E(P), Ce = E(W), Le = L(U[0]), Ee = L(Ce[0]), _e = L(U[1]), Ge = L(Ce[1]), Lt = Math.sin(Ee - Le) * Math.cos(Ge), Et = Math.cos(_e) * Math.sin(Ge) - Math.sin(_e) * Math.cos(Ge) * Math.cos(Ee - Le);
716
+ return p(Math.atan2(Lt, Et));
717
+ }
718
+ function $(P) {
719
+ return !isNaN(P) && P !== null && !Array.isArray(P);
720
+ }
721
+ function D(P, W = {}, Q = {}) {
722
+ return P || console.log("Coordinates are required"), Array.isArray(P) || console.log("Coordinates must be an Array"), P.length < 2 && console.log("Coordinates must be at least 2 numbers long"), (!$(P[0]) || !$(P[1])) && console.log("Coordinates must contain numbers"), H({ type: "Point", coordinates: P }, W, Q);
723
+ }
724
+ function H(P, W = {}, Q = {}) {
725
+ const U = {
726
+ type: "Feature",
727
+ id: "",
728
+ properties: {},
729
+ bbox: {},
730
+ geometry: {}
731
+ };
732
+ return Q.id !== void 0 && (U.id = Q.id), Q.bbox && (U.bbox = Q.bbox), U.properties = W, U.geometry = P, U;
733
+ }
734
+ const _ = O(D(i), D(d), f);
735
+ return _ < 0 ? 360 + _ : _;
736
+ };
737
+ return {
738
+ render: c,
739
+ remove: mt,
740
+ play: bt,
741
+ setCenter: Je,
742
+ close: wt,
743
+ getLength: xt,
744
+ handleTrackMapEvent: G,
745
+ reRenderTrackLine: Z
746
+ };
747
+ };
748
+ function io(e) {
749
+ console.log("useShipOverlay", e);
750
+ const r = I(null), l = Te(() => ({
751
+ "--overlay-color": "#FFF",
752
+ "--bg-color1": e.colors && e.colors[0] ? e.colors[0] : "#ffffff",
753
+ // 默认第一个颜色
754
+ "--bg-color2": e.colors && e.colors[1] ? e.colors[1] : "#ffffff",
755
+ "--bg-color": "#ffffff",
756
+ position: "relative",
757
+ "pointer-events": "none"
758
+ })), s = Te(() => {
759
+ var u;
760
+ return {
761
+ position: "relative",
762
+ "border-radius": "1px",
763
+ "background-color": "var(--content-bg)",
764
+ color: "#000",
765
+ padding: "2px 5px 2px 0px",
766
+ font: "500 Normal 12px",
767
+ "font-size": "12px",
768
+ "box-shadow": "0 2px 10px rgba(0, 0, 0, 0.2)",
769
+ "white-space": "nowrap",
770
+ border: "1px solid #FFF",
771
+ "pointer-events": "auto",
772
+ // 'transition': 'background-color 0.5s ease, border 0.5s ease',
773
+ "z-index": "1",
774
+ display: "flex",
775
+ "align-items": "center",
776
+ animation: e.selected ? e.colors && ((u = e.colors) == null ? void 0 : u.length) >= 2 ? "blink-dual 2s ease-in-out infinite" : "blink-single 1.5s ease-in-out infinite" : "none"
777
+ // "animation": props.selected ? 'blink 1.5s ease-in-out infinite' : 'none', // 动画开关
778
+ };
779
+ }), a = Te(() => ({
780
+ width: "14px",
781
+ height: "14px",
782
+ margin: "1px 5px 1px 1px",
783
+ "background-color": "var(--attention-bg)"
784
+ })), o = Te(() => ({
785
+ position: "absolute",
786
+ top: "0px",
787
+ color: "var(--overlay-color)",
788
+ "pointer-events": "none",
789
+ transform: "translateY(-1px)",
790
+ "z-index": "0",
791
+ width: "20px",
792
+ height: "20px",
793
+ overflow: "visible",
794
+ left: "-20px"
795
+ }));
796
+ return () => ne("div", {
797
+ ref: r,
798
+ class: "ship-overlay-container",
799
+ style: l.value
800
+ }, [
801
+ ne(
802
+ "div",
803
+ {
804
+ class: "ship-overlay-content",
805
+ style: s.value
806
+ },
807
+ [
808
+ ne("div", {
809
+ style: e.selected ? a.value : {}
810
+ }, ""),
811
+ ne("div", {
812
+ class: "text",
813
+ style: {
814
+ fontSize: "12px",
815
+ fontWeight: 500,
816
+ fontFamily: "Arial"
817
+ }
818
+ }, e.name || "未命名船舶"),
819
+ ne("div", {
820
+ class: "icons",
821
+ style: {
822
+ color: "#3370ff"
823
+ }
824
+ }, [
825
+ e.existDevice ? ne("i", {
826
+ class: "map-iconfont icon-camera",
827
+ style: {
828
+ fontSize: "12px"
829
+ }
830
+ }) : "",
831
+ e.existMobile ? ne("i", {
832
+ class: "map-iconfont icon-tele",
833
+ style: {
834
+ fontSize: "12px"
835
+ }
836
+ }) : "",
837
+ e.existWaterGauge ? ne("i", {
838
+ class: "map-iconfont icon-ruler",
839
+ style: {
840
+ fontSize: "12px"
841
+ }
842
+ }) : ""
843
+ ])
844
+ ]
845
+ ),
846
+ ne("svg", {
847
+ class: "ship-overlay-line",
848
+ style: o.value,
849
+ viewBox: "0 0 20 20",
850
+ xmlns: "http://www.w3.org/2000/svg"
851
+ }, [
852
+ ne("line", {
853
+ x1: "0",
854
+ y1: "20",
855
+ x2: "20",
856
+ y2: "4",
857
+ stroke: "white",
858
+ "stroke-width": "1"
859
+ })
860
+ ])
861
+ ]);
862
+ }
863
+ I([]);
864
+ function co(e, r, l, s) {
865
+ if (r) {
866
+ const a = new ce({
867
+ element: l,
868
+ positioning: "top-left",
869
+ id: "label-" + (s == null ? void 0 : s.id),
870
+ offset: [20, -20],
871
+ autoPan: !1,
872
+ position: r,
873
+ className: s.blinking ? "ship-label-overlay-blinking" : "ship-label-overlay"
874
+ });
875
+ a.set("class", "zh-map-ship-overlay"), e.addOverlay(a);
876
+ }
877
+ }
878
+ const ao = (e) => {
879
+ const { spd: r, hdg: l, cog: s } = e;
880
+ return r ? l !== null && +l != 511 && s !== null ? s - +l >= 3 ? oe.right : s - +l <= -3 ? oe.left : oe.front : oe.front : "";
881
+ }, ye = (e, r) => {
882
+ const { shipData: l } = r.getProperties(), s = at(e), a = Qe(e, l, s);
883
+ return uo(r, a, s);
884
+ }, at = (e) => {
885
+ const r = e == null ? void 0 : e.getView().getZoom();
886
+ return r <= te.shipModelMax && r >= te.shipTriggleMin ? "ship" : "triangle";
887
+ }, Qe = (e, r, l) => {
888
+ if (l === "ship") {
889
+ const { len: s, wid: a } = r, o = 97, u = 20, t = 1 / (e == null ? void 0 : e.getView().getResolution()), n = s * t / o, m = a * t / u, v = Math.min(n, m);
890
+ return v < 0.2 ? 0.2 : v > 2 ? 2 : v;
891
+ }
892
+ return te.scaleNum;
893
+ }, uo = (e, r, l) => {
894
+ const { color: s, direct: a, isHighlight: o, shipData: u } = e.getProperties(), y = ((u == null ? void 0 : u.cog) - 90 + 360) % 360;
895
+ return new X({
896
+ image: new Oe({
897
+ src: t(),
898
+ scale: r || te.scaleNum,
899
+ anchor: [0.5, 0.5],
900
+ rotation: y * Math.PI / 180,
901
+ rotateWithView: !1
902
+ })
903
+ });
904
+ function t() {
905
+ return `data:image/svg+xml;utf8,${encodeURIComponent(n())}`;
906
+ }
907
+ function n() {
908
+ switch (l) {
909
+ case "triangle":
910
+ return `<svg width="41" height="24" viewBox="0 0 41 24" fill="none" xmlns="http://www.w3.org/2000/svg">
911
+ <path d="M30.8843 12.6777L2.21343 21.7067C1.75559 21.8509 1.28947 21.509 1.28947 21.029L1.28947 2.97103C1.28947 2.49102 1.75558 2.14913 2.21342 2.29331L30.8843 11.3223C31.5471 11.531 31.5471 12.469 30.8843 12.6777Z"
912
+ fill="${s}" stroke="${o ? "#FF2424" : "black"}" stroke-width="${o ? "2" : "0.578947"}" />
913
+ <!--path船航向左边或者向前-->
914
+ ${a === oe.left && `<path d="M30 12L40 12L40 8" stroke="${o ? "#FF2424" : "black"}" stroke-width="2"/>`}
915
+ <!--path船航向右边-->
916
+ ${a === oe.right && `<path d="M30 12L40 12L40 16" stroke="${o ? "#FF2424" : "black"}" stroke-width="2"/>`}
917
+ <!--path黑线无左右-->
918
+ ${a === oe.front && `<path d="M30 12L40 12" stroke="${o ? "#FF2424" : "black"}" stroke-width="1.5"/>`}
919
+ </svg>
920
+ `;
921
+ case "ship":
922
+ return `<svg width="97" height="20" viewBox="0 0 97 20" fill="none" xmlns="http://www.w3.org/2000/svg">
923
+ <path d="M0.289474 17.3433L0.289474 2.65655C0.289474 2.28572 0.574654 1.97725 0.944343 1.9482L22.0544 0.289473L67.5204 0.289473C67.6295 0.289473 67.7372 0.314613 67.835 0.362943L86.0565 9.3629C86.5844 9.6236 86.5844 10.3763 86.0565 10.637L67.835 19.6371C67.7372 19.6854 67.6295 19.7105 67.5203 19.7105L22.0544 19.7105L0.944343 18.0517C0.574653 18.0226 0.289474 17.7142 0.289474 17.3433Z"
924
+ fill="${s}" stroke="${o ? "#FF2424" : "black"}" stroke-width="${o ? "4" : "0.578947"}"/>
925
+ ${a === oe.left && `<path d="M86 10L96 10L96 6" stroke="${o ? "#FF2424" : "black"}" stroke-width="1.5"/>`}
926
+ ${a === oe.right && `<path d="M86 10L96 10L96 14" stroke="${o ? "#FF2424" : "black"}" stroke-width="1.5"/>`}
927
+ ${a === oe.front && `<path d="M86 10L96 10" stroke="${o ? "#FF2424" : "black"}" stroke-width="1.5"/>`}
928
+ </svg>
929
+ `;
930
+ default:
931
+ return "";
932
+ }
933
+ }
934
+ }, go = (e, r) => {
935
+ const l = dt(e, r), s = r.id, { lon: a, lat: o } = r, u = new ce({
936
+ element: l,
937
+ position: ee([a, o]),
938
+ id: "selected-" + s,
939
+ positioning: "center-center",
940
+ offset: [0, 5],
941
+ className: "ship-selected-overlay"
942
+ });
943
+ return u.set("class", "ship-overlay-selected"), u;
944
+ }, dt = (e, r) => {
945
+ const l = at(e), s = Qe(e, r, l), a = l === "ship" ? 109 : 49, o = `
946
+ <svg style="transform:scale(${s});" xmlns="http://www.w3.org/2000/svg" width="${a}" height="${a}" viewBox="0 0 49 49" fill="none">
947
+ <path d="M1.99982 46.9998L1.99982 1.99982L46.9998 1.99982L46.9998 46.9998L1.99982 46.9998Z" fill="#FF2424" fill-opacity="0.2"/>
948
+ <path fill-rule="evenodd" clip-rule="evenodd" d="M19.9998 0.5V3.5L3.49976 3.5V20H0.499756V0.500002L19.9998 0.5ZM45.4998 3.5H28.9998V0.5H48.4998V20H45.4998V3.5ZM48.4998 29L48.4998 48.5H28.9998V45.5H45.4998L45.4998 29H48.4998ZM3.49976 45.5L3.49976 29H0.499756L0.499758 48.5L19.9998 48.5V45.5L3.49976 45.5Z" fill="#FF2424"/>
949
+ </svg>
950
+ `, u = document.createElement("div");
951
+ return u.className = "ship-overlay-selected", u.innerHTML = o, u;
952
+ }, fo = (e, r) => {
953
+ const { lon: l, lat: s, blinking: a } = r, o = ut(r);
954
+ l && s && co(e, ee([l, s]), o, { ...r, blinking: a });
955
+ }, ut = (e) => {
956
+ const r = document.createElement("div");
957
+ r.className = "ship-overlay-box", r.style.position = "relative";
958
+ const { lon: l, lat: s, blinking: a, blinkingColors: o, name: u } = e, y = De({
959
+ setup() {
960
+ return io({
961
+ position: [l + 2e-3, s + 2e-3],
962
+ selected: a,
963
+ name: u,
964
+ colors: o || [],
965
+ existDevice: e == null ? void 0 : e.existDevice,
966
+ existMobile: e == null ? void 0 : e.existMobile,
967
+ existWaterGauge: e == null ? void 0 : e.existWaterGauge
968
+ });
969
+ }
970
+ });
971
+ return Ft(y, r), r;
972
+ }, rt = (e) => {
973
+ const r = [];
974
+ return e.existDevice && r.push("&#xe687;"), e.existMobile && r.push("&#xe688;"), e.existWaterGauge && r.push("&#xe686;"), r;
975
+ };
976
+ function vo() {
977
+ const e = [
978
+ "left-top",
979
+ "left-middle",
980
+ "left-bottom",
981
+ "right-top",
982
+ "right-middle",
983
+ "right-bottom"
984
+ ];
985
+ return e[Math.floor(Math.random() * e.length)];
986
+ }
987
+ const ho = window.devicePixelRatio || 1;
988
+ function yo(e, r, l = "left-bottom", s = 2) {
989
+ const a = document.createElement("canvas"), o = a.getContext("2d");
990
+ if (!o) return "";
991
+ const u = 2, y = 8, t = 16, n = window.devicePixelRatio || 1, m = "500 12px Arial", v = "14px map-iconfont";
992
+ o.font = m;
993
+ const M = o.measureText(e).width;
994
+ o.font = v;
995
+ const h = r.map((k) => ({ width: o.measureText(fe(k)).width, height: 14 })), w = h.reduce((k, T) => k + T.width, 0), N = (r.length - 1) * s, C = y + M + w + N + y, b = u + 14 + u;
996
+ let Y, A, q = 0, B = 0, R = 0, Z = 0, F = 0, c = 0;
997
+ switch (Y = t + C, l) {
998
+ case "right-top":
999
+ A = t + b, q = 0, B = t + b, R = t, Z = 0, F = t, c = 0;
1000
+ break;
1001
+ case "right-middle":
1002
+ A = b, q = 0, B = b / 2, R = t, Z = b / 2, F = t, c = 0;
1003
+ break;
1004
+ case "right-bottom":
1005
+ A = t + b, q = 0, B = 0, R = t, Z = t, F = t, c = t;
1006
+ break;
1007
+ case "left-top":
1008
+ A = t + b, q = C, B = t, R = C + t, Z = b + t, F = 0, c = 0;
1009
+ break;
1010
+ case "left-middle":
1011
+ A = b, q = C, B = b / 2, R = C + t, Z = b / 2, F = 0, c = 0;
1012
+ break;
1013
+ case "left-bottom":
1014
+ A = t + b, q = C, B = b, R = C + t, Z = 0, F = 0, c = t;
1015
+ break;
1016
+ }
1017
+ A = A + u, a.width = Math.round(Y * n), a.height = Math.round(A * n), o.scale(n, n), o.clearRect(0, 0, Y, A), o.beginPath(), o.moveTo(q, B), o.lineTo(R, Z), o.strokeStyle = "#FFF", o.lineWidth = 1, o.stroke(), o.fillStyle = "#FFF", o.fillRect(F, c, C, b), o.font = m, o.textBaseline = "middle";
1018
+ const x = c + u + b / 2;
1019
+ o.strokeStyle = "#ffffff", o.lineWidth = 1, o.strokeText(e, F + y, x), o.fillStyle = "#000000", o.fillText(e, F + y, x), o.font = v, o.fillStyle = "#3370ff";
1020
+ let g = F + y + M + s;
1021
+ return r.length > 0 && r.forEach((k, T) => {
1022
+ const V = c + u + b / 2;
1023
+ o.fillText(fe(k), g, V), g += h[T].width + s;
1024
+ }), a.toDataURL("image/png");
1025
+ }
1026
+ const nt = (e, r) => {
1027
+ const { name: l, rightIcons: s, selected: a } = e.getProperties(), o = r !== 1 ? vo() : "right-top", u = yo(l, s, o);
1028
+ let y = [0, 0];
1029
+ switch (o) {
1030
+ case "right-top":
1031
+ y = [0, 1];
1032
+ break;
1033
+ case "right-middle":
1034
+ y = [0, 0.5];
1035
+ break;
1036
+ case "right-bottom":
1037
+ y = [0, 0];
1038
+ break;
1039
+ case "left-top":
1040
+ y = [1, 1];
1041
+ break;
1042
+ case "left-middle":
1043
+ y = [1, 0.5];
1044
+ break;
1045
+ case "left-bottom":
1046
+ y = [1, 0];
1047
+ break;
1048
+ }
1049
+ return new X({
1050
+ image: new Oe({
1051
+ src: u,
1052
+ anchor: y,
1053
+ displacement: [0, 0],
1054
+ scale: 1 / ho,
1055
+ anchorXUnits: "fraction",
1056
+ anchorYUnits: "fraction"
1057
+ }),
1058
+ zIndex: a ? 100 : 10
1059
+ });
1060
+ }, mo = (e) => {
1061
+ let r = null, l = null;
1062
+ const s = new de(), a = new Wt({
1063
+ source: s,
1064
+ className: "zh-map--ship-layer",
1065
+ renderBuffer: 300,
1066
+ zIndex: 101,
1067
+ hitTolerance: 10
1068
+ }), o = new de(), u = new he({
1069
+ source: o,
1070
+ className: "zh-map--ship-label-layer",
1071
+ zIndex: 102,
1072
+ updateWhileInteracting: !1,
1073
+ updateWhileAnimating: !1,
1074
+ declutter: !0
1075
+ });
1076
+ e == null || e.addLayer(a), e == null || e.addLayer(u);
1077
+ let y = null, t = "", n = {}, m = {};
1078
+ const v = (c) => {
1079
+ if (!c || !e) return;
1080
+ const x = (l == null ? void 0 : l.id) || (r == null ? void 0 : r.get("id"));
1081
+ if (l) {
1082
+ const g = c.filter((k) => k.id === x);
1083
+ g.length === 0 ? c.push(l) : l = g[0];
1084
+ }
1085
+ N(), C(!0), F(c), M();
1086
+ }, S = (c) => {
1087
+ var z;
1088
+ const x = (l == null ? void 0 : l.id) || (r == null ? void 0 : r.get("id")), g = ee([c == null ? void 0 : c.lon, c == null ? void 0 : c.lat]), k = ((z = m[c.id]) == null ? void 0 : z.blinkColors) || [], V = k[k.length - 1] || c.fill || "#04C900", G = ao(c), j = new ie({
1089
+ geometry: new le(g),
1090
+ // 船舶数据
1091
+ shipData: c,
1092
+ id: c.id,
1093
+ name: c.cnname || c.enname || c.name || c.id || "未命名船舶",
1094
+ selected: c.id === x,
1095
+ // 图标
1096
+ rightIcons: rt(c),
1097
+ // 是否闪烁
1098
+ // blinking: attentionShips[ship.id] || false,
1099
+ // // 闪烁颜色
1100
+ // blinkingColor: attentionShipsColor[ship.id].blinkColors || '',
1101
+ // 船舶颜色
1102
+ color: V,
1103
+ // 船艏向的方向
1104
+ direct: G,
1105
+ // 高亮
1106
+ isHighlight: !1
1107
+ });
1108
+ return j.set("clickGeometry", new Yt(g)), j;
1109
+ }, M = async () => {
1110
+ if (!l || !e) return;
1111
+ let x = e.getOverlays().getArray().find((g) => g.get("class") == "ship-overlay-selected");
1112
+ if (x) {
1113
+ const g = dt(e, l);
1114
+ await x.setElement(g), await x.setPosition(ee([l.lon, l.lat]));
1115
+ } else
1116
+ x = go(e, l), x && e.addOverlay(x);
1117
+ setTimeout(() => {
1118
+ var g;
1119
+ x && ((g = x.get("element")) != null && g.parentElement) && (x.get("element").parentElement.style.display = "block");
1120
+ }, 20);
1121
+ }, h = (c) => {
1122
+ if (c === "start") {
1123
+ const x = () => {
1124
+ s.getFeatures().forEach((g) => {
1125
+ g.setStyle(ye(e, g));
1126
+ }), y = requestAnimationFrame(x);
1127
+ };
1128
+ x();
1129
+ }
1130
+ c === "end" && y && (cancelAnimationFrame(y), y = null);
1131
+ }, w = () => {
1132
+ const x = (e == null ? void 0 : e.getOverlays().getArray()).find((g) => g.get("class") == "ship-overlay-selected");
1133
+ if (x) {
1134
+ const g = x.getElement(), k = Qe(e, l, "ship"), T = g.querySelector("svg");
1135
+ console.log(T), T && (T.style.transform = `scale(${k})`);
1136
+ }
1137
+ }, N = () => {
1138
+ e && s && (s.clear(), o.clear(), C(), h("end"));
1139
+ }, C = (c) => {
1140
+ const x = e.getOverlays().getArray().filter((g) => g.get("class") == "zh-map-ship-overlay");
1141
+ if (x && x.length > 0) {
1142
+ for (let g = 0; g < x.length; g++)
1143
+ if (!c && x[g].get("class") !== "ship-overlay-selected") {
1144
+ const k = x[g];
1145
+ k.setPosition(void 0), e.removeOverlay(k), k.dispose();
1146
+ }
1147
+ }
1148
+ }, b = (c, x) => {
1149
+ n = c, m = x;
1150
+ const g = e.getOverlays().getArray(), k = s.getFeatures();
1151
+ for (const T in n) {
1152
+ const V = n[T], G = g.find((z) => z.getId() === "label-" + T), j = k.find((z) => T === z.get("id"));
1153
+ if (G && j) {
1154
+ const z = x[T].blinkColors || [], { shipData: ae, name: re, color: se } = j.getProperties();
1155
+ j.set("blinking", V), z[(z == null ? void 0 : z.length) - 1] && se !== z[(z == null ? void 0 : z.length) - 1] && (j.set("color", z[(z == null ? void 0 : z.length) - 1] || ""), j.setStyle(ye(e, j)));
1156
+ const Re = {
1157
+ ...ae,
1158
+ blinking: V,
1159
+ blinkingColors: z || [],
1160
+ name: re + "(" + x[T].shipState + ")"
1161
+ }, be = G.getElement(), pe = ut(Re);
1162
+ be && be !== pe && G.setElement(pe);
1163
+ }
1164
+ }
1165
+ }, Y = (c) => {
1166
+ if (!e) return;
1167
+ const x = s.getFeatures(), g = o.getFeatures(), k = r ? r.get("id") : "", T = x.filter((z) => z.get("id") !== k), V = g == null ? void 0 : g.filter((z) => z.get("id") !== k), G = /* @__PURE__ */ new Map();
1168
+ c.forEach((z) => {
1169
+ G.set(z.id, !0);
1170
+ });
1171
+ const j = e.getOverlays().getArray();
1172
+ T.forEach((z) => {
1173
+ const ae = z.get("id");
1174
+ if (!G.has(ae))
1175
+ z.setStyle([]);
1176
+ else {
1177
+ const se = z.getStyle();
1178
+ (se == null ? void 0 : se.length) == 0 && z.setStyle(ye(e, z));
1179
+ }
1180
+ const re = j.find((se) => se.getId() === "label-" + ae);
1181
+ re && re.setPosition(void 0);
1182
+ }), console.log(V), V.forEach((z) => {
1183
+ const ae = z.get("id");
1184
+ if (!G.has(ae))
1185
+ z.setStyle([]);
1186
+ else {
1187
+ const re = z.getStyle();
1188
+ (re == null ? void 0 : re.length) == 0 && z.setStyle(nt(z));
1189
+ }
1190
+ });
1191
+ }, A = (c) => {
1192
+ if (c) {
1193
+ console.log("选中", c);
1194
+ const x = s.getFeatures().find((k) => k.get("id") === c.id), g = o.getFeatures().find((k) => k.get("id") === c.id);
1195
+ x && (r = x), g && g.set("selected", !0), l = c, M();
1196
+ } else
1197
+ console.log("取消选中"), l = null, r = null, R();
1198
+ }, q = Ne((c, x, g) => {
1199
+ try {
1200
+ if (c) {
1201
+ const k = c.get("shipData"), T = c.get("id");
1202
+ if (e.getTargetElement().style.cursor = T ? "pointer" : "", x === "click" && (A(k), g && g(T)), x === "hover") {
1203
+ t && t !== T && B(), t = T;
1204
+ const V = s.getFeatures().find((G) => G.get("id") === t);
1205
+ V == null || V.set("isHighlight", !0), V == null || V.setStyle(ye(e, V));
1206
+ }
1207
+ } else
1208
+ e.getTargetElement().style.cursor = "", B();
1209
+ } catch (k) {
1210
+ console.log("handleShipMapEvent", k);
1211
+ }
1212
+ }, 10), B = () => {
1213
+ const c = t ? s.getFeatures().find((x) => x.get("id") === t) : null;
1214
+ t = null, c == null || c.set("isHighlight", !1), c == null || c.setStyle(ye(e, c));
1215
+ }, R = () => {
1216
+ try {
1217
+ const x = e.getOverlays().getArray().find((g) => g.get("class") == "ship-overlay-selected");
1218
+ x && x.setPosition(void 0);
1219
+ } catch (c) {
1220
+ console.log(c);
1221
+ }
1222
+ }, Z = (c, x) => {
1223
+ const g = ee([c == null ? void 0 : c.lon, c == null ? void 0 : c.lat]), k = new ie({
1224
+ geometry: new le(g),
1225
+ name: c.cnname || c.enname || c.name || c.id || "未命名船舶",
1226
+ // 图标
1227
+ rightIcons: rt(c),
1228
+ selected: (c == null ? void 0 : c.id) === (l == null ? void 0 : l.id),
1229
+ shipData: c
1230
+ });
1231
+ k.set("id", c.id);
1232
+ const T = nt(k, x);
1233
+ return k.setStyle(T), k;
1234
+ }, F = (c) => {
1235
+ const x = e.getView().getZoom();
1236
+ c.forEach((g) => {
1237
+ const k = S(g);
1238
+ if (k.setStyle(ye(e, k)), s.addFeature(k), (l == null ? void 0 : l.id) == g.id || x >= te.shipModelMin)
1239
+ if (n[g.id]) {
1240
+ if (g.id && m[g == null ? void 0 : g.id]) {
1241
+ const T = m[g == null ? void 0 : g.id] || {}, V = (T == null ? void 0 : T.blinkColors) || [], G = (T == null ? void 0 : T.shipState) || "", j = (g.cnname || g.enname || g.name || g.id || "未命名船舶") + "(" + G + ")", z = {
1242
+ ...g,
1243
+ name: j,
1244
+ blinking: n[g.id],
1245
+ blinkingColors: V || []
1246
+ };
1247
+ fo(e, z);
1248
+ }
1249
+ } else {
1250
+ const T = Z(g, c.length);
1251
+ o.addFeature(T);
1252
+ }
1253
+ });
1254
+ };
1255
+ return {
1256
+ render: v,
1257
+ selected: A,
1258
+ filter: Y,
1259
+ blinking: b,
1260
+ clear: N,
1261
+ handleShipMapEvent: q,
1262
+ changeShipScale: h,
1263
+ changeSelectedScale: w
1264
+ };
1265
+ }, wo = (e) => {
1266
+ const r = () => e == null ? void 0 : e.getLayers(), l = I("vector"), s = () => l.value, a = (t) => {
1267
+ l.value = t;
1268
+ const n = r();
1269
+ n && (n == null || n.getArray().forEach((m) => {
1270
+ (m.className_ === "vector" || m.className_ === "satellite") && m.setVisible(m.className_ === t);
1271
+ }));
1272
+ }, o = I(!1);
1273
+ return {
1274
+ getLayers: r,
1275
+ getGreenTileVisible: () => o.value,
1276
+ setGreenTileVisible: (t) => {
1277
+ if (t !== o.value) {
1278
+ if (t) {
1279
+ const n = r();
1280
+ if (!n.getArray().find((v) => v.className_ === "greenTile")) {
1281
+ const v = new me({
1282
+ source: new we({ url: ue.greenTile }),
1283
+ visible: t,
1284
+ zIndex: 2,
1285
+ className: "greenTile"
1286
+ });
1287
+ n.push(v);
1288
+ }
1289
+ } else {
1290
+ const n = r(), m = n.getArray().find((v) => v.className_ === "greenTile");
1291
+ m && n.remove(m);
1292
+ }
1293
+ o.value = t;
1294
+ }
1295
+ },
1296
+ getShowLayerType: s,
1297
+ setShowLayerType: a
1298
+ };
1299
+ }, xo = () => {
1300
+ const e = I();
1301
+ return {
1302
+ setProps: (s) => {
1303
+ e.value = s;
1304
+ },
1305
+ getProps: () => e.value
1306
+ };
1307
+ }, bo = (e) => {
1308
+ const r = "zh-map-location-layer";
1309
+ let l, s, a = null, o = null;
1310
+ const u = (h) => {
1311
+ if (!(!h || h.length === 0)) {
1312
+ if (s || (s = new de()), s.clear(), o) {
1313
+ const w = h.find((N) => N.id === o.id);
1314
+ w ? o = w : h.push(o);
1315
+ }
1316
+ h.forEach((w) => {
1317
+ y(w);
1318
+ }), l || (l = new he({
1319
+ className: r,
1320
+ source: s,
1321
+ zIndex: 100
1322
+ }), e == null || e.addLayer(l));
1323
+ }
1324
+ }, y = (h) => {
1325
+ const w = e == null ? void 0 : e.getView().getZoom(), [N, C] = h.latLon.split(","), b = new ie({
1326
+ geometry: new le(ee([Number(N), Number(C)]))
1327
+ });
1328
+ b.setStyle(t(h, w, h.id === (o == null ? void 0 : o.id))), b.set("loactionData", h), s.addFeature(b);
1329
+ }, t = (h, w, N) => {
1330
+ const C = {
1331
+ image: new Oe({
1332
+ src: N && h.selectedPath || h.defaultPath,
1333
+ scale: 0.5 * w / 10
1334
+ })
1335
+ };
1336
+ return h.name && (C.text = new ge({
1337
+ text: h.name,
1338
+ font: "12px sans-serif",
1339
+ fill: new J({
1340
+ color: "#000000"
1341
+ }),
1342
+ backgroundFill: new J({
1343
+ color: "#FFFFFF"
1344
+ }),
1345
+ offsetY: 30
1346
+ })), new X(C);
1347
+ }, n = () => {
1348
+ if (a) {
1349
+ const h = a.get("loactionData").id;
1350
+ s.getFeatures().forEach((w) => {
1351
+ w.get("loactionData").id !== h && s.removeFeature(w);
1352
+ });
1353
+ } else
1354
+ s.clear();
1355
+ }, m = () => {
1356
+ var C;
1357
+ const h = a.get("loactionData"), w = (C = e == null ? void 0 : e.getView()) == null ? void 0 : C.getZoom();
1358
+ s.getFeatures().forEach((b) => {
1359
+ b.get("loactionData").id === h.id && (b == null || b.setStyle(t(h, w, !1)));
1360
+ }), o = null, a = null;
1361
+ }, v = (h) => {
1362
+ h ? (S(), M(h)) : clearSelectedPort();
1363
+ }, S = () => {
1364
+ var h;
1365
+ if (a) {
1366
+ const w = a.get("loactionData"), N = (h = e == null ? void 0 : e.getView()) == null ? void 0 : h.getZoom();
1367
+ a.setStyle(t(w, N, !1));
1368
+ }
1369
+ }, M = (h) => {
1370
+ const w = s.getFeatures();
1371
+ o = h, a = w.find((N) => N.get("loactionData").id === h.id);
1372
+ };
1373
+ return {
1374
+ render: u,
1375
+ selected: v,
1376
+ clearSelected: m,
1377
+ clear: n
1378
+ };
1379
+ }, ko = (e) => {
1380
+ e.getInteractions().forEach((r) => {
1381
+ r instanceof st && r.setActive(!1);
1382
+ });
1383
+ }, po = (e) => {
1384
+ e.getInteractions().forEach((r) => {
1385
+ r instanceof st && r.setActive(!0);
1386
+ });
1387
+ }, ze = (e, r) => {
1388
+ const l = e.getViewport();
1389
+ l && (l.style.cursor = r);
1390
+ }, Mo = (e, r) => {
1391
+ const l = I([]), s = I("km"), a = (F) => {
1392
+ s.value = F;
1393
+ };
1394
+ let o;
1395
+ const u = I(!1), y = () => {
1396
+ ze(e, "crosshair"), m(), ko(e), e.on("pointermove", M), e.getViewport().addEventListener("mouseout", () => {
1397
+ o && o.classList.add("hidden");
1398
+ }), w(), u.value = !0;
1399
+ };
1400
+ let t, n;
1401
+ const m = () => {
1402
+ t = new de(), n = new he({
1403
+ source: t,
1404
+ zIndex: 1e3,
1405
+ style: {
1406
+ "fill-color": "rgba(255, 255, 255, 0.2)",
1407
+ "stroke-color": "#ffcc33",
1408
+ "stroke-width": 2,
1409
+ "circle-radius": 7,
1410
+ "circle-fill-color": "#ffcc33"
1411
+ }
1412
+ }), e == null || e.addLayer(n);
1413
+ };
1414
+ let v, S;
1415
+ const M = (F) => {
1416
+ if (F.dragging)
1417
+ return;
1418
+ let c = "点击选择起点";
1419
+ v && (c = "单击继续,双击结束"), o && (o.innerHTML = c, S.setPosition(F.coordinate), o.classList.remove("hidden"));
1420
+ };
1421
+ let h;
1422
+ const w = () => {
1423
+ h = new Se({
1424
+ source: t,
1425
+ type: "LineString",
1426
+ style: new X({
1427
+ fill: new J({
1428
+ color: "rgba(255, 255, 255, 0.2)"
1429
+ }),
1430
+ stroke: new ve({
1431
+ color: "rgba(255,204,51)",
1432
+ lineDash: [10, 10],
1433
+ width: 2
1434
+ }),
1435
+ image: new Ve({
1436
+ radius: 5,
1437
+ stroke: new ve({
1438
+ color: "rgba(0, 0, 0, 0.7)"
1439
+ }),
1440
+ fill: new J({
1441
+ color: "rgba(255, 255, 255, 0.2)"
1442
+ })
1443
+ })
1444
+ }),
1445
+ // 添加条件函数,判断是否应该出发点绘制
1446
+ condition: (c) => c.originalEvent.target.tagName !== "DIV"
1447
+ }), e == null || e.addInteraction(h), Y(), A();
1448
+ let F;
1449
+ h.on("drawstart", function(c) {
1450
+ var g;
1451
+ v = c.feature, v.set("randomId", N());
1452
+ let x;
1453
+ F = (g = v.getGeometry()) == null ? void 0 : g.on("change", function(k) {
1454
+ const T = k.target, V = gt(T, s.value);
1455
+ x = T.getLastCoordinate(), C && V && (C.innerHTML = V), b.setPosition(x);
1456
+ });
1457
+ }), h.on("drawend", function() {
1458
+ var c, x, g;
1459
+ if (C && (C.className = "ol-tooltip ol-tooltip-static ol-tooltip-measure"), C != null && C.innerHTML) {
1460
+ const k = (v == null ? void 0 : v.get("randomId")) || N();
1461
+ l.value.push({ id: k, value: C == null ? void 0 : C.innerHTML }), C.innerHTML = `${C.innerHTML}<div class="ol-tooltip-delete-button" data-id="${k}"><i class="map-iconfont icon-delete"></i></div>`;
1462
+ }
1463
+ (c = document.querySelector(".ol-selectable:has(.ol-tooltip-delete-button):last-child .ol-tooltip-delete-button")) == null || c.addEventListener("click", (k) => {
1464
+ var V;
1465
+ k.preventDefault(), k.stopPropagation();
1466
+ const T = (V = k.target) == null ? void 0 : V.getAttribute("data-id");
1467
+ T && B(T);
1468
+ }), b.setOffset([0, -7]), v = null, C = null, Y(), F && We(F), (g = (x = r.getProps()) == null ? void 0 : x.lineDrawEnd) == null || g.call(x, l.value);
1469
+ });
1470
+ }, N = () => Math.random().toString(36).substring(2, 9);
1471
+ let C, b;
1472
+ const Y = () => {
1473
+ C != null && C.parentNode && C.parentNode.removeChild(C), C = document.createElement("div"), C.className = "ol-tooltip ol-tooltip-measure", b = new ce({
1474
+ element: C,
1475
+ offset: [0, -15],
1476
+ positioning: "bottom-center",
1477
+ stopEvent: !1,
1478
+ insertFirst: !1
1479
+ }), e == null || e.addOverlay(b);
1480
+ }, A = () => {
1481
+ o != null && o.parentNode && o.parentNode.removeChild(o), o = document.createElement("div"), o.className = "ol-tooltip hidden", S = new ce({
1482
+ element: o,
1483
+ offset: [15, 0],
1484
+ positioning: "center-left"
1485
+ }), e == null || e.addOverlay(S);
1486
+ }, q = () => {
1487
+ l.value.forEach((F, c) => {
1488
+ var k, T;
1489
+ const x = document.querySelectorAll(".ol-tooltip.ol-tooltip-static.ol-tooltip-measure");
1490
+ x[c] && ((T = (k = x[c]) == null ? void 0 : k.parentNode) == null || T.removeChild(x[c]));
1491
+ const g = t.getFeatures();
1492
+ g[c] && t.removeFeature(g[c]);
1493
+ }), R(), po(e), u.value = !1, ze(e, "pointer");
1494
+ }, B = (F) => {
1495
+ var x, g, k, T;
1496
+ const c = l.value.findIndex((V) => V.id === F);
1497
+ if (c !== -1) {
1498
+ l.value.splice(c, 1);
1499
+ const V = document.querySelectorAll(".ol-tooltip.ol-tooltip-static.ol-tooltip-measure");
1500
+ V[c] && ((g = (x = V[c]) == null ? void 0 : x.parentNode) == null || g.removeChild(V[c]));
1501
+ const G = t.getFeatures();
1502
+ G[c] && t.removeFeature(G[c]);
1503
+ }
1504
+ (T = (k = r.getProps()) == null ? void 0 : k.lineDrawEnd) == null || T.call(k, l.value);
1505
+ }, R = () => {
1506
+ if (l.value = [], document.querySelectorAll(".ol-tooltip.ol-tooltip-static").forEach((F) => {
1507
+ var c;
1508
+ (c = F == null ? void 0 : F.parentNode) == null || c.removeChild(F);
1509
+ }), t == null || t.clear(), h) {
1510
+ const F = e.getInteractions().getArray().find((c) => et(c) === et(h));
1511
+ F && e.removeInteraction(F);
1512
+ }
1513
+ e.removeLayer(n), o != null && o.parentNode && o.parentNode.removeChild(o), C != null && C.parentNode && C.parentNode.removeChild(C);
1514
+ };
1515
+ return {
1516
+ open: y,
1517
+ close: q,
1518
+ deleteLine: B,
1519
+ setUnit: a,
1520
+ getState: () => u.value
1521
+ };
1522
+ }, gt = (e, r) => {
1523
+ const s = He(e);
1524
+ let a = "";
1525
+ switch (r) {
1526
+ case "m":
1527
+ a = `${Math.round(s * 100) / 100} m`;
1528
+ break;
1529
+ case "km":
1530
+ a = `${Math.round(s / 1e3 * 100) / 100} km`;
1531
+ break;
1532
+ case "nm":
1533
+ a = (Math.round(s / 1e3 * 100) / 100 / 1.852).toFixed(2) + " nm";
1534
+ break;
1535
+ }
1536
+ return a;
1537
+ }, Co = (e, r) => {
1538
+ let l, s;
1539
+ const a = () => {
1540
+ o(), ze(e, "crosshair");
1541
+ }, o = () => {
1542
+ t(), C(), A(), M();
1543
+ };
1544
+ let u = null, y = null;
1545
+ const t = () => {
1546
+ if (u && y) return;
1547
+ const R = new de(), Z = new he({
1548
+ source: R,
1549
+ style: new X({
1550
+ stroke: new ve({
1551
+ color: "#fbcc33",
1552
+ width: 2
1553
+ })
1554
+ })
1555
+ });
1556
+ u = Z, y = R, e.on("pointermove", m), e.addLayer(Z), e.on(["dblclick"], function(F) {
1557
+ v && (F.stopPropagation(), F.preventDefault());
1558
+ });
1559
+ };
1560
+ let n;
1561
+ const m = (R) => {
1562
+ if (R.dragging) return;
1563
+ const Z = n ? "单击继续,双击结束" : "点击选择起点";
1564
+ b && (b.innerHTML = Z, Y.setPosition(R.coordinate));
1565
+ };
1566
+ let v, S = !1;
1567
+ const M = () => {
1568
+ if (l) {
1569
+ b != null && b.parentNode && b.parentNode.removeChild(b);
1570
+ const R = l.getGeometry();
1571
+ if (!R) return;
1572
+ const Z = h(R, "nm");
1573
+ w && (w.innerHTML = `
1574
+ <span class="text">面积:${Z}${S ? '<span class="error pl-12">超出可以绘画的距离</span>' : ""}</span>
1575
+ `), w && (w.innerHTML += '<span class="delete-icon" ><i class="map-iconfont icon-delete" /></div>');
1576
+ const F = R.getCoordinates(), c = F[0][F[0].length - 2];
1577
+ if (N.setPosition(c), u) {
1578
+ const g = u.getSource();
1579
+ g && l && (g.clear(), g.addFeature(l));
1580
+ }
1581
+ setTimeout(() => {
1582
+ var g;
1583
+ (g = document.querySelector(".delete-icon")) == null || g.addEventListener("click", () => {
1584
+ var k, T;
1585
+ console.log("delete"), q(), (T = (k = r.getProps()) == null ? void 0 : k.areaDrawEnd) == null || T.call(k, []);
1586
+ });
1587
+ }, 0);
1588
+ const x = qt(l.getGeometry().getExtent());
1589
+ e == null || e.getView().setCenter(x);
1590
+ return;
1591
+ }
1592
+ v = new Se({
1593
+ type: "Polygon",
1594
+ source: y,
1595
+ trace: !0,
1596
+ style: [new X({
1597
+ stroke: new ve({
1598
+ color: "rgba(255, 255, 255, 1)",
1599
+ width: 1.5,
1600
+ lineDash: [10, 10]
1601
+ }),
1602
+ fill: new J({
1603
+ color: "rgba(255, 255, 255, 0.25)"
1604
+ })
1605
+ }), new X({
1606
+ image: new Ve({
1607
+ radius: 5,
1608
+ fill: new J({
1609
+ color: "rgb(51,112,255, 1)"
1610
+ })
1611
+ }),
1612
+ geometry: function(R) {
1613
+ const Z = R.getGeometry().getCoordinates();
1614
+ return new Ht(Z);
1615
+ }
1616
+ })]
1617
+ }), e == null || e.addInteraction(v), v.on("drawstart", (R) => {
1618
+ var Z;
1619
+ n = R.feature, s = (Z = n.getGeometry()) == null ? void 0 : Z.on("change", (F) => {
1620
+ const c = F.target, x = h(c, "nm"), k = c.getCoordinates()[0], T = new Fe([k[k.length - 2], k[k.length - 1]]), V = gt(T, "nm");
1621
+ if (S = Number(He(T) / 1e3) > 150, !x) return;
1622
+ const G = '<span class="error pl-4">超出可以绘画的距离</span>';
1623
+ w && (w.innerHTML = `
1624
+ <div class="text">
1625
+ 面积:${x}
1626
+ ${S ? G : ""}
1627
+ </div>
1628
+ `), b && (b.innerHTML = `
1629
+ <div class="text">
1630
+ 面积:${x}
1631
+ </div>
1632
+ <div class="text ${S ? "error" : ""}">
1633
+ 线段 ${k.length - 2}: ${V}
1634
+ ${S ? G : ""}
1635
+
1636
+ </div>
1637
+ <div>
1638
+ <span class="text">单击继续,双击结束</span>
1639
+ </div>
1640
+ `);
1641
+ });
1642
+ }), v.on("drawend", (R) => {
1643
+ var x, g, k, T;
1644
+ if (!R.feature.getGeometry()) return;
1645
+ w && !l && (w.innerHTML += '<span class="delete-icon"><i class="map-iconfont icon-delete" /></div>'), l = R.feature, N.setOffset([10, 0]);
1646
+ const F = R.feature.getGeometry().getCoordinates(), c = F[0][F[0].length - 2];
1647
+ if (N.setPosition(c), b != null && b.parentNode && b.parentNode.removeChild(b), (x = r.getProps()) != null && x.areaDrawEnd) {
1648
+ const V = F[0].map((G) => ke(G, K.mercator, K.data));
1649
+ (k = (g = r.getProps()) == null ? void 0 : g.areaDrawEnd) == null || k.call(g, V);
1650
+ }
1651
+ v && (v.setActive(!1), e == null || e.removeInteraction(v), (e == null ? void 0 : e.getInteractions()).forEach((G) => {
1652
+ G instanceof Se && (G.setActive(!1), e == null || e.removeInteraction(G));
1653
+ })), s && We(s), (T = document.querySelector(".delete-icon")) == null || T.addEventListener("click", () => {
1654
+ var V, G;
1655
+ q(), (G = (V = r.getProps()) == null ? void 0 : V.areaDrawEnd) == null || G.call(V, []);
1656
+ });
1657
+ });
1658
+ }, h = (R, Z) => {
1659
+ const F = Bt(R);
1660
+ switch (Z) {
1661
+ case "km":
1662
+ return F > 1e4 ? Math.round(F / 1e6 * 100) / 100 + " km<sup>2</sup>" : Math.round(F * 100) / 100 + " m<sup>2</sup>";
1663
+ case "nm":
1664
+ return F > 1e4 ? Math.round(F / 1e6 / Math.pow(1.852, 2) * 100) / 100 + " nm<sup>2</sup>" : Math.round(F * 100) / 100 + " m<sup>2</sup>";
1665
+ }
1666
+ };
1667
+ let w, N;
1668
+ const C = () => {
1669
+ w != null && w.parentNode && w.parentNode.removeChild(w), w = document.createElement("div"), w.style.display = "flex", w.className = "ol-tooltip ol-tooltip-draw-polygon", N = new ce({
1670
+ element: w,
1671
+ offset: [0, -15],
1672
+ positioning: "bottom-center",
1673
+ stopEvent: !1,
1674
+ insertFirst: !1
1675
+ }), e == null || e.addOverlay(N);
1676
+ };
1677
+ let b, Y;
1678
+ const A = () => {
1679
+ b != null && b.parentNode && b.parentNode.removeChild(b), b = document.createElement("div"), b.className = "ol-tooltip ol-help-tooltip", Y = new ce({
1680
+ element: b,
1681
+ offset: [15, 0],
1682
+ positioning: "center-left"
1683
+ }), e == null || e.addOverlay(Y);
1684
+ }, q = () => {
1685
+ y == null || y.clear(), l = null, C(), A(), M();
1686
+ };
1687
+ return {
1688
+ open: a,
1689
+ close: () => {
1690
+ y == null || y.clear(), y = null, u && (e.removeLayer(u), u = null), n = null, v && (v.setActive(!1), (e == null ? void 0 : e.getInteractions()).forEach((Z) => {
1691
+ Z instanceof Se && (Z.setActive(!1), e == null || e.removeInteraction(Z));
1692
+ }), v = null), s && We(s), b != null && b.parentElement && b.parentElement.removeChild(b), w != null && w.parentElement && w.parentElement.removeChild(w), Y && e.removeOverlay(Y), N && e.removeOverlay(N), ze(e, "pointer");
1693
+ },
1694
+ reset: q
1695
+ };
1696
+ }, Lo = "zh-map-port-layer", Eo = (e) => {
1697
+ const r = new de(), l = new he({
1698
+ className: Lo,
1699
+ source: r,
1700
+ zIndex: 100,
1701
+ updateWhileInteracting: !1,
1702
+ updateWhileAnimating: !1
1703
+ });
1704
+ e == null || e.addLayer(l);
1705
+ let s = null, a = null;
1706
+ const o = (M, h = !0) => {
1707
+ if (!(!M || M.length === 0)) {
1708
+ if (r.clear(), a) {
1709
+ const w = M.find((N) => N.id === (a == null ? void 0 : a.id));
1710
+ w ? a = w : M.push(a);
1711
+ }
1712
+ M.forEach((w) => {
1713
+ u(w, h);
1714
+ });
1715
+ }
1716
+ }, u = (M, h = !0) => {
1717
+ const [w, N] = M.latLon.split(","), C = new ie({
1718
+ geometry: new le(ee([Number(w), Number(N)])),
1719
+ portData: M,
1720
+ select: M.id === (a == null ? void 0 : a.id),
1721
+ showTitle: M.id === (a == null ? void 0 : a.id) || h
1722
+ }), b = y(C);
1723
+ console.log("point-styles--------", b), C.setStyle(b), r.addFeature(C);
1724
+ }, y = (M) => {
1725
+ const { select: h, showTitle: w } = M.getProperties(), N = (B) => `<svg width="46" height="46" viewBox="0 0 46 46" fill="none" xmlns="http://www.w3.org/2000/svg">
1726
+ <path fill-rule="evenodd" clip-rule="evenodd" d="M22.6563 44.9304C22.5453 44.8844 22.4445 44.817 22.3595 44.7321C22.3595 44.7321 9.36986 31.7424 9.32952 31.6913C7.09059 29.0791 5.64794 25.8802 5.17255 22.4736C4.69716 19.0671 5.20896 15.5957 6.64728 12.471C8.08561 9.34625 10.3902 6.69909 13.2878 4.84325C16.1855 2.98741 19.5548 2.00068 22.9965 2C26.4381 1.99932 29.8078 2.98473 32.7062 4.83943C35.6046 6.69414 37.9102 9.34039 39.3498 12.4646C40.7893 15.5888 41.3025 19.0599 40.8284 22.4666C40.3544 25.8734 38.913 29.0729 36.6751 31.686C36.6401 31.737 23.6531 44.7321 23.6531 44.7321C23.5682 44.817 23.4674 44.8844 23.3564 44.9304C23.2454 44.9763 23.1265 45 23.0063 45C22.8862 45 22.7673 44.9763 22.6563 44.9304Z" fill="${B}"/>
1727
+ <g clip-path="url(#clip0_10059_122082)">
1728
+ <path d="M34.8624 22.8687L32.5874 25.6313L33.4812 25.7125C33.4812 25.7125 30.5562 28.0687 27.9562 28.2312C25.3562 28.3937 24.1374 24.9 24.1374 24.9V19.1312H27.6312V17.425H24.2999V15.15C25.7624 14.6625 26.7374 13.2812 26.7374 11.6562C26.7374 9.625 25.1124 8 23.0812 8H22.9999C20.9687 8 19.3437 9.625 19.3437 11.6562C19.3437 13.2812 20.3999 14.6625 21.7812 15.15V17.425H18.4499V19.1312H21.9437V24.9C21.9437 24.9 20.6437 28.3125 18.0437 28.2312C15.4437 28.0687 12.5187 25.7125 12.5187 25.7125L13.4124 25.6313L11.0562 22.8687L10.2437 26.2812L11.2187 26.0375C11.2187 26.0375 13.1687 29.5313 16.1749 30.8313C19.1812 32.2125 22.1874 33.9187 22.8374 34C23.4874 33.9187 26.4937 32.2125 29.4187 30.8313C32.3437 29.45 34.3749 26.0375 34.3749 26.0375L35.3499 26.2812L34.8624 22.8687ZM23.0812 13.6875C21.9437 13.6875 21.0499 12.7937 21.0499 11.6562C21.0499 10.6 21.9437 9.70625 22.9999 9.70625H23.0812C24.1374 9.70625 25.0312 10.6 25.0312 11.6562C25.1124 12.7937 24.1374 13.6875 23.0812 13.6875Z" fill="white"/>
1729
+ </g>
1730
+ <defs>
1731
+ <clipPath id="clip0_10059_122082">
1732
+ <rect width="26" height="26" fill="white" transform="translate(10 8)"/>
1733
+ </clipPath>
1734
+ </defs>
1735
+ </svg>
1736
+ `, C = () => `data:image/svg+xml;utf8,${encodeURIComponent(N(h ? "#FF5733" : "#3370FF"))}`, b = e.getView().getZoom(), Y = M.get("portData"), A = new X({
1737
+ image: new Oe({
1738
+ src: C(),
1739
+ scale: 0.5 * b / 10
1740
+ }),
1741
+ zIndex: h ? 110 : 100
1742
+ });
1743
+ if (!w && !h)
1744
+ return A;
1745
+ console.log("showTitle", w, Y.shortName, "选中", h, b);
1746
+ const q = new X({
1747
+ text: new ge({
1748
+ text: Y.shortName,
1749
+ font: "12px sans-serif",
1750
+ fill: new J({
1751
+ color: h ? "#ffffff" : "#000000"
1752
+ }),
1753
+ backgroundFill: new J({
1754
+ color: "rgba(255,255,255,0.5)"
1755
+ }),
1756
+ offsetY: 30
1757
+ }),
1758
+ zIndex: h ? 110 : 100
1759
+ });
1760
+ return [A, q];
1761
+ }, t = () => {
1762
+ if (r)
1763
+ if (s) {
1764
+ console.log("清除非选中的港口");
1765
+ const M = s.get("portData").id;
1766
+ r.getFeatures().forEach((h) => {
1767
+ h.get("portData").id !== M && r.removeFeature(h);
1768
+ });
1769
+ } else
1770
+ console.log("清除所有港口", r), r == null || r.clear();
1771
+ }, n = (M) => {
1772
+ if (r) {
1773
+ if (!M)
1774
+ return m();
1775
+ (s == null ? void 0 : s.get("portData").id) !== M.id && (m(), v(M));
1776
+ }
1777
+ }, m = () => {
1778
+ if (s) {
1779
+ const M = s == null ? void 0 : s.get("portData");
1780
+ r.getFeatures().forEach((w) => {
1781
+ w.get("portData").id === M.id && (w.setStyle(y(w)), w.set("select", !1), s = null);
1782
+ });
1783
+ }
1784
+ }, v = (M) => {
1785
+ if (!r) return;
1786
+ const h = r.getFeatures();
1787
+ a = M, s = h.find((w) => w.get("portData").id === M.id), s && (s.set("select", !0), s.setStyle(y(s)));
1788
+ };
1789
+ return {
1790
+ render: o,
1791
+ clear: t,
1792
+ selected: n,
1793
+ handlePortHover: (M) => {
1794
+ const h = e == null ? void 0 : e.getTargetElement();
1795
+ M && M.get("portData") && h && (h.style.cursor = "pointer");
1796
+ }
1797
+ };
1798
+ }, To = (e, r, l, s, a, o) => {
1799
+ const u = e.getInstall();
1800
+ u.on("moveend", () => {
1801
+ var y, t;
1802
+ try {
1803
+ const n = e.getZoom();
1804
+ (t = (y = r.getProps()).mapMoveEnd) == null || t.call(y, n), l.reRenderTrackLine(), s.changeShipScale("end");
1805
+ } catch (n) {
1806
+ console.log("moveend---catch", n);
1807
+ }
1808
+ }), u.on("pointermove", (y) => {
1809
+ try {
1810
+ const t = u == null ? void 0 : u.getEventPixel(y.originalEvent);
1811
+ if (!t || !u) return;
1812
+ const n = u == null ? void 0 : u.forEachFeatureAtPixel(t, (m) => m, {
1813
+ layerFilter: (m) => m.getVisible()
1814
+ });
1815
+ s == null || s.handleShipMapEvent(n, "hover"), l == null || l.handleTrackMapEvent(n, "hover", y), n && (a == null || a.handlePortHover(n));
1816
+ } catch (t) {
1817
+ console.log("pointermove---catch", t);
1818
+ }
1819
+ }), u.on("movestart", () => {
1820
+ try {
1821
+ const y = u == null ? void 0 : u.getView().getZoom();
1822
+ y && y <= te.shipModelMax && y >= te.shipTriggleMin && s.changeShipScale("start");
1823
+ } catch (y) {
1824
+ console.log("movestart---catch", y);
1825
+ }
1826
+ }), u.on("singleclick", Ne((y) => {
1827
+ var t, n, m;
1828
+ try {
1829
+ if (console.log("1", o.getState()), o.getState()) return;
1830
+ const v = u.getFeaturesAtPixel(y.pixel);
1831
+ if (!v && v.length === 0) return;
1832
+ console.log("features------------", v);
1833
+ let S = null, M = null;
1834
+ if (v == null || v.forEach((h) => {
1835
+ h.get("shipData") && (S = h), h.get("portData") && (M = h);
1836
+ }), S)
1837
+ s.handleShipMapEvent(S, "click", (t = r.getProps()) == null ? void 0 : t.selectShip);
1838
+ else if (M) {
1839
+ const h = M.get("portData");
1840
+ a.selected(h), (m = (n = r.getProps()) == null ? void 0 : n.selectPort) == null || m.call(n, h);
1841
+ }
1842
+ y.preventDefault(), y.stopPropagation();
1843
+ } catch (v) {
1844
+ console.log("click---catch", v);
1845
+ }
1846
+ }, 150)), u.getView().on("change:resolution", Ne(() => {
1847
+ const y = u == null ? void 0 : u.getView().getZoom();
1848
+ y && y <= te.shipModelMax && y >= te.shipTriggleMin && s.changeSelectedScale("start");
1849
+ }, 10));
1850
+ }, Po = () => {
1851
+ const e = St([]);
1852
+ return {
1853
+ createInstance: (s, a) => {
1854
+ const o = eo();
1855
+ o.initMap(s, a);
1856
+ const u = o.getInstall(), y = wo(u), t = xo();
1857
+ t.setProps(a), y.setShowLayerType(a.layerType), y.setGreenTileVisible(a.showGreenLayer);
1858
+ const n = so(u), m = lo(u, n), v = mo(u), S = bo(u), M = Mo(u, t), h = Co(u, t), w = Eo(u);
1859
+ To(o, t, n, v, w, M);
1860
+ const N = () => {
1861
+ const b = u.getView().calculateExtent(o.getSize()), Y = ke([b[0], b[1]], K.mercator, K.data), A = ke([b[2], b[3]], K.mercator, K.data);
1862
+ return [Y[0], Y[1], A[0], A[1]];
1863
+ }, C = {
1864
+ id: Symbol("map-instance"),
1865
+ innerMap: null,
1866
+ map: o.getInstall(),
1867
+ destroy: () => {
1868
+ e.splice(e.indexOf(C), 1);
1869
+ },
1870
+ methods: {
1871
+ ...o,
1872
+ layer: y,
1873
+ ship: v,
1874
+ track: n,
1875
+ carTrack: m,
1876
+ port: {
1877
+ render: w.render,
1878
+ clear: w.clear,
1879
+ selected: w.selected
1880
+ },
1881
+ position: S,
1882
+ drawLine: M,
1883
+ drawPolygon: h,
1884
+ // 子模块
1885
+ utils: {
1886
+ getCalculateExtent: N,
1887
+ convertSixHundredThousandToLatLng: je,
1888
+ calculateCirclePoints: to
1889
+ }
1890
+ }
1891
+ };
1892
+ return e.push(C), C;
1893
+ },
1894
+ destroyInstance: (s) => {
1895
+ const a = e.findIndex((o) => o.id === s);
1896
+ a > -1 && (e[a].destroy(), e.splice(a, 1));
1897
+ },
1898
+ destroyAll: () => {
1899
+ e.forEach((s) => s.destroy()), e.splice(0, e.length);
1900
+ },
1901
+ getAllInstances: () => [...e]
1902
+ };
1903
+ }, Fo = { class: "zh-map-box" }, So = /* @__PURE__ */ Ye({
1904
+ __name: "Map",
1905
+ props: {
1906
+ zoom: { default: te.default },
1907
+ center: { default: It },
1908
+ layerType: { default: "vector" },
1909
+ showGreenLayer: { type: Boolean, default: !1 },
1910
+ showScale: { type: Boolean, default: !0 },
1911
+ scaleLineUnit: { default: "metric" },
1912
+ mapMoveEnd: { type: Function, default: () => {
1913
+ } },
1914
+ lineDrawEnd: {},
1915
+ areaDrawEnd: { type: Function, default: () => {
1916
+ } },
1917
+ selectShip: { type: Function, default: () => {
1918
+ } },
1919
+ selectPort: { type: Function, default: () => {
1920
+ } }
1921
+ },
1922
+ setup(e, { expose: r }) {
1923
+ const l = I(), s = I(), a = Po(), o = I(), u = e, y = I({
1924
+ getInstall() {
1925
+ }
1926
+ });
1927
+ return Nt(() => {
1928
+ var t;
1929
+ o.value = a.createInstance(l.value, u), y.value = o.value.methods, (t = s.value) == null || t.setScaleLine(o.value.map, u.scaleLineUnit);
1930
+ }), Vt(() => {
1931
+ var t, n;
1932
+ a.destroyInstance((t = o == null ? void 0 : o.value) == null ? void 0 : t.id), (n = o.value) == null || n.destroy();
1933
+ }), r({
1934
+ getZoom: () => {
1935
+ var t;
1936
+ return (t = o.value) == null ? void 0 : t.methods.getZoom();
1937
+ },
1938
+ setZoom: (t) => {
1939
+ var n;
1940
+ return (n = o.value) == null ? void 0 : n.methods.setZoom(t);
1941
+ },
1942
+ getInstall: () => {
1943
+ var t;
1944
+ return (t = o.value) == null ? void 0 : t.methods.getInstall();
1945
+ },
1946
+ getView: () => {
1947
+ var t;
1948
+ return (t = o.value) == null ? void 0 : t.methods.getView();
1949
+ },
1950
+ setCenter: (t, n) => {
1951
+ var m;
1952
+ return (m = o.value) == null ? void 0 : m.methods.setCenter(t, n);
1953
+ },
1954
+ getSize: () => {
1955
+ var t;
1956
+ return (t = o.value) == null ? void 0 : t.methods.getSize();
1957
+ },
1958
+ getCenter: (t, n) => {
1959
+ var m;
1960
+ return (m = o.value) == null ? void 0 : m.methods.getCenter();
1961
+ },
1962
+ layer: {
1963
+ setGreenTileVisible: (t) => {
1964
+ var n;
1965
+ return (n = o.value) == null ? void 0 : n.methods.layer.setGreenTileVisible(t);
1966
+ },
1967
+ getGreenTileVisible: () => {
1968
+ var t;
1969
+ return (t = o.value) == null ? void 0 : t.methods.layer.getGreenTileVisible();
1970
+ },
1971
+ getShowLayerType: () => {
1972
+ var t;
1973
+ return (t = o.value) == null ? void 0 : t.methods.layer.getShowLayerType();
1974
+ },
1975
+ setShowLayerType: (t) => {
1976
+ var n;
1977
+ return (n = o.value) == null ? void 0 : n.methods.layer.setShowLayerType(t);
1978
+ }
1979
+ },
1980
+ ship: {
1981
+ render: (...t) => {
1982
+ var n;
1983
+ return (n = o.value) == null ? void 0 : n.methods.ship.render(...t);
1984
+ },
1985
+ selected: (...t) => {
1986
+ var n;
1987
+ return (n = o.value) == null ? void 0 : n.methods.ship.selected(...t);
1988
+ },
1989
+ filter: (...t) => {
1990
+ var n;
1991
+ return (n = o.value) == null ? void 0 : n.methods.ship.filter(...t);
1992
+ },
1993
+ blinking: (...t) => {
1994
+ var n;
1995
+ return (n = o.value) == null ? void 0 : n.methods.ship.blinking(...t);
1996
+ },
1997
+ clear: () => {
1998
+ var t;
1999
+ return (t = o.value) == null ? void 0 : t.methods.ship.clear();
2000
+ }
2001
+ },
2002
+ track: {
2003
+ render: (...t) => {
2004
+ var n;
2005
+ return (n = o.value) == null ? void 0 : n.methods.track.render(...t);
2006
+ },
2007
+ remove: (...t) => {
2008
+ var n;
2009
+ return (n = o.value) == null ? void 0 : n.methods.track.remove(...t);
2010
+ },
2011
+ play: (...t) => {
2012
+ var n;
2013
+ return (n = o.value) == null ? void 0 : n.methods.track.play(...t);
2014
+ },
2015
+ setCenter: (...t) => {
2016
+ var n;
2017
+ return (n = o.value) == null ? void 0 : n.methods.track.setCenter(...t);
2018
+ },
2019
+ close: (...t) => {
2020
+ var n;
2021
+ return (n = o.value) == null ? void 0 : n.methods.track.close(...t);
2022
+ },
2023
+ getLength: (...t) => {
2024
+ var n;
2025
+ return (n = o.value) == null ? void 0 : n.methods.track.getLength(...t);
2026
+ }
2027
+ },
2028
+ carTrack: {
2029
+ location: (...t) => {
2030
+ var n;
2031
+ return (n = o.value) == null ? void 0 : n.methods.carTrack.location(...t);
2032
+ },
2033
+ remove: (...t) => {
2034
+ var n;
2035
+ return (n = o.value) == null ? void 0 : n.methods.carTrack.remove(...t);
2036
+ },
2037
+ renderTrack: (...t) => {
2038
+ var n;
2039
+ return (n = o.value) == null ? void 0 : n.methods.carTrack.renderTrack(...t);
2040
+ },
2041
+ setCenter: (...t) => {
2042
+ var n;
2043
+ return (n = o.value) == null ? void 0 : n.methods.carTrack.setCenter(...t);
2044
+ },
2045
+ closeTrack: () => {
2046
+ var t;
2047
+ return (t = o.value) == null ? void 0 : t.methods.carTrack.closeTrack();
2048
+ },
2049
+ playTrack: (...t) => {
2050
+ var n;
2051
+ return (n = o.value) == null ? void 0 : n.methods.carTrack.playTrack(...t);
2052
+ }
2053
+ },
2054
+ port: {
2055
+ render: (t, n) => {
2056
+ var m;
2057
+ return (m = o.value) == null ? void 0 : m.methods.port.render(t, n);
2058
+ },
2059
+ clear: () => {
2060
+ var t;
2061
+ return (t = o.value) == null ? void 0 : t.methods.port.clear();
2062
+ },
2063
+ selected: (t) => {
2064
+ var n;
2065
+ return (n = o.value) == null ? void 0 : n.methods.port.selected(t);
2066
+ }
2067
+ },
2068
+ position: {
2069
+ render: (...t) => {
2070
+ var n;
2071
+ return (n = o.value) == null ? void 0 : n.methods.position.render(...t);
2072
+ },
2073
+ selected: (...t) => {
2074
+ var n;
2075
+ return (n = o.value) == null ? void 0 : n.methods.position.selected(...t);
2076
+ },
2077
+ clearSelected: (...t) => {
2078
+ var n;
2079
+ return (n = o.value) == null ? void 0 : n.methods.position.clearSelected(...t);
2080
+ },
2081
+ clear: () => {
2082
+ var t;
2083
+ return (t = o.value) == null ? void 0 : t.methods.position.clear();
2084
+ }
2085
+ },
2086
+ drawLine: {
2087
+ open: () => {
2088
+ var t;
2089
+ return (t = o.value) == null ? void 0 : t.methods.drawLine.open();
2090
+ },
2091
+ close: () => {
2092
+ var t;
2093
+ return (t = o.value) == null ? void 0 : t.methods.drawLine.close();
2094
+ },
2095
+ deleteLine: (t) => {
2096
+ var n;
2097
+ return (n = o.value) == null ? void 0 : n.methods.drawLine.deleteLine(t);
2098
+ },
2099
+ setUnit: (t) => {
2100
+ var n;
2101
+ return (n = o.value) == null ? void 0 : n.methods.drawLine.setUnit(t);
2102
+ },
2103
+ getState: () => {
2104
+ var t;
2105
+ return (t = o.value) == null ? void 0 : t.methods.drawLine.getState();
2106
+ }
2107
+ },
2108
+ drawPolygon: {
2109
+ open: () => {
2110
+ var t;
2111
+ return (t = o.value) == null ? void 0 : t.methods.drawPolygon.open();
2112
+ },
2113
+ close: () => {
2114
+ var t;
2115
+ return (t = o.value) == null ? void 0 : t.methods.drawPolygon.close();
2116
+ },
2117
+ reset: () => {
2118
+ var t;
2119
+ return (t = o.value) == null ? void 0 : t.methods.drawPolygon.reset();
2120
+ }
2121
+ },
2122
+ // 子模块
2123
+ utils: {
2124
+ getCalculateExtent: (...t) => {
2125
+ var n;
2126
+ return (n = o.value) == null ? void 0 : n.methods.utils.getCalculateExtent(...t);
2127
+ },
2128
+ convertSixHundredThousandToLatLng: (...t) => {
2129
+ var n;
2130
+ return (n = o.value) == null ? void 0 : n.methods.utils.convertSixHundredThousandToLatLng(...t);
2131
+ },
2132
+ calculateCirclePoints: (t, n) => {
2133
+ var m;
2134
+ return (m = o.value) == null ? void 0 : m.methods.utils.calculateCirclePoints(t, n);
2135
+ }
2136
+ }
2137
+ }), (t, n) => (Be(), qe("div", Fo, [
2138
+ Ae("div", {
2139
+ id: "map",
2140
+ ref_key: "zhMapRef",
2141
+ ref: l,
2142
+ class: "zh-map"
2143
+ }, null, 512),
2144
+ De(Jt, {
2145
+ ref_key: "scaleLineRef",
2146
+ ref: s
2147
+ }, null, 512),
2148
+ De(Ut, {
2149
+ ref: "zoomControlRef",
2150
+ "map-instance": o.value
2151
+ }, null, 8, ["map-instance"])
2152
+ ]));
2153
+ }
2154
+ }), No = /* @__PURE__ */ Xe(So, [["__scopeId", "data-v-1fa3c6fd"]]), Zo = Xt(No);
2155
+ export {
2156
+ Zo as Z
2157
+ };