zhihao-ui 1.3.58-alpha.8 → 1.3.58-alpha.9

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 (28) hide show
  1. package/dist/es/{BaseInfo-DQDrfkpP.js → BaseInfo-D-Mw1tTN.js} +2 -2
  2. package/dist/es/{BaseItem-CW_Tc1b0.js → BaseItem-BbqMOHus.js} +3 -3
  3. package/dist/es/{Button-BZBqS9F9.js → Button-CeZhW1QC.js} +2 -2
  4. package/dist/es/{CascaderLoadMore-QshoszNX.js → CascaderLoadMore-CCflOhPX.js} +2 -2
  5. package/dist/es/{DatePicker-BNhByILC.js → DatePicker-DMtsF75M.js} +3 -3
  6. package/dist/es/{DetailHeader-rmu9KWWE.js → DetailHeader-Cny3MSRT.js} +3 -3
  7. package/dist/es/{DetailSubTitle-BSCe90Yt.js → DetailSubTitle-BaYkpGpn.js} +2 -2
  8. package/dist/es/{Dialog-B9tSFJ9X.js → Dialog-wslff2i5.js} +3 -3
  9. package/dist/es/{DiyDataTable-B9bTbjTa.js → DiyDataTable-DxhbDTeX.js} +4 -4
  10. package/dist/es/{EditInfoPair-8lUF5LUl.js → EditInfoPair-BjkWUWdC.js} +3 -3
  11. package/dist/es/{FileWrapper-C1oRDjoD.js → FileWrapper-CACEIzz1.js} +4 -4
  12. package/dist/es/{Grid-BvdUxSrz.js → Grid-DUbA9lXj.js} +2 -2
  13. package/dist/es/{InfoPair-DRSF0kBy.js → InfoPair-Cc7jd_QY.js} +3 -3
  14. package/dist/es/{Input-BMtEIIw_.js → Input-CPgzYhQB.js} +3 -3
  15. package/dist/es/{Loading-D29Qk4cA.js → Loading-C6gDlpzy.js} +2 -2
  16. package/dist/es/Map-DWbVaRRC.js +2451 -0
  17. package/dist/es/{MessageBox-CUtR7qN4.js → MessageBox-C7mSYITB.js} +2 -2
  18. package/dist/es/{MoneyInput-BSTInWMb.js → MoneyInput-3Er5p9I5.js} +5 -5
  19. package/dist/es/{PageHeadPanel-Bqixa7gi.js → PageHeadPanel-BUKAi2go.js} +2 -2
  20. package/dist/es/{Table-23MIYW5G.js → Table-C2uGAC4q.js} +6 -6
  21. package/dist/es/{ToolTips-C452kfSA.js → ToolTips-CDOUTy7Q.js} +3 -3
  22. package/dist/es/index.js +23 -23
  23. package/dist/es/{utils-NSTGfydw.js → utils-mwRDbm3z.js} +1 -1
  24. package/dist/es/{vendor-s-OhSGrk.js → vendor-BcKYsh5g.js} +9 -9
  25. package/dist/types/components/Map/function/ship/index.d.ts +4 -1
  26. package/dist/umd/index.umd.cjs +26 -26
  27. package/package.json +1 -1
  28. package/dist/es/Map-CYsmvG9C.js +0 -2450
@@ -0,0 +1,2451 @@
1
+ import { defineComponent as ft, openBlock as ht, createElementBlock as vt, createElementVNode as dt, ref as ge, computed as Qe, h as we, createVNode as ut, render as Yt, reactive as Bt, onMounted as qt, onUnmounted as Xt } from "vue";
2
+ import { S as Kt, M as pt, T as Oe, X as Ae, t as fe, V as _t, u as jt, D as mt, v as Qt, j as $t, w as yt, x as Jt, y as Ze, F as ue, z as te, O as Ce, P as de, A as Be, B as Nt, L as Ue, G as Ut, H as Ct, I as me, J as Me, K as be, N as $e, Q as et, R as Ne, U as It, W as Ie, Y as gt, Z as Mt, _ as eo, $ as to, a0 as oo, a1 as no, a2 as ro, a3 as lo } from "./vendor-BcKYsh5g.js";
3
+ import { _ as wt } from "./Button-CeZhW1QC.js";
4
+ import { w as io } from "./utils-mwRDbm3z.js";
5
+ const so = { id: "scale-line-container" }, co = /* @__PURE__ */ ft({
6
+ __name: "scaleLine",
7
+ setup(e, { expose: l }) {
8
+ return l({
9
+ setScaleLine: (r, a) => {
10
+ a || (a = "metric");
11
+ const s = new Kt({
12
+ units: a
13
+ }), o = document.getElementById("scale-line-container");
14
+ o && (s.setTarget(o), r.addControl(s));
15
+ }
16
+ }), (r, a) => (ht(), vt("div", so));
17
+ }
18
+ }), ao = /* @__PURE__ */ wt(co, [["__scopeId", "data-v-2bc5dee8"]]), uo = { class: "zoom" }, go = /* @__PURE__ */ ft({
19
+ __name: "zoomControl",
20
+ props: {
21
+ mapInstance: {
22
+ type: Object,
23
+ default: () => null
24
+ }
25
+ },
26
+ setup(e) {
27
+ const l = e;
28
+ console.log("props", l);
29
+ const c = () => {
30
+ console.log("props");
31
+ const { setZoom: a, getZoom: s, getInstall: o } = l.mapInstance.methods;
32
+ if (!o()) return;
33
+ const x = s();
34
+ x && a(x + 1);
35
+ }, r = () => {
36
+ const { setZoom: a, getZoom: s, getInstall: o } = l.mapInstance.methods;
37
+ if (!o()) return;
38
+ const x = s();
39
+ x && a(x - 1);
40
+ };
41
+ return (a, s) => (ht(), vt("div", uo, [
42
+ dt("div", {
43
+ class: "button big-button",
44
+ onClick: c
45
+ }, " + "),
46
+ dt("div", {
47
+ class: "button small-button",
48
+ onClick: r
49
+ }, " - ")
50
+ ]));
51
+ }
52
+ }), fo = /* @__PURE__ */ wt(go, [["__scopeId", "data-v-78a81741"]]), Je = "a6e8f78974f2581f2ca00485b40c948f", ce = {
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
+ }, se = {
68
+ // 经纬度 源数据 地理坐标 WGS84
69
+ data: "EPSG:4326",
70
+ // 墨卡托投影坐标 渲染坐标
71
+ mercator: "EPSG:3857"
72
+ }, ho = [114.84, 30.52], Rt = "https://static.zhihaoscm.cn/", tt = 2003750834e-2;
73
+ var Se = ((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=${Je}`, 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=${Je}`, 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=${Je}`, 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=${Je}`, e.greenTile = `${Rt}/map/tile/{z}/{x}/{y}.png`, e))(Se || {}), De = /* @__PURE__ */ ((e) => (e[e.M = 1] = "M", e[e.KM = 2] = "KM", e[e.NM = 3] = "NM", e))(De || {}), le = /* @__PURE__ */ ((e) => (e.PORT = "port", e.SHIP = "ship", e.TRACK = "track", e.DELETE = "delete", e.PATH = "path", e))(le || {});
74
+ function vo() {
75
+ const e = ge(), l = ge(!0), c = () => e.value, r = () => c().getView(), a = (p) => {
76
+ l.value = p;
77
+ }, s = () => l.value, o = () => {
78
+ var p;
79
+ return (p = r()) == null ? void 0 : p.getZoom();
80
+ }, h = (p) => {
81
+ var i;
82
+ (i = r()) == null || i.setZoom(p);
83
+ }, x = (p, i) => {
84
+ var u;
85
+ (u = r()) == null || u.setCenter(fe([p, i]));
86
+ }, M = () => {
87
+ var i;
88
+ const p = (i = r()) == null ? void 0 : i.getCenter();
89
+ return Qt(p);
90
+ }, t = () => {
91
+ var p;
92
+ return (p = c()) == null ? void 0 : p.getSize();
93
+ }, n = () => {
94
+ const p = window.navigator.userAgent, i = /iPad|iPhone|iPod/.test(p), u = /Safari/.test(p) && !/CriOS/.test(p), b = /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(p);
95
+ return i && (u || b);
96
+ }, w = new pt(), $ = (p, i) => {
97
+ A(i);
98
+ const u = {
99
+ zoom: i.zoom,
100
+ center: fe(i.center),
101
+ minZoom: ce.min,
102
+ maxZoom: ce.max,
103
+ constrainResolution: !0,
104
+ enableRotation: !1,
105
+ multiWorld: !0
106
+ };
107
+ let b = {
108
+ target: p,
109
+ controls: jt({
110
+ zoom: !1
111
+ }),
112
+ layers: [
113
+ w.get("vectorTile"),
114
+ w.get("vectorTileMark"),
115
+ w.get("satelliteImgTile"),
116
+ w.get("satelliteImgTileMark")
117
+ ],
118
+ view: new _t(u)
119
+ };
120
+ const f = new pt(b);
121
+ if (n()) {
122
+ const L = new mt({
123
+ handleEvent: function(O) {
124
+ if (O.type === "dblclick") {
125
+ console.log("IOS Browser---dblclick"), O.originalEvent.preventDefault();
126
+ const z = f.getView(), K = z.getZoom();
127
+ return z.setZoom(K + 1), !1;
128
+ }
129
+ return !0;
130
+ }
131
+ });
132
+ f.addInteraction(L);
133
+ }
134
+ e.value = f;
135
+ }, A = (p) => {
136
+ w.set("vectorTile", new Oe({
137
+ source: new Ae({ url: Se.vectorTile }),
138
+ visible: p.layerType === "vector",
139
+ zIndex: 0,
140
+ preload: 1,
141
+ className: "vector"
142
+ })), w.set("vectorTileMark", new Oe({
143
+ source: new Ae({ url: Se.vectorTileMark }),
144
+ visible: p.layerType === "vector",
145
+ zIndex: 1,
146
+ preload: 1,
147
+ className: "vector"
148
+ })), w.set("satelliteImgTile", new Oe({
149
+ source: new Ae({ url: Se.satelliteImgTile }),
150
+ visible: p.layerType === "satellite",
151
+ zIndex: 0,
152
+ preload: 1,
153
+ className: "satellite"
154
+ })), w.set("satelliteImgTileMark", new Oe({
155
+ source: new Ae({ url: Se.satelliteImgTileMark }),
156
+ visible: p.layerType === "satellite",
157
+ zIndex: 1,
158
+ preload: 1,
159
+ className: "satellite"
160
+ })), w.set("greenMark", new Oe({
161
+ source: new Ae({ url: Se.greenTile }),
162
+ visible: p.showGreenLayer,
163
+ zIndex: 2,
164
+ className: "greenTile"
165
+ }));
166
+ };
167
+ return {
168
+ getInstall: c,
169
+ getView: r,
170
+ getZoom: o,
171
+ setZoom: h,
172
+ setCenter: x,
173
+ getCenter: M,
174
+ getSize: t,
175
+ initMap: $,
176
+ setBaseLayerMap: A,
177
+ setMapClick: a,
178
+ getMapClick: s
179
+ };
180
+ }
181
+ const xt = function(e, l) {
182
+ const c = Number(l) / 6e5;
183
+ return [Number(e) / 6e5, c];
184
+ }, mo = (e, l) => {
185
+ const c = fe(e), r = l * 1e3, a = [
186
+ c[0] - r,
187
+ c[1] - r,
188
+ c[0] + r,
189
+ c[1] + r
190
+ ], s = Jt(a, se.mercator, se.data);
191
+ return {
192
+ leftTopPoint: { lng: s[0], lat: s[3] },
193
+ rightTopPoint: { lng: s[2], lat: s[3] },
194
+ rightBottomPoint: { lng: s[2], lat: s[1] },
195
+ leftBottomPoint: { lng: s[0], lat: s[1] }
196
+ };
197
+ }, yo = function(e, l) {
198
+ const r = yt(e);
199
+ let a = "";
200
+ switch (console.log(l, De), l) {
201
+ case De.M:
202
+ a = Math.round(r * 100) / 100 + " m";
203
+ break;
204
+ case De.KM:
205
+ a = Math.round(r / 1e3 * 100) / 100 + " km";
206
+ break;
207
+ case De.NM:
208
+ a = (Math.round(r / 1e3 * 100) / 100 / 1.852).toFixed(2) + " nm";
209
+ break;
210
+ }
211
+ return a;
212
+ };
213
+ function wo(e) {
214
+ const l = e[0] * tt / 180;
215
+ let c = Math.log(Math.tan((90 + e[1]) * Math.PI / 360)) / (Math.PI / 180);
216
+ return c = c * tt / 180, [l, c];
217
+ }
218
+ function Fe(e = "") {
219
+ let l = e.replace(/&?/g, "&");
220
+ return l = l.replace(/&#x([0-9a-fA-F]+);?/g, (c, r) => {
221
+ const a = parseInt(r, 16);
222
+ return String.fromCodePoint(a);
223
+ }), l;
224
+ }
225
+ const Lt = (e) => {
226
+ const l = new Ze({
227
+ font: "Normal 14px map-iconfont",
228
+ text: Fe(e),
229
+ fill: new ue({ color: "#fff" }),
230
+ offsetY: -14
231
+ });
232
+ return new te({
233
+ text: l,
234
+ zIndex: 100
235
+ });
236
+ }, Et = (e, l = "lonlat") => {
237
+ const c = { lon: 0, lat: 0 }, r = e[0] / tt * 180;
238
+ let a = e[1] / tt * 180;
239
+ return a = 180 / Math.PI * (2 * Math.atan(Math.exp(a * Math.PI / 180)) - Math.PI / 2), c.lon = r, c.lat = a, l === "lonlat" ? c : [r, a];
240
+ }, xo = (e) => {
241
+ const l = $t.duration(e, "minutes"), c = Math.floor(l.asDays()), r = l.hours(), a = l.minutes();
242
+ let s = `${String(a).padStart(2, "0")}分`;
243
+ return r !== 0 && (s = `${String(r).padStart(2, "0")}时${s}`), c !== 0 && (s = `${String(c).padStart(2, "0")}天${s}`), s;
244
+ }, bo = (e, l) => {
245
+ let c = null;
246
+ const r = async (t) => {
247
+ if (!e || (console.log("vehicleInfo", t), !(t != null && t.lon && (t != null && t.lat)))) return;
248
+ const n = Math.abs(Number(t.lon)) > 180 ? xt(t.lon, t.lat) : [t.lon, t.lat];
249
+ a(t, fe(n));
250
+ const w = e == null ? void 0 : e.getView(), $ = new de(n);
251
+ w.setCenter(Be($.getCoordinates(), se.data, se.mercator));
252
+ }, a = (t, n) => {
253
+ const w = `${Rt}map/car-icon.gif`;
254
+ c || (c = new Ce({
255
+ element: document.createElement("div"),
256
+ positioning: "center-center",
257
+ stopEvent: !1
258
+ // 允许交互事件穿透
259
+ }), e.addOverlay(c));
260
+ const $ = c.getElement();
261
+ $.style.backgroundImage = `url(${w})`, $.style.width = "80px", $.style.height = "80px";
262
+ const A = (t == null ? void 0 : t.drc) || "";
263
+ $.style.transform = `rotate(${A}deg)`, $.style.backgroundSize = "cover", c == null || c.setPosition(n);
264
+ };
265
+ return {
266
+ location: r,
267
+ remove: () => {
268
+ const t = c == null ? void 0 : c.getElement();
269
+ t && (t.innerHTML = "");
270
+ },
271
+ renderTrack: (t, n, w) => {
272
+ l.render(t, n, w, "truck", 1e3);
273
+ },
274
+ setCenter: (t) => {
275
+ l.setCenter(t);
276
+ },
277
+ closeTrack: () => {
278
+ l.close();
279
+ },
280
+ playTrack: (t, n) => {
281
+ l.play(t, n);
282
+ }
283
+ };
284
+ };
285
+ var zt = /* @__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))(zt || {}), ye = /* @__PURE__ */ ((e) => (e.left = "left", e.right = "right", e.front = "front", e.up = "up", e.down = "down", e.back = "back", e))(ye || {});
286
+ const ko = (e) => {
287
+ const l = /* @__PURE__ */ new Map(), c = {};
288
+ let r = null;
289
+ const a = "--";
290
+ let s = null;
291
+ const o = document.createElement("div"), h = new Ce({
292
+ element: o,
293
+ positioning: "top-left",
294
+ className: "track-label-popup"
295
+ });
296
+ let x, M, t, n, w, $ = !1, A = Date.now(), p, i = 0, u = null, b = 20;
297
+ const f = 8, L = [], O = (d) => {
298
+ var v;
299
+ for (L.unshift(d); L.length > f; ) {
300
+ const m = L.pop(), k = l.get(m);
301
+ k && ((v = k.getSource()) == null || v.clear(), e == null || e.removeLayer(k), l.delete(m), delete c[m]);
302
+ }
303
+ };
304
+ let z = "";
305
+ const K = ["#ff0000", "#00ff00", "#0079ff", "#ffa500", "#800080", "#008080", "#ffc0cb", "#800000", "#000080", "#808000"], ee = Nt(async () => {
306
+ if (r && c[r] && l.get(r).getVisible()) {
307
+ console.log("reRenderTrackLine------------"), await I(r);
308
+ const d = C(r, c[r]);
309
+ rt(r, d);
310
+ }
311
+ }, 100), V = () => r && c[r] && l.get(r).getVisible(), C = (d, v) => {
312
+ let m = [];
313
+ const k = Math.max(1, Math.floor(v.length / b));
314
+ return m = v.filter((S, T) => T % k === 0).map((S, T) => {
315
+ if (Number(S.lon) > 180 || Number(S.lat) > 180) {
316
+ const [D, B] = xt(S.lon, S.lat);
317
+ S.lon = D, S.lat = B;
318
+ }
319
+ return S.center = [S.lon, S.lat], S.centerPoint = wo(S.center), S.time = $t(S.createdAt).format("YYYY-MM-DD HH:mm:ss"), S.id = d, S.index = T, S;
320
+ }), m.filter(
321
+ (S, T, D) => T === D.findIndex(
322
+ (B) => Math.abs(B.lon - S.lon) < 1e-6 && Math.abs(B.lat - S.lat) < 1e-6
323
+ )
324
+ );
325
+ }, P = async (d, v, m, k = "ship", y = 200) => {
326
+ if (!e || JSON.stringify(c[d]) === JSON.stringify(v) && r === d || (v = v == null ? void 0 : v.reverse(), h && k === "ship" && (e != null && e.getOverlays().getArray().includes(h) || e.addOverlay(h)), (v == null ? void 0 : v.length) < 2))
327
+ return;
328
+ O(d), r = d, c[d] = v, b = y;
329
+ const Z = Object.keys(c).findIndex((S) => S === d) || 0;
330
+ z = m || K[Z > 10 ? 10 : Z], await _(), await ve(r);
331
+ }, G = (d) => {
332
+ const v = new be();
333
+ return new Me({
334
+ source: v,
335
+ visible: !1,
336
+ // 默认隐藏
337
+ className: `track-layer-${d}`,
338
+ renderBuffer: 1024,
339
+ properties: { layerType: le.TRACK },
340
+ zIndex: 10
341
+ });
342
+ }, W = (d) => {
343
+ l.forEach((v, m) => {
344
+ var y;
345
+ const k = m === d;
346
+ v.getVisible() !== k && (v.setVisible(k), e.getLayers().getArray().includes(v) || e.addLayer(v), k || (y = v.getSource()) == null || y.clear());
347
+ }), r = d;
348
+ }, _ = async () => {
349
+ const d = r;
350
+ if (!l.has(d)) {
351
+ const Z = G(d);
352
+ l.set(d, Z);
353
+ }
354
+ await W(d);
355
+ const v = z || "", m = c[d] || [];
356
+ if (!(m && m.length > 1)) return [];
357
+ let k = [];
358
+ k = C(d, m);
359
+ const y = k.map((Z) => Z.centerPoint);
360
+ k.length >= 2 && await X(d, y, v);
361
+ }, X = (d, v, m) => {
362
+ const k = new Ue(v), y = l.get(d).getSource(), Z = y.getFeatureById(d);
363
+ if (Z)
364
+ Z.setGeometry(k), Z.setId(d), Z.setStyle(q(m)), u = Z;
365
+ else {
366
+ const S = new me({ geometry: k });
367
+ S.setId(d), S.set("type", "line"), S.setStyle(q(m)), y.addFeature(S), u = S;
368
+ }
369
+ return u;
370
+ }, q = (d) => new te({
371
+ stroke: new $e({
372
+ color: d,
373
+ width: 2
374
+ })
375
+ }), oe = (d, v, m) => {
376
+ try {
377
+ const k = d == null ? void 0 : d.get("data");
378
+ if (d && k && v === "hover") {
379
+ e.getTargetElement().style.cursor = k ? "pointer" : "";
380
+ const y = ke(k), Z = m == null ? void 0 : m.coordinate;
381
+ Z && (o.querySelector(".popup-content"), o.innerHTML = y, h == null || h.setPosition(Z));
382
+ } else
383
+ h && h.setPosition(void 0);
384
+ } catch (k) {
385
+ console.error("handleTrackMapEvent", k);
386
+ }
387
+ }, ke = (d) => {
388
+ if (!(d != null && d.time)) return;
389
+ let v = "";
390
+ return d != null && d.stayTime && (v = `
391
+ <div class="item w-100">
392
+ <div class="item-label">停泊时间约</div>
393
+ <div class="item-item">${xo(Number(d.stayTime))}</div>
394
+ </div>
395
+ `), `
396
+ <div class="track-point-popup">
397
+ <div class="item">
398
+ <div class="item-label">状态</div>
399
+ <div class="item-item">${d != null && d.sailStatus ? zt[d.sailStatus] : a}</div>
400
+ </div>
401
+ <div class="item">
402
+ <div class="item-label">航速</div>
403
+ <div class="item-item">${d.speed || a}</div>
404
+ </div>
405
+ <div class="item">
406
+ <div class="item-label">艏向</div>
407
+ <div class="item-item">${d.hdg || a}</div>
408
+ </div>
409
+ <div class="item">
410
+ <div class="item-label">航向</div>
411
+ <div class="item-item">${d.cog || a}</div>
412
+ </div>
413
+ <div class="item">
414
+ <div class="item-label">经度</div>
415
+ <div class="item-item">${d.lon || a}</div>
416
+ </div>
417
+ <div class="item">
418
+ <div class="item-label">纬度</div>
419
+ <div class="item-item">${d.lat || a}</div>
420
+ </div>
421
+ <div class="item w-100">
422
+ <div class="item-label">时间</div>
423
+ <div class="item-item">${d.time}</div>
424
+ </div>
425
+ ${v ?? v}
426
+ </div>`;
427
+ }, ie = (d) => {
428
+ const m = d.map((T) => {
429
+ const D = e.getPixelFromCoordinate(fe(T.center));
430
+ return {
431
+ ...T,
432
+ original: T,
433
+ pixel: D,
434
+ distance: 0
435
+ // 先初始化,后续计算
436
+ };
437
+ });
438
+ let k = 0;
439
+ m[0].distance = 0;
440
+ for (let T = 1; T < m.length; T++) {
441
+ const D = m[T - 1].pixel, B = m[T].pixel, re = B[0] - D[0], E = B[1] - D[1];
442
+ k += Math.sqrt(re * re + E * E), m[T].distance = k;
443
+ }
444
+ const y = m.filter(
445
+ (T, D) => D === 0 || D === m.length - 1
446
+ ), Z = [];
447
+ for (let T = 0; T < y.length; T++) {
448
+ const D = y[T];
449
+ if (Z.push(D), T < y.length - 1) {
450
+ const B = y[T + 1], re = B.distance - D.distance, E = Math.floor(re / 100);
451
+ for (let j = 1; j <= E; j++) {
452
+ const Q = D.distance + j * 100;
453
+ if (Q >= B.distance) break;
454
+ const ne = ae(
455
+ m,
456
+ Q
457
+ );
458
+ ne && Z.push(ne);
459
+ }
460
+ }
461
+ }
462
+ return Array.from(
463
+ new Map(Z.map((T) => [T.distance.toFixed(2), T])).values()
464
+ ).map((T) => ({
465
+ ...T.original,
466
+ // 优先保留原始数据
467
+ ...T,
468
+ // 覆盖坐标等计算属性
469
+ coord: T.coord,
470
+ // 确保使用插值后的坐标
471
+ pixel: T.pixel,
472
+ distance: T.distance
473
+ }));
474
+ };
475
+ function ae(d, v) {
476
+ for (let m = 1; m < d.length; m++) {
477
+ const k = d[m - 1], y = d[m];
478
+ if (v >= k.distance && v <= y.distance) {
479
+ const Z = (v - k.distance) / (y.distance - k.distance), S = k.pixel[0] + Z * (y.pixel[0] - k.pixel[0]), T = k.pixel[1] + Z * (y.pixel[1] - k.pixel[1]), D = e == null ? void 0 : e.getCoordinateFromPixel([S, T]);
480
+ return {
481
+ ...k,
482
+ // 继承前一个点的属性(可调整)
483
+ coord: D,
484
+ pixel: [S, T],
485
+ distance: v,
486
+ original: void 0
487
+ // 明确标记为插值生成点
488
+ };
489
+ }
490
+ }
491
+ return null;
492
+ }
493
+ const rt = async (d, v) => {
494
+ const m = ie(v);
495
+ console.log("simplifiedPoints", m.length, "list", v.length);
496
+ const k = m.map((T) => lt(T)), y = m.map((T) => U(T, z)), Z = he(d, m, v, z);
497
+ l.get(d).getSource().addFeatures([...k, ...y, ...Z]);
498
+ }, lt = (d) => {
499
+ const v = new me({
500
+ geometry: new de(d.centerPoint),
501
+ data: d
502
+ });
503
+ v.set("type", "track_point"), v.set("trackId", d.id), v.set("data", d);
504
+ let m = [
505
+ ...Y(d, z)
506
+ ];
507
+ return (d.index === 0 || d.index === c[d.id].length - 1) && (m = [...xe(d)], v.set("type", "track_begin")), d.state !== void 0 && d.state !== null && (m = [...R(d)], v.set("type", "track_icon")), v.setStyle(m), v;
508
+ }, g = window.devicePixelRatio || 1, N = /* @__PURE__ */ new Map();
509
+ let F = null, H = null;
510
+ function J(d, v) {
511
+ const m = `${d}`;
512
+ if (N.has(m))
513
+ return N.get(m);
514
+ if (!F) {
515
+ F = document.createElement("canvas");
516
+ try {
517
+ H = F.getContext("2d", {
518
+ willReadFrequently: !0
519
+ });
520
+ } catch (kt) {
521
+ console.log("e", kt), H = F.getContext("2d");
522
+ }
523
+ }
524
+ const k = F, y = H;
525
+ if (!y) return "";
526
+ k.width = 0, k.height = 0;
527
+ const Z = 2, S = 8, T = 16, D = window.devicePixelRatio || 1, B = "500 12px Arial";
528
+ y.font = B;
529
+ const E = y.measureText(d).width, j = S + E + S, Q = Z + 14 + Z;
530
+ let ne = 0, pe = 0, Ee = 0, Te = 0, He = 0, Re = 0, Pe = 0, ze = 0;
531
+ ne = T + j, pe = T + Q, Ee = j, Te = Q, He = j + T, Re = 0, Pe = 0, ze = T, k.width = Math.round(ne * D), k.height = Math.round(pe * D), y.scale(D, D), y.clearRect(0, 0, ne, pe), y.beginPath(), y.moveTo(Ee, Te), y.lineTo(He, Re), y.strokeStyle = v || "#FFF", y.lineWidth = 1, y.stroke(), y.fillStyle = "#FFF", y.fillRect(Pe, ze, j, Q), y.strokeStyle = v || "#FFF", y.lineWidth = 1, y.strokeRect(Pe, ze, j, Q), y.font = B, y.textBaseline = "middle";
532
+ const _e = ze + Z / 2 + Q / 2;
533
+ y.strokeStyle = "#ffffff", y.lineWidth = 1, y.strokeText(d, Pe + S, _e), y.fillStyle = "#000000", y.fillText(d, Pe + S, _e);
534
+ const je = k.toDataURL("image/png");
535
+ return N.set(m, je), je;
536
+ }
537
+ const U = (d, v) => {
538
+ const m = J(d.time, v), k = new me({
539
+ geometry: new de(d.centerPoint),
540
+ data: d
541
+ });
542
+ k.set("type", "track_point_label");
543
+ const y = new te({
544
+ image: new Ne({
545
+ src: m,
546
+ anchor: [1, 0],
547
+ displacement: [0, 0],
548
+ scale: 1 / g,
549
+ anchorXUnits: "fraction",
550
+ anchorYUnits: "fraction"
551
+ }),
552
+ zIndex: 100
553
+ });
554
+ return k.setStyle(y), k;
555
+ }, I = (d) => {
556
+ const v = l.get(d).getSource();
557
+ v.forEachFeature((m) => {
558
+ m.get("type") !== "line" && v.removeFeature(m);
559
+ });
560
+ }, Y = (d, v) => [
561
+ new te({
562
+ // 扩大交互热区
563
+ image: new et({
564
+ stroke: new $e({ color: "rgba(0, 0, 0, 0.01)", width: 20 }),
565
+ radius: 3
566
+ })
567
+ }),
568
+ // 轨迹点样式
569
+ new te({
570
+ image: new et({
571
+ fill: new ue({ color: v }),
572
+ stroke: new $e({ color: "#fff", width: 2 }),
573
+ radius: 3
574
+ })
575
+ })
576
+ // textStyle,
577
+ ], R = (d) => {
578
+ const v = "#E31818", m = "#1890FF", k = "&#xe6d2", y = new te({
579
+ text: new Ze({
580
+ font: "Normal 22px map-iconfont",
581
+ text: Fe(k),
582
+ offsetY: -10,
583
+ fill: new ue({
584
+ color: Number(d.state) === 0 ? v : Number(d.state) === 1 ? m : ""
585
+ })
586
+ }),
587
+ zIndex: 99
588
+ }), S = Lt("&#xe6e2;"), D = Lt("&#xe703;"), B = [];
589
+ return Number(d.state) === 0 ? B.push(S) : Number(d.state) === 1 && B.push(D), B.push(y), B;
590
+ }, he = (d, v, m, k) => {
591
+ const y = v || [], Z = v.length;
592
+ Z || (y.push(m[0]), y.push(m[m.length - 1]));
593
+ const S = new Set(v.map((D) => `${D.centerPoint[0]},${D.centerPoint[1]}`)), T = [];
594
+ for (let D = 0; D < Z - 1; D++) {
595
+ let B;
596
+ const re = v[D], E = (v[D + 1].index + re.index) / 2;
597
+ if (E % 2 === 0)
598
+ B = m[E].centerPoint;
599
+ else {
600
+ const j = m[Math.floor(E)], Q = m[Math.ceil(E)];
601
+ if (j && Q) {
602
+ const [ne, pe] = j.centerPoint, [Ee, Te] = Q.centerPoint;
603
+ B = [(ne + Ee) / 2, (pe + Te) / 2];
604
+ }
605
+ }
606
+ if (B) {
607
+ const j = `${B[0]},${B[1]}`;
608
+ if (!S.has(j)) {
609
+ const Q = new me({
610
+ geometry: new de(B)
611
+ });
612
+ Q.set("type", "track_arrow"), Q.setStyle(
613
+ new te({
614
+ text: new Ze({
615
+ font: "700 12px map-iconfont",
616
+ text: Fe("&#xe6bc;"),
617
+ fill: new ue({ color: k }),
618
+ rotation: bt(
619
+ v[D].center,
620
+ v[D + 1].center
621
+ ) * (Math.PI / 180)
622
+ })
623
+ })
624
+ ), T.push(Q), S.add(j);
625
+ }
626
+ }
627
+ }
628
+ return T;
629
+ }, ve = (d) => {
630
+ var Z, S;
631
+ const v = e.getView(), m = (Z = l == null ? void 0 : l.get(d)) == null ? void 0 : Z.getSource(), k = u || (d ? m == null ? void 0 : m.getFeatureById(d) : null);
632
+ if (!k) return;
633
+ const y = (S = k == null ? void 0 : k.getGeometry()) == null ? void 0 : S.getExtent();
634
+ if (!y || y[0] === y[2] || y[1] === y[3]) {
635
+ console.warn("Invalid track extent");
636
+ return;
637
+ }
638
+ try {
639
+ const T = y[2] - y[0], D = y[3] - y[1], B = 1e-4;
640
+ if (T < B || D < B) {
641
+ const E = [(y[0] + y[2]) / 2, (y[1] + y[3]) / 2];
642
+ v.setCenter(E);
643
+ return;
644
+ }
645
+ const re = Ut(y, Math.max(T, D) * 0.1);
646
+ v.fit(re, {
647
+ maxZoom: ce.max,
648
+ padding: [30, 30, 30, 30]
649
+ // 添加边距
650
+ });
651
+ } catch (T) {
652
+ console.error("setTrackViewCenter error:", T);
653
+ }
654
+ }, xe = (d) => {
655
+ const v = "&#xe69b;", y = d.index === 0 ? "#fcdc3f" : "#ff0000";
656
+ return [new te({
657
+ text: new Ze({
658
+ font: "Normal 14px map-iconfont",
659
+ text: Fe(v),
660
+ fill: new ue({ color: y })
661
+ }),
662
+ zIndex: 101
663
+ })];
664
+ }, it = () => {
665
+ console.log("清除所有的轨迹-----"), Ke(), l.forEach((v) => {
666
+ var m;
667
+ (m = v.getSource()) == null || m.clear(), e == null || e.removeLayer(v);
668
+ }), Object.keys(c).forEach((v) => {
669
+ l.delete(v), delete c[v];
670
+ });
671
+ }, qe = (d) => {
672
+ const v = l.get(d || r);
673
+ v == null || v.setVisible(!1);
674
+ const m = e.getOverlays().getArray();
675
+ for (let k = 0; k < m.length; ) {
676
+ const y = m[k];
677
+ y.get("class") === "track-label-overlay" ? (y.setPosition(void 0), y.dispose()) : k++;
678
+ }
679
+ Ke();
680
+ }, Xe = (d, v = De.NM) => {
681
+ const m = {
682
+ id: d,
683
+ length: "--"
684
+ }, y = (c[d] || []).map(
685
+ (S) => Be([S.lon, S.lat], se.data, se.mercator)
686
+ ), Z = new Ue(y);
687
+ return m.length = yo(Z, v) || "--", m;
688
+ }, Zt = (d, v) => {
689
+ Dt(String(d), v);
690
+ }, Dt = (d, v) => {
691
+ const m = c[String(d)], k = m == null ? void 0 : m.map((y) => [y.lon, y.lat]);
692
+ k && Gt(k, v);
693
+ }, st = new te({
694
+ text: new Ze({
695
+ font: "700 20px map-iconfont",
696
+ text: Fe("&#xe657;"),
697
+ fill: new ue({ color: "#ff0000" }),
698
+ rotation: 0
699
+ // 初始旋转角度
700
+ })
701
+ }), Ht = (d, v) => {
702
+ var E, j;
703
+ const m = Number(50 * v), k = ((E = d.frameState) == null ? void 0 : E.time) ?? Date.now(), y = k - A;
704
+ if (i = (i + m * y / 1e6) % 2, A = k, i >= 1) {
705
+ Ke();
706
+ return;
707
+ }
708
+ const Z = M.getCoordinateAt(
709
+ i > 1 ? 2 - i : i
710
+ ), S = M.getCoordinateAt(
711
+ i > 1 ? i - 0.01 : i
712
+ ), T = M.getCoordinateAt(
713
+ i > 1 ? 2 - i : i + 0.01
714
+ ), B = bt(
715
+ Et(S, "array"),
716
+ Et(T, "array")
717
+ ) * Math.PI / 180;
718
+ (j = st.getText()) == null || j.setRotation(B), n.setCoordinates(Z);
719
+ const re = It(d);
720
+ re.setStyle(st), re.drawGeometry(n), e == null || e.render();
721
+ }, Wt = () => {
722
+ var d;
723
+ $ = !0, A = Date.now(), i = 0, n = ((d = t.getGeometry()) == null ? void 0 : d.clone()) || new de([0, 0]), s && (p == null || p.on("postrender", s)), w == null || w.setGeometry(void 0);
724
+ }, Ke = () => {
725
+ $ && ($ = !1, w == null || w.setGeometry(void 0), s && p && p.un("postrender", s), p && (e == null || e.removeLayer(p)), p = null, w = null);
726
+ }, Gt = (d, v) => {
727
+ $ && Ke(), x = new Ct({
728
+ factor: 1e6
729
+ }).writeGeometry(new Ue(d)), M = new Ct({
730
+ factor: 1e6
731
+ }).readGeometry(x, {
732
+ dataProjection: se.data,
733
+ featureProjection: se.mercator
734
+ }), t = new me({
735
+ type: "icon",
736
+ geometry: new de(M.getFirstCoordinate())
737
+ });
738
+ const m = t.getGeometry();
739
+ n = m ? m.clone() : new de([0, 0]), w = new me({
740
+ type: "geoMarker",
741
+ style: st,
742
+ geometry: n
743
+ }), p = new Me({
744
+ source: new be({
745
+ features: [w]
746
+ })
747
+ }), e == null || e.addLayer(p), s = (k) => Ht(k, v), Wt();
748
+ }, bt = (d, v, m) => {
749
+ function k(E) {
750
+ return 180 * (E % (2 * Math.PI)) / Math.PI;
751
+ }
752
+ function y(E) {
753
+ return E % 360 * Math.PI / 180;
754
+ }
755
+ function Z(E) {
756
+ var j;
757
+ if (!E) throw new Error("Coordinate is required");
758
+ if (!Array.isArray(E)) {
759
+ if ((E == null ? void 0 : E.type) === "Feature" && (E == null ? void 0 : E.geometry) !== null && ((j = E == null ? void 0 : E.geometry) == null ? void 0 : j.type) === "Point")
760
+ return E == null ? void 0 : E.geometry.coordinates;
761
+ if (E.type === "Point") return (E == null ? void 0 : E.coordinates) || [];
762
+ }
763
+ if (Array.isArray(E) && E.length >= 2 && !Array.isArray(E[0]) && !Array.isArray(E[1]))
764
+ return E;
765
+ throw new Error(
766
+ "Coordinate must be GeoJSON Point or an Array of numbers"
767
+ );
768
+ }
769
+ function S(E, j, Q = {}) {
770
+ if (Q.final)
771
+ return function(_e, je) {
772
+ return (S(je, _e) + 180) % 360;
773
+ }(E, j);
774
+ const ne = Z(E), pe = Z(j), Ee = y(ne[0]), Te = y(pe[0]), He = y(ne[1]), Re = y(pe[1]), Pe = Math.sin(Te - Ee) * Math.cos(Re), ze = Math.cos(He) * Math.sin(Re) - Math.sin(He) * Math.cos(Re) * Math.cos(Te - Ee);
775
+ return k(Math.atan2(Pe, ze));
776
+ }
777
+ function T(E) {
778
+ return !isNaN(E) && E !== null && !Array.isArray(E);
779
+ }
780
+ function D(E, j = {}, Q = {}) {
781
+ return E || console.log("Coordinates are required"), Array.isArray(E) || console.log("Coordinates must be an Array"), E.length < 2 && console.log("Coordinates must be at least 2 numbers long"), (!T(E[0]) || !T(E[1])) && console.log("Coordinates must contain numbers"), B({ type: "Point", coordinates: E }, j, Q);
782
+ }
783
+ function B(E, j = {}, Q = {}) {
784
+ const ne = {
785
+ type: "Feature",
786
+ id: "",
787
+ properties: {},
788
+ bbox: {},
789
+ geometry: {}
790
+ };
791
+ return Q.id !== void 0 && (ne.id = Q.id), Q.bbox && (ne.bbox = Q.bbox), ne.properties = j, ne.geometry = E, ne;
792
+ }
793
+ const re = S(D(d), D(v), m);
794
+ return re < 0 ? 360 + re : re;
795
+ };
796
+ return {
797
+ render: P,
798
+ remove: it,
799
+ play: Zt,
800
+ setCenter: ve,
801
+ close: qe,
802
+ getLength: Xe,
803
+ handleTrackMapEvent: oe,
804
+ reRenderTrackLine: ee,
805
+ getTrackStatus: V
806
+ };
807
+ }, po = () => {
808
+ const e = ge();
809
+ return {
810
+ setProps: (r) => {
811
+ e.value = r;
812
+ },
813
+ getProps: () => e.value
814
+ };
815
+ };
816
+ function Co(e) {
817
+ const l = ge(null), c = Qe(() => ({
818
+ "--overlay-color": "#FFF",
819
+ "--bg-color1": e.colors && e.colors[0] ? e.colors[0] : "#ffffff",
820
+ // 默认第一个颜色
821
+ "--bg-color2": e.colors && e.colors[1] ? e.colors[1] : "#ffffff",
822
+ "--bg-color": "#ffffff",
823
+ position: "relative",
824
+ "pointer-events": "none"
825
+ })), r = Qe(() => {
826
+ var o;
827
+ return {
828
+ position: "relative",
829
+ "border-radius": "1px",
830
+ "background-color": "var(--content-bg)",
831
+ color: "#000",
832
+ padding: "2px 5px 2px 0px",
833
+ font: "500 Normal 12px",
834
+ "font-size": "12px",
835
+ "box-shadow": "0 2px 10px rgba(0, 0, 0, 0.2)",
836
+ "white-space": "nowrap",
837
+ border: "1px solid #FFF",
838
+ "pointer-events": "auto",
839
+ // 'transition': 'background-color 0.5s ease, border 0.5s ease',
840
+ "z-index": "1",
841
+ display: "flex",
842
+ "align-items": "center",
843
+ animation: e.selected ? e.colors && ((o = e.colors) == null ? void 0 : o.length) >= 2 ? "blink-dual 2s ease-in-out infinite" : "blink-single 1.5s ease-in-out infinite" : "none"
844
+ // "animation": props.selected ? 'blink 1.5s ease-in-out infinite' : 'none', // 动画开关
845
+ };
846
+ }), a = Qe(() => ({
847
+ width: "14px",
848
+ height: "14px",
849
+ margin: "1px 5px 1px 1px",
850
+ "background-color": "var(--attention-bg)"
851
+ })), s = Qe(() => ({
852
+ position: "absolute",
853
+ top: "0px",
854
+ color: "var(--overlay-color)",
855
+ "pointer-events": "none",
856
+ transform: "translateY(-1px)",
857
+ "z-index": "0",
858
+ width: "20px",
859
+ height: "20px",
860
+ overflow: "visible",
861
+ left: "-20px"
862
+ }));
863
+ return () => we("div", {
864
+ ref: l,
865
+ class: "ship-overlay-container",
866
+ "data-id": e.id,
867
+ style: c.value
868
+ }, [
869
+ we(
870
+ "div",
871
+ {
872
+ class: "ship-overlay-content",
873
+ style: r.value,
874
+ "data-id": e.id
875
+ },
876
+ [
877
+ we("div", {
878
+ "data-id": e.id,
879
+ style: e.selected ? a.value : {}
880
+ }, ""),
881
+ we("div", {
882
+ class: "text",
883
+ "data-id": e.id,
884
+ style: {
885
+ fontSize: "12px",
886
+ fontWeight: 500,
887
+ fontFamily: "Arial"
888
+ }
889
+ }, e.name || "未命名船舶"),
890
+ we("div", {
891
+ class: "icons",
892
+ "data-id": e.id,
893
+ style: {
894
+ color: "#3370ff",
895
+ marginLeft: "6px"
896
+ }
897
+ }, [
898
+ e.existDevice ? we("i", {
899
+ class: "map-iconfont icon-camera",
900
+ "data-id": e.id,
901
+ style: {
902
+ fontSize: "12px",
903
+ marginRight: "6px"
904
+ }
905
+ }) : "",
906
+ e.existMobile ? we("i", {
907
+ "data-id": e.id,
908
+ class: "map-iconfont icon-tele",
909
+ style: {
910
+ fontSize: "12px",
911
+ marginRight: "6px"
912
+ }
913
+ }) : "",
914
+ e.existWaterGauge ? we("i", {
915
+ "data-id": e.id,
916
+ class: "map-iconfont icon-ruler",
917
+ style: {
918
+ fontSize: "12px",
919
+ marginRight: "6px"
920
+ }
921
+ }) : ""
922
+ ])
923
+ ]
924
+ ),
925
+ we("svg", {
926
+ class: "ship-overlay-line",
927
+ style: s.value,
928
+ viewBox: "0 0 20 20",
929
+ xmlns: "http://www.w3.org/2000/svg"
930
+ }, [
931
+ we("line", {
932
+ x1: "0",
933
+ y1: "20",
934
+ x2: "20",
935
+ y2: "4",
936
+ stroke: "white",
937
+ "stroke-width": "1"
938
+ })
939
+ ])
940
+ ]);
941
+ }
942
+ const Vt = (e) => {
943
+ const { spd: l, hdg: c, cog: r } = e;
944
+ return l ? c !== null && +c != 511 && r !== null ? r - +c >= 3 ? ye.right : r - +c <= -3 ? ye.left : ye.front : ye.front : "";
945
+ };
946
+ function Mo(e, l) {
947
+ const { isHighlight: c, shipData: r, color: a } = e.getProperties(), s = ot(l), o = nt(l, r, s), h = ((r == null ? void 0 : r.cog) - 90 + 360) % 360, x = Vt(r);
948
+ return {
949
+ featureId: r.id,
950
+ shipType: s,
951
+ isHighlight: !!c,
952
+ scale: o,
953
+ fill: a,
954
+ deg: h,
955
+ direct: x
956
+ };
957
+ }
958
+ const Ge = /* @__PURE__ */ new Map();
959
+ function Lo(e) {
960
+ return `${e.featureId}_${e.shipType}_${e.isHighlight}_${e.scale}_${e.fill}_${e.deg}_${e.direct}`;
961
+ }
962
+ const Ve = (e, l) => {
963
+ const c = Mo(l, e), r = Lo(c);
964
+ if (Ge.has(r))
965
+ return Ge.get(r);
966
+ const { shipData: a } = l.getProperties(), s = ot(e), o = nt(e, a, s), h = Eo(l, o, s);
967
+ return Ge.set(r, h), h;
968
+ }, ot = (e) => {
969
+ const l = e == null ? void 0 : e.getView().getZoom();
970
+ return l && l <= ce.shipModelMax && l >= ce.shipTriggleMin ? "ship" : "triangle";
971
+ };
972
+ let Tt = null;
973
+ const nt = (e, l, c) => {
974
+ if (c === "triangle")
975
+ return ce.scaleNum;
976
+ const r = e == null ? void 0 : e.getView().getResolution();
977
+ if (Tt === r && c === "triangle")
978
+ return ce.scaleNum;
979
+ if (Tt = r, c === "ship") {
980
+ const { len: a, wid: s } = l, o = 97, h = 20, x = 1 / r, M = a * x / o, t = s * x / h, n = Math.min(M, t);
981
+ return Math.max(0.2, Math.min(2, n));
982
+ }
983
+ return ce.scaleNum;
984
+ }, Eo = (e, l, c) => {
985
+ const { color: r, direct: a, isHighlight: s, shipData: o } = e.getProperties(), h = ((o == null ? void 0 : o.cog) - 90 + 360) % 360;
986
+ return new te({
987
+ image: new Ne({
988
+ src: x(),
989
+ scale: l || ce.scaleNum,
990
+ anchor: [0.5, 0.5],
991
+ rotation: h * Math.PI / 180,
992
+ rotateWithView: !1
993
+ })
994
+ });
995
+ function x() {
996
+ return `data:image/svg+xml;utf8,${encodeURIComponent(M())}`;
997
+ }
998
+ function M() {
999
+ switch (c) {
1000
+ case "triangle":
1001
+ return `<svg width="41" height="24" viewBox="0 0 41 24" fill="none" xmlns="http://www.w3.org/2000/svg">
1002
+ <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"
1003
+ fill="${r}" stroke="${s ? "#FF2424" : "black"}" stroke-width="${s ? "2" : "0.578947"}" />
1004
+ <!--path船航向左边或者向前-->
1005
+ ${a === ye.left && `<path d="M30 12L40 12L40 8" stroke="${s ? "#FF2424" : "black"}" stroke-width="2"/>`}
1006
+ <!--path船航向右边-->
1007
+ ${a === ye.right && `<path d="M30 12L40 12L40 16" stroke="${s ? "#FF2424" : "black"}" stroke-width="2"/>`}
1008
+ <!--path黑线无左右-->
1009
+ ${a === ye.front && `<path d="M30 12L40 12" stroke="${s ? "#FF2424" : "black"}" stroke-width="1.5"/>`}
1010
+ </svg>
1011
+ `;
1012
+ case "ship":
1013
+ return `<svg width="97" height="20" viewBox="0 0 97 20" fill="none" xmlns="http://www.w3.org/2000/svg">
1014
+ <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"
1015
+ fill="${r}" stroke="${s ? "#FF2424" : "black"}" stroke-width="${s ? "4" : "0.578947"}"/>
1016
+ ${a === ye.left && `<path d="M86 10L96 10L96 6" stroke="${s ? "#FF2424" : "black"}" stroke-width="1.5"/>`}
1017
+ ${a === ye.right && `<path d="M86 10L96 10L96 14" stroke="${s ? "#FF2424" : "black"}" stroke-width="1.5"/>`}
1018
+ ${a === ye.front && `<path d="M86 10L96 10" stroke="${s ? "#FF2424" : "black"}" stroke-width="1.5"/>`}
1019
+ </svg>
1020
+ `;
1021
+ default:
1022
+ return "";
1023
+ }
1024
+ }
1025
+ }, Ye = /* @__PURE__ */ new Map();
1026
+ function To(e, l) {
1027
+ const c = ot(l), r = nt(l, e, c);
1028
+ return `${c}_${r}_${c === "ship" ? 109 : 49}`;
1029
+ }
1030
+ const Pt = (e, l) => {
1031
+ const c = To(l, e);
1032
+ if (Ye.has(c))
1033
+ return Ye.get(c);
1034
+ const r = ot(e), a = nt(e, l, r), s = r === "ship" ? 109 : 49, o = `
1035
+ <svg xmlns="http://www.w3.org/2000/svg" width="${s}" height="${s}" viewBox="0 0 49 49" fill="none">
1036
+ <path d="M1.99982 46.9998L1.99982 1.99982L46.9998 1.99982L46.9998 46.9998L1.99982 46.9998Z" fill="#FF2424" fill-opacity="0.2"/>
1037
+ <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"/>
1038
+ </svg>
1039
+ `, h = new te({
1040
+ image: new Ne({
1041
+ src: `data:image/svg+xml;utf8,${encodeURIComponent(o)}`,
1042
+ scale: a,
1043
+ anchorXUnits: "fraction",
1044
+ anchorYUnits: "fraction"
1045
+ })
1046
+ });
1047
+ return Ye.set(c, h), h;
1048
+ };
1049
+ function Po(e, l, c, r) {
1050
+ if (l) {
1051
+ const a = new Ce({
1052
+ element: c,
1053
+ positioning: "top-left",
1054
+ id: "label-" + (r == null ? void 0 : r.id),
1055
+ offset: [20, -20],
1056
+ autoPan: !1,
1057
+ position: l,
1058
+ stopEvent: !1,
1059
+ className: r != null && r.blinking ? "ship-label-overlay-blinking" : "ship-label-overlay"
1060
+ });
1061
+ a.set("class", "zh-map-ship-overlay"), e.addOverlay(a);
1062
+ }
1063
+ }
1064
+ const So = (e, l) => {
1065
+ const { lon: c, lat: r, blinking: a } = l, s = Ot(l);
1066
+ c && r && Po(e, fe([c, r]), s, { ...l, blinking: a });
1067
+ }, Ot = (e) => {
1068
+ const l = document.createElement("div");
1069
+ l.className = "ship-overlay-box", l.style.position = "relative";
1070
+ const { lon: c, lat: r, blinking: a, blinkingColors: s, name: o } = e, h = ut({
1071
+ setup() {
1072
+ return Co({
1073
+ id: e == null ? void 0 : e.id,
1074
+ selected: a,
1075
+ name: o,
1076
+ colors: s || [],
1077
+ existDevice: e == null ? void 0 : e.existDevice,
1078
+ existMobile: e == null ? void 0 : e.existMobile,
1079
+ existWaterGauge: e == null ? void 0 : e.existWaterGauge
1080
+ });
1081
+ }
1082
+ });
1083
+ return Yt(h, l), l;
1084
+ }, St = (e) => {
1085
+ const l = [];
1086
+ return e.existDevice && l.push("&#xe687;"), e.existMobile && l.push("&#xe688;"), e.existWaterGauge && l.push("&#xe686;"), l;
1087
+ };
1088
+ function Fo() {
1089
+ const e = [
1090
+ "left-top",
1091
+ "left-middle",
1092
+ "left-bottom",
1093
+ "right-top",
1094
+ "right-middle",
1095
+ "right-bottom"
1096
+ ];
1097
+ return e[Math.floor(Math.random() * e.length)];
1098
+ }
1099
+ const $o = window.devicePixelRatio || 1, ct = /* @__PURE__ */ new Map();
1100
+ let We = null, at = null;
1101
+ function No(e, l, c = "left-bottom", r = 10) {
1102
+ const a = `${e}-${l.join(",")}-${c}-${r}`;
1103
+ if (ct.has(a))
1104
+ return ct.get(a);
1105
+ if (!We) {
1106
+ We = document.createElement("canvas");
1107
+ try {
1108
+ at = We.getContext("2d", {
1109
+ willReadFrequently: !0
1110
+ });
1111
+ } catch {
1112
+ at = We.getContext("2d");
1113
+ }
1114
+ }
1115
+ const s = We, o = at;
1116
+ if (!o) return "";
1117
+ s.width = 0, s.height = 0;
1118
+ const h = 2, x = 4, M = 16, t = window.devicePixelRatio || 1, n = "500 12px Arial", w = "12px map-iconfont";
1119
+ o.font = n;
1120
+ const A = o.measureText(e).width;
1121
+ o.font = w;
1122
+ const p = l.map((q) => ({ width: o.measureText(Fe(q)).width, height: 14 })), i = p.reduce((q, oe) => q + oe.width, 0), u = l.length * r, b = x + A + i + u + x, f = h + 14 + h * 2;
1123
+ let L, O, z = 0, K = 0, ee = 0, V = 0, C = 0, P = 0;
1124
+ switch (L = M + b, c) {
1125
+ case "right-top":
1126
+ O = M + f, z = 0, K = M + f, ee = M, V = 0, C = M, P = 0;
1127
+ break;
1128
+ case "right-middle":
1129
+ O = f, z = 0, K = f / 2, ee = M, V = f / 2, C = M, P = 0;
1130
+ break;
1131
+ case "right-bottom":
1132
+ O = M + f, z = 0, K = 0, ee = M, V = M, C = M, P = M;
1133
+ break;
1134
+ case "left-top":
1135
+ O = M + f, z = b, K = M, ee = b + M, V = f + M, C = 0, P = 0;
1136
+ break;
1137
+ case "left-middle":
1138
+ O = f, z = b, K = f / 2, ee = b + M, V = f / 2, C = 0, P = 0;
1139
+ break;
1140
+ case "left-bottom":
1141
+ O = M + f, z = b, K = f, ee = b + M, V = 0, C = 0, P = M;
1142
+ break;
1143
+ }
1144
+ O = O + h, s.width = Math.round(L * t), s.height = Math.round(O * t), o.scale(t, t), o.clearRect(0, 0, L, O), o.beginPath(), o.moveTo(z, K), o.lineTo(ee, V), o.strokeStyle = "#FFF", o.lineWidth = 1, o.stroke(), o.fillStyle = "#FFF", o.fillRect(C, P, b, f), o.font = n, o.textBaseline = "middle";
1145
+ const G = P + h / 2 + f / 2;
1146
+ o.strokeStyle = "#ffffff", o.lineWidth = 1, o.strokeText(e, C + x, G), o.fillStyle = "#000000", o.fillText(e, C + x, G), o.font = w, o.fillStyle = "#3370ff";
1147
+ let W = C + x + A + r;
1148
+ const _ = P + f / 2;
1149
+ l.length > 0 && l.forEach((q, oe) => {
1150
+ o.fillText(Fe(q), W, _), W += p[oe].width + r;
1151
+ });
1152
+ const X = s.toDataURL("image/png");
1153
+ return ct.set(a, X), X;
1154
+ }
1155
+ const Ft = (e, l) => {
1156
+ const { name: c, rightIcons: r, selected: a } = e.getProperties(), s = l !== 1 ? Fo() : "right-top", o = No(c, r, s);
1157
+ let h = [0, 0];
1158
+ switch (s) {
1159
+ case "right-top":
1160
+ h = [0, 1];
1161
+ break;
1162
+ case "right-middle":
1163
+ h = [0, 0.5];
1164
+ break;
1165
+ case "right-bottom":
1166
+ h = [0, 0];
1167
+ break;
1168
+ case "left-top":
1169
+ h = [1, 1];
1170
+ break;
1171
+ case "left-middle":
1172
+ h = [1, 0.5];
1173
+ break;
1174
+ case "left-bottom":
1175
+ h = [1, 0];
1176
+ break;
1177
+ }
1178
+ return new te({
1179
+ image: new Ne({
1180
+ src: o,
1181
+ anchor: h,
1182
+ displacement: [0, 0],
1183
+ scale: 1 / $o,
1184
+ anchorXUnits: "fraction",
1185
+ anchorYUnits: "fraction"
1186
+ }),
1187
+ zIndex: a ? 100 : 10
1188
+ });
1189
+ }, Ro = (e) => {
1190
+ e.getInteractions().forEach((l) => {
1191
+ l instanceof mt && l.setActive(!1);
1192
+ });
1193
+ }, zo = (e) => {
1194
+ e.getInteractions().forEach((l) => {
1195
+ l instanceof mt && l.setActive(!0);
1196
+ });
1197
+ }, Le = (e, l) => {
1198
+ const c = e.getViewport();
1199
+ c && (c.style.cursor = l);
1200
+ }, Vo = (e, l) => {
1201
+ const c = ge([]), r = ge("km"), a = (V) => {
1202
+ r.value = V;
1203
+ };
1204
+ let s, o = "close";
1205
+ const h = () => {
1206
+ Le(e, "crosshair"), t(), Ro(e), e.on("pointermove", $), e.getViewport().addEventListener("mouseout", () => {
1207
+ s && s.classList.add("hidden");
1208
+ }), p(), o = "open";
1209
+ };
1210
+ let x, M;
1211
+ const t = () => {
1212
+ x = new be(), M = new Me({
1213
+ source: x,
1214
+ zIndex: 1e3,
1215
+ style: {
1216
+ "fill-color": "rgba(255, 255, 255, 0.2)",
1217
+ "stroke-color": "#ffcc33",
1218
+ "stroke-width": 2,
1219
+ "circle-radius": 7,
1220
+ "circle-fill-color": "#ffcc33"
1221
+ }
1222
+ }), e == null || e.addLayer(M);
1223
+ };
1224
+ let n, w;
1225
+ const $ = (V) => {
1226
+ if (V.dragging)
1227
+ return;
1228
+ let C = "点击选择起点";
1229
+ n && (C = "单击继续,双击结束"), s && (s.innerHTML = C, w.setPosition(V.coordinate), s.classList.remove("hidden"));
1230
+ };
1231
+ let A;
1232
+ const p = () => {
1233
+ A = new Ie({
1234
+ source: x,
1235
+ type: "LineString",
1236
+ style: new te({
1237
+ fill: new ue({
1238
+ color: "rgba(255, 255, 255, 0.2)"
1239
+ }),
1240
+ stroke: new $e({
1241
+ color: "rgba(255,204,51)",
1242
+ lineDash: [10, 10],
1243
+ width: 2
1244
+ }),
1245
+ image: new et({
1246
+ radius: 5,
1247
+ stroke: new $e({
1248
+ color: "rgba(0, 0, 0, 0.7)"
1249
+ }),
1250
+ fill: new ue({
1251
+ color: "rgba(255, 255, 255, 0.2)"
1252
+ })
1253
+ })
1254
+ }),
1255
+ // 添加条件函数,判断是否应该出发点绘制
1256
+ condition: (C) => {
1257
+ const P = C.originalEvent.target;
1258
+ return P.className !== "ol-tooltip-measure" && P.className !== "ol-tooltip-delete-button";
1259
+ }
1260
+ }), e == null || e.addInteraction(A), f(), L();
1261
+ let V;
1262
+ A.on("drawstart", function(C) {
1263
+ var G;
1264
+ n = C.feature, n.set("randomId", i());
1265
+ let P;
1266
+ V = (G = n.getGeometry()) == null ? void 0 : G.on("change", function(W) {
1267
+ const _ = W.target, X = At(_, r.value);
1268
+ P = _.getLastCoordinate(), u && X && (u.innerHTML = X), b.setPosition(P);
1269
+ });
1270
+ }), A.on("drawend", function() {
1271
+ var C, P, G;
1272
+ if (u && (u.className = "ol-tooltip ol-tooltip-static ol-tooltip-measure"), u != null && u.innerHTML) {
1273
+ const W = (n == null ? void 0 : n.get("randomId")) || i();
1274
+ c.value.push({ id: W, value: u == null ? void 0 : u.innerHTML }), u.innerHTML = `${u.innerHTML}<div class="ol-tooltip-delete-button" data-id="${W}"><i class="map-iconfont icon-delete"></i></div>`;
1275
+ }
1276
+ (C = document.querySelector(".ol-selectable:has(.ol-tooltip-delete-button):last-child .ol-tooltip-delete-button")) == null || C.addEventListener("click", (W) => {
1277
+ var X;
1278
+ W.preventDefault(), W.stopPropagation();
1279
+ const _ = (X = W.target) == null ? void 0 : X.getAttribute("data-id");
1280
+ _ && z(_);
1281
+ }), b.setOffset([0, -7]), n = null, u = null, f(), V && gt(V), (G = (P = l.getProps()) == null ? void 0 : P.lineDrawEnd) == null || G.call(P, c.value), s.innerHTML = "";
1282
+ });
1283
+ }, i = () => Math.random().toString(36).substring(2, 9);
1284
+ let u, b;
1285
+ const f = () => {
1286
+ u != null && u.parentNode && u.parentNode.removeChild(u), u = document.createElement("div"), u.className = "ol-tooltip ol-tooltip-measure", b = new Ce({
1287
+ element: u,
1288
+ offset: [0, -15],
1289
+ positioning: "bottom-center",
1290
+ stopEvent: !1,
1291
+ insertFirst: !1
1292
+ }), e == null || e.addOverlay(b);
1293
+ }, L = () => {
1294
+ s != null && s.parentNode && s.parentNode.removeChild(s), s = document.createElement("div"), s.className = "ol-tooltip hidden", w = new Ce({
1295
+ element: s,
1296
+ offset: [15, 0],
1297
+ positioning: "center-left",
1298
+ stopEvent: !1
1299
+ }), e == null || e.addOverlay(w);
1300
+ }, O = () => {
1301
+ c.value.forEach((V, C) => {
1302
+ var W, _;
1303
+ const P = document.querySelectorAll(".ol-tooltip.ol-tooltip-static.ol-tooltip-measure");
1304
+ P[C] && ((_ = (W = P[C]) == null ? void 0 : W.parentNode) == null || _.removeChild(P[C]));
1305
+ const G = x.getFeatures();
1306
+ G[C] && x.removeFeature(G[C]);
1307
+ }), K(), zo(e), o = "close", Le(e, "grab");
1308
+ }, z = (V) => {
1309
+ var P, G, W, _;
1310
+ const C = c.value.findIndex((X) => X.id === V);
1311
+ if (C !== -1) {
1312
+ c.value.splice(C, 1);
1313
+ const X = document.querySelectorAll(".ol-tooltip.ol-tooltip-static.ol-tooltip-measure");
1314
+ X[C] && ((G = (P = X[C]) == null ? void 0 : P.parentNode) == null || G.removeChild(X[C]));
1315
+ const q = x.getFeatures();
1316
+ q[C] && x.removeFeature(q[C]);
1317
+ }
1318
+ (_ = (W = l.getProps()) == null ? void 0 : W.lineDrawEnd) == null || _.call(W, c.value);
1319
+ }, K = () => {
1320
+ if (c.value = [], document.querySelectorAll(".ol-tooltip.ol-tooltip-static").forEach((V) => {
1321
+ var C;
1322
+ (C = V == null ? void 0 : V.parentNode) == null || C.removeChild(V);
1323
+ }), x == null || x.clear(), A) {
1324
+ const V = e.getInteractions().getArray().find((C) => Mt(C) === Mt(A));
1325
+ V && e.removeInteraction(V);
1326
+ }
1327
+ e.removeLayer(M), s != null && s.parentNode && s.parentNode.removeChild(s), u != null && u.parentNode && u.parentNode.removeChild(u);
1328
+ };
1329
+ return {
1330
+ open: h,
1331
+ close: O,
1332
+ deleteLine: z,
1333
+ setUnit: a,
1334
+ getState: () => o
1335
+ };
1336
+ }, At = (e, l) => {
1337
+ const r = yt(e);
1338
+ let a = "";
1339
+ switch (l) {
1340
+ case "m":
1341
+ a = `${Math.round(r * 100) / 100} m`;
1342
+ break;
1343
+ case "km":
1344
+ a = `${Math.round(r / 1e3 * 100) / 100} km`;
1345
+ break;
1346
+ case "nm":
1347
+ a = (Math.round(r / 1e3 * 100) / 100 / 1.852).toFixed(2) + " nm";
1348
+ break;
1349
+ }
1350
+ return a;
1351
+ }, Oo = (e, l) => {
1352
+ let c, r, a = "close";
1353
+ const s = () => {
1354
+ K(), a = "open", o(), Le(e, "crosshair");
1355
+ }, o = () => {
1356
+ M(), b(), O(), A();
1357
+ };
1358
+ let h = null, x = null;
1359
+ const M = () => {
1360
+ if (h && x) return;
1361
+ const V = new be(), C = new Me({
1362
+ source: V,
1363
+ style: new te({
1364
+ stroke: new $e({
1365
+ color: "#fbcc33",
1366
+ width: 2
1367
+ })
1368
+ }),
1369
+ zIndex: 1e3
1370
+ });
1371
+ h = C, x = V, e.on("pointermove", n), e.addLayer(C), e.on(["dblclick"], function(P) {
1372
+ w && (P.stopPropagation(), P.preventDefault());
1373
+ });
1374
+ };
1375
+ let t;
1376
+ const n = (V) => {
1377
+ if (V.dragging) return;
1378
+ const C = t ? "单击继续,双击结束" : "点击选择起点";
1379
+ f && (f.innerHTML = C, L.setPosition(V.coordinate));
1380
+ };
1381
+ let w, $ = !1;
1382
+ const A = () => {
1383
+ if (c) {
1384
+ f != null && f.parentNode && f.parentNode.removeChild(f);
1385
+ const C = c.getGeometry();
1386
+ if (!C) return;
1387
+ const P = p(C, "nm");
1388
+ i && (i.innerHTML = `
1389
+ <span class="text">面积:${P}${$ ? '<span class="error pl-12">超出可以绘画的距离</span>' : ""}</span>
1390
+ `), i && (i.innerHTML += '<span class="delete-icon" ><i class="map-iconfont icon-delete" /></div>');
1391
+ const G = C.getCoordinates(), W = G[0][G[0].length - 2];
1392
+ if (u.setPosition(W), h) {
1393
+ const X = h.getSource();
1394
+ X && c && (X.clear(), X.addFeature(c));
1395
+ }
1396
+ setTimeout(() => {
1397
+ var X;
1398
+ (X = document.querySelector(".delete-icon")) == null || X.addEventListener("click", () => {
1399
+ var q, oe;
1400
+ z(), (oe = (q = l.getProps()) == null ? void 0 : q.areaDrawEnd) == null || oe.call(q, []);
1401
+ });
1402
+ }, 0);
1403
+ const _ = to(c.getGeometry().getExtent());
1404
+ e == null || e.getView().setCenter(_);
1405
+ return;
1406
+ }
1407
+ const V = {
1408
+ type: "Polygon",
1409
+ trace: !0,
1410
+ style: [new te({
1411
+ stroke: new $e({
1412
+ color: "rgba(255, 255, 255, 1)",
1413
+ width: 1.5,
1414
+ lineDash: [10, 10]
1415
+ }),
1416
+ fill: new ue({
1417
+ color: "rgba(255, 255, 255, 0.25)"
1418
+ })
1419
+ }), new te({
1420
+ image: new et({
1421
+ radius: 5,
1422
+ fill: new ue({
1423
+ color: "rgb(51,112,255, 1)"
1424
+ })
1425
+ }),
1426
+ geometry: function(C) {
1427
+ const P = C.getGeometry().getCoordinates();
1428
+ return new oo(P);
1429
+ }
1430
+ })]
1431
+ };
1432
+ V.source = x, w = new Ie(V), e == null || e.addInteraction(w), w.on("drawstart", (C) => {
1433
+ var P;
1434
+ t = C.feature, r = (P = t.getGeometry()) == null ? void 0 : P.on("change", (G) => {
1435
+ const W = G.target, _ = p(W, "nm"), q = W.getCoordinates()[0], oe = new Ue([q[q.length - 2], q[q.length - 1]]), ke = At(oe, "nm");
1436
+ if ($ = Number(yt(oe) / 1e3) > 150, !_) return;
1437
+ const ie = '<span class="error pl-4">超出可以绘画的距离</span>';
1438
+ i && (i.innerHTML = `
1439
+ <div class="text">
1440
+ 面积:${_}
1441
+ ${$ ? ie : ""}
1442
+ </div>
1443
+ `), f && (f.innerHTML = `
1444
+ <div class="text">
1445
+ 面积:${_}
1446
+ </div>
1447
+ <div class="text ${$ ? "error" : ""}">
1448
+ 线段 ${q.length - 2}: ${ke}
1449
+ ${$ ? ie : ""}
1450
+ </div>
1451
+ <div>
1452
+ <span class="text">单击继续,双击结束</span>
1453
+ </div>
1454
+ `);
1455
+ });
1456
+ }), w.on("drawend", (C) => {
1457
+ var X, q, oe, ke;
1458
+ if (!C.feature.getGeometry()) return;
1459
+ i && !c && (i.innerHTML += '<span class="delete-icon"><i class="map-iconfont icon-delete" /></div>'), c = C.feature, u.setOffset([10, 0]);
1460
+ const W = C.feature.getGeometry().getCoordinates(), _ = W[0][W[0].length - 2];
1461
+ if (u.setPosition(_), f != null && f.parentNode && f.parentNode.removeChild(f), (X = l.getProps()) != null && X.areaDrawEnd) {
1462
+ const ie = W[0].map((ae) => Be(ae, se.mercator, se.data));
1463
+ (oe = (q = l.getProps()) == null ? void 0 : q.areaDrawEnd) == null || oe.call(q, ie);
1464
+ }
1465
+ w && (w.setActive(!1), e == null || e.removeInteraction(w), (e == null ? void 0 : e.getInteractions()).forEach((ae) => {
1466
+ ae instanceof Ie && (ae.setActive(!1), e == null || e.removeInteraction(ae));
1467
+ })), r && gt(r), (ke = document.querySelector(".delete-icon")) == null || ke.addEventListener("click", () => {
1468
+ var ie, ae;
1469
+ z(), (ae = (ie = l.getProps()) == null ? void 0 : ie.areaDrawEnd) == null || ae.call(ie, []);
1470
+ });
1471
+ });
1472
+ }, p = (V, C) => {
1473
+ const P = eo(V);
1474
+ switch (C) {
1475
+ case "km":
1476
+ return P > 1e4 ? Math.round(P / 1e6 * 100) / 100 + " km<sup>2</sup>" : Math.round(P * 100) / 100 + " m<sup>2</sup>";
1477
+ case "nm": {
1478
+ if (P < 0.01)
1479
+ return "0 nm<sup>2</sup>";
1480
+ const G = P / (1852 * 1852);
1481
+ return G >= 0.01 ? (Math.round(G * 100) / 100).toFixed(2) + " nm<sup>2</sup>" : P >= 1 ? (Math.round(P * 100) / 100).toFixed(2) + " m<sup>2</sup>" : (Math.round(P * 1e4) / 100).toFixed(2) + " cm<sup>2</sup>";
1482
+ }
1483
+ }
1484
+ };
1485
+ let i, u;
1486
+ const b = () => {
1487
+ i != null && i.parentNode && i.parentNode.removeChild(i), i = document.createElement("div"), i.style.display = "flex", i.className = "ol-tooltip ol-tooltip-draw-polygon", u = new Ce({
1488
+ element: i,
1489
+ offset: [0, -15],
1490
+ positioning: "bottom-center",
1491
+ stopEvent: !1,
1492
+ insertFirst: !1
1493
+ }), e == null || e.addOverlay(u);
1494
+ };
1495
+ let f, L;
1496
+ const O = () => {
1497
+ f != null && f.parentNode && (f.parentNode.removeChild(f), f.parentNode.addEventListener("click", (V) => {
1498
+ V.preventDefault(), V.stopPropagation();
1499
+ })), f = document.createElement("div"), f.className = "ol-tooltip ol-help-tooltip pointer-none", L = new Ce({
1500
+ element: f,
1501
+ offset: [15, 0],
1502
+ positioning: "center-left",
1503
+ stopEvent: !1
1504
+ }), e == null || e.addOverlay(L);
1505
+ }, z = () => {
1506
+ c = null, s();
1507
+ }, K = () => {
1508
+ a = "close", e.un("pointermove", n), t = null, w && (w.abortDrawing(), console.log("abortDrawing"), w.setActive(!1), (e == null ? void 0 : e.getInteractions()).forEach((C) => {
1509
+ C instanceof Ie && (C.setActive(!1), e == null || e.removeInteraction(C));
1510
+ }), w = null), r && gt(r), r = void 0, x == null || x.clear(), x = null, h && e.getAllLayers().includes(h) && (e.removeLayer(h), h = null), f != null && f.parentElement && (f.innerHTML = "", f.parentElement.removeChild(f), f = null), i != null && i.parentElement && (i.innerHTML = "", i.parentElement.removeChild(i), i = null), L && e.removeOverlay(L), u && e.removeOverlay(u), Le(e, "grab");
1511
+ };
1512
+ return {
1513
+ open: s,
1514
+ close: K,
1515
+ reset: z,
1516
+ getState: () => a
1517
+ };
1518
+ }, Ao = (e, l, c, r, a) => {
1519
+ let s = null, o = null;
1520
+ const h = new be(), x = new no({
1521
+ source: h,
1522
+ className: "zh-map--ship-layer",
1523
+ renderBuffer: 300,
1524
+ zIndex: 101,
1525
+ properties: { layerType: le.SHIP }
1526
+ }), M = new be(), t = new Me({
1527
+ source: M,
1528
+ className: "zh-map--ship-label-layer",
1529
+ zIndex: 102,
1530
+ updateWhileInteracting: !1,
1531
+ updateWhileAnimating: !1,
1532
+ properties: { layerType: le.SHIP },
1533
+ declutter: !0
1534
+ }), n = new be(), w = new Me({
1535
+ source: n,
1536
+ className: "zh-map--ship-selected-layer",
1537
+ zIndex: 999
1538
+ });
1539
+ e == null || e.addLayer(x), e == null || e.addLayer(t), e == null || e.addLayer(w);
1540
+ let $ = null, A = null, p = null, i = "", u = {}, b = {};
1541
+ const f = (g) => {
1542
+ if (!g || !e) return;
1543
+ const N = (o == null ? void 0 : o.id) || (s == null ? void 0 : s.get("id"));
1544
+ if (o) {
1545
+ const F = g.filter((H) => H.id === N);
1546
+ F.length === 0 ? g.push(o) : o = F[0];
1547
+ }
1548
+ V(), ie(g), K(), L(g);
1549
+ }, L = (g) => {
1550
+ Array.from(Ge.keys()).forEach((N) => {
1551
+ const F = N.split("_")[0];
1552
+ g.find((J) => J.id === F) || Ge.delete(N);
1553
+ });
1554
+ }, O = () => {
1555
+ Array.from(Ye.keys()).forEach((g) => {
1556
+ Ye.delete(g);
1557
+ });
1558
+ }, z = (g) => {
1559
+ var R;
1560
+ const N = (o == null ? void 0 : o.id) || (s == null ? void 0 : s.get("id")), F = fe([g == null ? void 0 : g.lon, g == null ? void 0 : g.lat]), H = ((R = b[g.id]) == null ? void 0 : R.blinkColors) || [], U = H[H.length - 1] || g.fill || "#04C900", I = Vt(g), Y = new me({
1561
+ geometry: new de(F),
1562
+ // 船舶数据
1563
+ shipData: g,
1564
+ id: g.id,
1565
+ name: g.cnname || g.enname || g.name || g.id || "未命名船舶",
1566
+ selected: g.id === N,
1567
+ // 图标
1568
+ rightIcons: St(g),
1569
+ // 船舶颜色
1570
+ color: U,
1571
+ // 船艏向的方向
1572
+ direct: I,
1573
+ // 高亮
1574
+ isHighlight: !1
1575
+ });
1576
+ return Y.set("clickGeometry", new lo(F)), Y;
1577
+ }, K = () => {
1578
+ if (o && e && o) {
1579
+ n.getFeatures().length > 0 && n.clear();
1580
+ const g = fe([o == null ? void 0 : o.lon, o == null ? void 0 : o.lat]), N = new me({
1581
+ geometry: new de(g),
1582
+ id: o.id
1583
+ });
1584
+ N.setStyle(Pt(e, o)), n.addFeature(N);
1585
+ }
1586
+ }, ee = () => {
1587
+ const g = h.getFeatures(), N = 100;
1588
+ let F = 0;
1589
+ const H = () => {
1590
+ const I = Math.min(F + N, g.length);
1591
+ for (; F < I; F++) {
1592
+ const Y = g[F], R = Ve(e, Y);
1593
+ Y.setStyle(R);
1594
+ }
1595
+ F < g.length && requestAnimationFrame(H);
1596
+ };
1597
+ H();
1598
+ const U = n.getFeatures()[0];
1599
+ if (U && o) {
1600
+ const I = Pt(e, o);
1601
+ U.setStyle(I);
1602
+ }
1603
+ }, V = () => {
1604
+ e && h && (C(), h.clear(), M.clear(), n.clear());
1605
+ }, C = () => {
1606
+ const g = e.getOverlays().getArray().filter((N) => N.get("class") == "zh-map-ship-overlay");
1607
+ if (g && g.length > 0)
1608
+ for (let N = 0; N < g.length; N++) {
1609
+ const F = g[N];
1610
+ F.setPosition(void 0), e.removeOverlay(F), F.dispose();
1611
+ }
1612
+ }, P = (g, N) => {
1613
+ u = g, b = N;
1614
+ const F = e.getOverlays().getArray(), H = h.getFeatures();
1615
+ for (const J in u) {
1616
+ const U = u[J], I = F.find((R) => (R == null ? void 0 : R.getId()) === "label-" + J), Y = H.find((R) => J === R.get("id"));
1617
+ if (I && Y) {
1618
+ const R = N[J].blinkColors || [], { shipData: he, name: ve, color: xe } = Y.getProperties();
1619
+ Y.set("blinking", U), R[(R == null ? void 0 : R.length) - 1] && xe !== R[(R == null ? void 0 : R.length) - 1] && (Y.set("color", R[(R == null ? void 0 : R.length) - 1] || ""), Y.setStyle(Ve(e, Y)));
1620
+ const it = {
1621
+ ...he,
1622
+ blinking: U,
1623
+ blinkingColors: R || [],
1624
+ name: ve + "(" + N[J].shipState + ")"
1625
+ }, qe = I.getElement(), Xe = Ot(it);
1626
+ qe && qe !== Xe && I.setElement(Xe);
1627
+ }
1628
+ }
1629
+ }, G = (g) => {
1630
+ if (!e) return;
1631
+ const N = h.getFeatures(), F = M.getFeatures(), H = s ? s.get("id") : "", J = N.filter((R) => R.get("id") !== H), U = F == null ? void 0 : F.filter((R) => R.get("id") !== H), I = /* @__PURE__ */ new Map();
1632
+ g.forEach((R) => {
1633
+ I.set(R.id, !0);
1634
+ });
1635
+ const Y = e.getOverlays().getArray();
1636
+ J.forEach((R) => {
1637
+ const he = R.get("id");
1638
+ if (!I.has(he))
1639
+ R.setStyle([]);
1640
+ else {
1641
+ const xe = R.getStyle();
1642
+ (xe == null ? void 0 : xe.length) == 0 && R.setStyle(Ve(e, R));
1643
+ }
1644
+ const ve = Y.find((xe) => xe.getId() === "label-" + he);
1645
+ ve && ve.setPosition(void 0);
1646
+ }), U.forEach((R) => {
1647
+ const he = R.get("id");
1648
+ if (!I.has(he))
1649
+ R.setStyle([]);
1650
+ else {
1651
+ const ve = R.getStyle();
1652
+ (ve == null ? void 0 : ve.length) == 0 && R.setStyle(Ft(R, g.length));
1653
+ }
1654
+ });
1655
+ }, W = (g) => {
1656
+ if (g) {
1657
+ console.log("选中", g);
1658
+ const N = h.getFeatures().find((H) => H.get("id") === g.id), F = M.getFeatures().find((H) => H.get("id") === g.id);
1659
+ N && (s = N), F && F.set("selected", !0), o = g, K();
1660
+ } else
1661
+ console.log("取消选中"), o = null, s = null, oe(), O();
1662
+ }, _ = (g, N, F) => {
1663
+ A = g, p = N, $ = F;
1664
+ }, X = ro((g, N, F) => {
1665
+ try {
1666
+ if (g) {
1667
+ const H = g.get("shipData"), J = g.get("id");
1668
+ if (N === "click" && (W(H), F && F(J)), N === "hover") {
1669
+ i && i !== J && q(), i = J;
1670
+ const U = h.getFeatures().find((I) => I.get("id") === i);
1671
+ U == null || U.set("isHighlight", !0), U == null || U.setStyle(Ve(e, U));
1672
+ }
1673
+ } else
1674
+ q();
1675
+ } catch (H) {
1676
+ console.log("handleShipMapEvent", H);
1677
+ }
1678
+ }, 10), q = () => {
1679
+ const g = i ? h.getFeatures().find((N) => N.get("id") === i) : null;
1680
+ i = null, g == null || g.set("isHighlight", !1), g == null || g.setStyle(Ve(e, g));
1681
+ }, oe = () => {
1682
+ try {
1683
+ n.clear();
1684
+ } catch (g) {
1685
+ console.log(g);
1686
+ }
1687
+ }, ke = (g, N) => {
1688
+ const F = fe([g == null ? void 0 : g.lon, g == null ? void 0 : g.lat]), H = new me({
1689
+ geometry: new de(F),
1690
+ name: g.cnname || g.enname || g.name || g.id || "未命名船舶",
1691
+ // 图标
1692
+ rightIcons: St(g),
1693
+ selected: (g == null ? void 0 : g.id) === (o == null ? void 0 : o.id),
1694
+ shipData: g
1695
+ });
1696
+ H.set("id", g.id);
1697
+ const J = Ft(H, N);
1698
+ return H.setStyle(J), H;
1699
+ }, ie = (g) => {
1700
+ const N = e.getView().getZoom(), F = [], H = [];
1701
+ g.forEach((Y) => {
1702
+ const R = z(Y);
1703
+ R.setStyle(Ve(e, R)), h.addFeature(R), u[Y.id] && F.push(Y), (o == null ? void 0 : o.id) == Y.id && (o = Y), !u[Y.id] && (o == null ? void 0 : o.id) !== Y.id && H.push(Y);
1704
+ }), (p !== null ? p : (o == null ? void 0 : o.id) && u[o == null ? void 0 : o.id] || N && N >= ce.shipModelMin) && F.map((Y) => {
1705
+ lt(Y);
1706
+ }), o && ($ !== null ? $ : !0) && !u[o == null ? void 0 : o.id] && ae(o, g), (A !== null ? A : N && N >= ce.shipModelMin) && H.map((Y) => {
1707
+ ae(Y, g);
1708
+ });
1709
+ }, ae = (g, N) => {
1710
+ const F = ke(g, N.length);
1711
+ M.addFeature(F);
1712
+ }, rt = (g) => {
1713
+ var F;
1714
+ const N = h.getFeatures().find((H) => H.get("id") === g);
1715
+ N && X(N, "click", (F = l.getProps()) == null ? void 0 : F.selectShip);
1716
+ }, lt = (g) => {
1717
+ var N;
1718
+ if (g.id && b[g == null ? void 0 : g.id]) {
1719
+ const F = b[g == null ? void 0 : g.id] || {}, H = (F == null ? void 0 : F.blinkColors) || [], J = (F == null ? void 0 : F.shipState) || "", U = (g.cnname || g.enname || g.name || g.id || "未命名船舶") + "(" + J + ")", I = {
1720
+ ...g,
1721
+ name: U,
1722
+ blinking: u[g.id],
1723
+ blinkingColors: H || []
1724
+ };
1725
+ So(e, I), (N = document.querySelector(".ship-label-overlay-blinking")) == null || N.addEventListener("click", (Y) => {
1726
+ var he;
1727
+ if (r.getState() === "open" || a.getState() === "open" || !c.getMapClick()) return;
1728
+ const R = (he = Y.target) == null ? void 0 : he.getAttribute("data-id");
1729
+ Y.preventDefault(), R && rt(R);
1730
+ });
1731
+ }
1732
+ };
1733
+ return {
1734
+ render: f,
1735
+ selected: W,
1736
+ filter: G,
1737
+ blinking: P,
1738
+ clear: V,
1739
+ setLableStatus: _,
1740
+ handleShipMapEvent: X,
1741
+ changeShipScale: ee
1742
+ };
1743
+ }, Zo = (e) => {
1744
+ const l = () => e == null ? void 0 : e.getLayers(), c = ge("vector"), r = () => c.value, a = (x) => {
1745
+ c.value = x;
1746
+ const M = l();
1747
+ M && (M == null || M.getArray().forEach((t) => {
1748
+ (t.className_ === "vector" || t.className_ === "satellite") && t.setVisible(t.className_ === x);
1749
+ }));
1750
+ }, s = ge(!1);
1751
+ return {
1752
+ getLayers: l,
1753
+ getGreenTileVisible: () => s.value,
1754
+ setGreenTileVisible: (x) => {
1755
+ if (x !== s.value) {
1756
+ if (x) {
1757
+ const M = l();
1758
+ if (!M.getArray().find((n) => n.className_ === "greenTile")) {
1759
+ const n = new Oe({
1760
+ source: new Ae({ url: Se.greenTile }),
1761
+ visible: x,
1762
+ zIndex: 2,
1763
+ className: "greenTile"
1764
+ });
1765
+ M.push(n);
1766
+ }
1767
+ } else {
1768
+ const M = l(), t = M.getArray().find((n) => n.className_ === "greenTile");
1769
+ t && M.remove(t);
1770
+ }
1771
+ s.value = x;
1772
+ }
1773
+ },
1774
+ getShowLayerType: r,
1775
+ setShowLayerType: a
1776
+ };
1777
+ }, Do = (e) => {
1778
+ const l = "zh-map-location-layer";
1779
+ let c;
1780
+ const r = new be();
1781
+ let a = null, s = null;
1782
+ const o = (i) => {
1783
+ if (!(!i || i.length === 0)) {
1784
+ if (r.clear(), s) {
1785
+ const u = i.find((b) => b.id === (s == null ? void 0 : s.id));
1786
+ u ? s = u : i.push(s);
1787
+ }
1788
+ i.forEach((u) => {
1789
+ h(u);
1790
+ }), c || (c = new Me({
1791
+ className: l,
1792
+ source: r,
1793
+ zIndex: 100
1794
+ }), e == null || e.addLayer(c));
1795
+ }
1796
+ }, h = (i) => {
1797
+ const u = e == null ? void 0 : e.getView().getZoom(), [b, f] = i.latLon.split(","), L = new me({
1798
+ geometry: new de(fe([Number(b), Number(f)]))
1799
+ });
1800
+ L.setStyle(x(i, u, i.id === (s == null ? void 0 : s.id))), L.set("loactionData", i), r.addFeature(L);
1801
+ }, x = (i, u, b) => {
1802
+ let f = {
1803
+ src: b && i.selectedPath || i.defaultPath
1804
+ };
1805
+ i != null && i.width && (i != null && i.height) ? f = {
1806
+ ...f,
1807
+ width: i.width,
1808
+ height: i.height
1809
+ } : f = {
1810
+ ...f,
1811
+ scale: 0.5 * u / 10
1812
+ };
1813
+ let L = {
1814
+ image: new Ne(f)
1815
+ };
1816
+ return i.name && (L = {
1817
+ ...L,
1818
+ text: new Ze({
1819
+ text: i.name,
1820
+ font: "12px sans-serif",
1821
+ fill: new ue({
1822
+ color: "#000000"
1823
+ }),
1824
+ backgroundFill: new ue({
1825
+ color: "#FFFFFF"
1826
+ }),
1827
+ offsetY: 30
1828
+ })
1829
+ }), new te(L);
1830
+ }, M = () => {
1831
+ if (a) {
1832
+ const i = a.get("loactionData").id;
1833
+ r.getFeatures().forEach((u) => {
1834
+ u.get("loactionData").id !== i && r.removeFeature(u);
1835
+ });
1836
+ } else
1837
+ r.clear();
1838
+ }, t = () => {
1839
+ var f;
1840
+ const i = a == null ? void 0 : a.get("loactionData"), u = (f = e == null ? void 0 : e.getView()) == null ? void 0 : f.getZoom();
1841
+ r.getFeatures().forEach((L) => {
1842
+ L.get("loactionData").id === i.id && (L == null || L.setStyle(x(i, u, !1)));
1843
+ }), s = null, a = null;
1844
+ }, n = (i) => {
1845
+ i ? (w(), $(i)) : t();
1846
+ }, w = () => {
1847
+ var i;
1848
+ if (a) {
1849
+ const u = a.get("loactionData"), b = (i = e == null ? void 0 : e.getView()) == null ? void 0 : i.getZoom();
1850
+ a.setStyle(x(u, b, !1));
1851
+ }
1852
+ }, $ = (i) => {
1853
+ const u = r.getFeatures();
1854
+ s = i, a = u.find((b) => b.get("loactionData").id === i.id);
1855
+ };
1856
+ return {
1857
+ render: o,
1858
+ renderHtml: (i, u, b, f) => {
1859
+ const L = document.createElement("div");
1860
+ L.innerHTML = b;
1861
+ let O = {
1862
+ element: L,
1863
+ // 覆盖层的DOM元素
1864
+ positioning: "top-center",
1865
+ // 相对于位置点的定位
1866
+ stopEvent: !1,
1867
+ // 是否阻止事件传播
1868
+ offset: [0, -20],
1869
+ id: "position-" + i
1870
+ };
1871
+ f && (O = {
1872
+ ...O,
1873
+ ...f
1874
+ });
1875
+ const z = new Ce(O);
1876
+ z.setPosition(fe(u)), e.addOverlay(z);
1877
+ },
1878
+ removeHtml: (i) => {
1879
+ const u = e.getOverlays().getArray().find((b) => b.getId() === "position-" + i);
1880
+ u && (u.setPosition(void 0), e.removeOverlay(u));
1881
+ },
1882
+ selected: n,
1883
+ clearSelected: t,
1884
+ clear: M
1885
+ };
1886
+ }, Ho = "zh-map-port-layer", Wo = (e) => {
1887
+ const l = new be(), c = new Me({
1888
+ className: Ho,
1889
+ source: l,
1890
+ zIndex: 100,
1891
+ updateWhileInteracting: !0,
1892
+ updateWhileAnimating: !0,
1893
+ properties: { layerType: le.PORT }
1894
+ });
1895
+ e == null || e.addLayer(c);
1896
+ let r = null, a = null;
1897
+ const s = (i, u = !0) => {
1898
+ if (!i || i.length === 0) return;
1899
+ if (l.clear(), a) {
1900
+ const f = i.find((L) => L.id === (a == null ? void 0 : a.id));
1901
+ f ? a = f : i.push(a);
1902
+ }
1903
+ const b = [];
1904
+ i.forEach((f) => {
1905
+ const [L, O] = f.latLon.split(","), z = new me({
1906
+ geometry: new de(fe([Number(L), Number(O)])),
1907
+ portData: f,
1908
+ id: f.id,
1909
+ select: f.id === (a == null ? void 0 : a.id),
1910
+ showTitle: f.id === (a == null ? void 0 : a.id) || u
1911
+ }), K = t(z);
1912
+ z.setStyle(K), b.push(z);
1913
+ }), l.addFeatures(b);
1914
+ };
1915
+ let o = null, h = null;
1916
+ const x = /* @__PURE__ */ new Map(), M = (i, u) => {
1917
+ o || (o = document.createElement("canvas"), h = o.getContext("2d", {
1918
+ willReadFrequently: !0
1919
+ }));
1920
+ const b = `${i}-${u}`;
1921
+ if (x.has(b))
1922
+ return x.get(b);
1923
+ const f = o, L = h;
1924
+ if (!L) return "";
1925
+ f.width = 0, f.height = 0;
1926
+ const O = 2, z = 8, K = window.devicePixelRatio || 1, ee = "12px sans-serif";
1927
+ L.font = ee;
1928
+ const C = L.measureText(i).width, P = z + C + z, G = O + 12 + O * 2;
1929
+ f.width = Math.round(P * K), f.height = Math.round(G * K), L.scale(K, K), L.clearRect(0, 0, P, G), L.fillStyle = u ? "#F32D2D" : "#FFF", L.beginPath(), L.roundRect(0, 0, P, G, 4), L.fill(), L.font = ee, L.textBaseline = "middle";
1930
+ const W = G / 2;
1931
+ L.strokeStyle = u ? "#000" : "#ffffff", L.lineWidth = 1, L.strokeText(i, z, W), L.fillStyle = u ? "#FFF" : "#000000", L.fillText(i, z, W);
1932
+ const _ = f.toDataURL("image/png");
1933
+ return x.set(b, _), _;
1934
+ }, t = (i) => {
1935
+ const { select: u, showTitle: b } = i.getProperties(), f = (C) => `<svg width="46" height="46" viewBox="0 0 46 46" fill="none" xmlns="http://www.w3.org/2000/svg">
1936
+ <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="${C}"/>
1937
+ <g clip-path="url(#clip0_10059_122082)">
1938
+ <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"/>
1939
+ </g>
1940
+ <defs>
1941
+ <clipPath id="clip0_10059_122082">
1942
+ <rect width="26" height="26" fill="white" transform="translate(10 8)"/>
1943
+ </clipPath>
1944
+ </defs>
1945
+ </svg>
1946
+ `, L = () => `data:image/svg+xml;utf8,${encodeURIComponent(f(u ? "#F32D2D" : "#3370FF"))}`, O = e.getView().getZoom(), z = i.get("portData"), K = window.devicePixelRatio || 1, ee = new te({
1947
+ image: new Ne({
1948
+ src: L(),
1949
+ scale: 0.5 * O / 10
1950
+ }),
1951
+ zIndex: u ? 110 : 100
1952
+ }), V = new te({
1953
+ image: new Ne({
1954
+ src: M(z.shortName, u),
1955
+ anchor: [0.5, 0.5],
1956
+ displacement: [0, -30],
1957
+ scale: 1 / K,
1958
+ anchorXUnits: "fraction",
1959
+ anchorYUnits: "fraction"
1960
+ }),
1961
+ zIndex: u ? 110 : 100
1962
+ // text: new Text({
1963
+ // text: port.shortName,
1964
+ // font: '12px sans-serif',
1965
+ // fill: new Fill({
1966
+ // color: select ? "#ffffff" : "#000000"
1967
+ // }),
1968
+ // backgroundFill: new Fill({
1969
+ // color: "#FFF",
1970
+ // }),
1971
+ // offsetY: 30,
1972
+ // }),
1973
+ });
1974
+ return !b && !u ? ee : [ee, V];
1975
+ }, n = () => {
1976
+ if (l)
1977
+ if (r) {
1978
+ console.log("清除非选中的港口");
1979
+ const i = r.get("portData").id;
1980
+ l.getFeatures().forEach((u) => {
1981
+ u.get("portData").id !== i && l.removeFeature(u);
1982
+ });
1983
+ } else
1984
+ console.log("清除所有港口", l), l == null || l.clear();
1985
+ }, w = (i) => {
1986
+ if (l) {
1987
+ if (!i)
1988
+ return $();
1989
+ (r == null ? void 0 : r.get("portData").id) !== i.id && ($(), A(i));
1990
+ }
1991
+ }, $ = () => {
1992
+ var i;
1993
+ if (r) {
1994
+ const u = r == null ? void 0 : r.get("portData"), b = (i = l.getFeatures()) == null ? void 0 : i.find((f) => f.get("portData").id === u.id);
1995
+ b && (b.set("select", !1), b.setStyle(t(b)), r = null, a = null);
1996
+ }
1997
+ }, A = (i) => {
1998
+ if (!l) return;
1999
+ const u = l.getFeatures();
2000
+ a = i, r = u.find((b) => b.get("portData").id === i.id), r && (r.set("select", !0), r.setStyle(t(r)));
2001
+ };
2002
+ return {
2003
+ render: s,
2004
+ clear: n,
2005
+ selected: w,
2006
+ handlePortHover: (i) => {
2007
+ i && i.get("portData") ? Le(e, "pointer") : Le(e, "grab");
2008
+ }
2009
+ };
2010
+ }, Go = (e, l, c, r, a, s, o) => {
2011
+ const h = e.getInstall();
2012
+ h.on("moveend", () => {
2013
+ var n, w;
2014
+ try {
2015
+ const $ = e.getZoom();
2016
+ (w = (n = l.getProps()).mapMoveEnd) == null || w.call(n, $), $ >= ce.min && $ <= ce.max && c.reRenderTrackLine(), r.changeShipScale();
2017
+ } catch ($) {
2018
+ console.log("moveend---catch", $);
2019
+ }
2020
+ });
2021
+ const x = {
2022
+ [le.PORT]: null,
2023
+ [le.SHIP]: null,
2024
+ [le.TRACK]: null,
2025
+ [le.DELETE]: null
2026
+ }, M = (n, w, $) => {
2027
+ switch (n) {
2028
+ case le.SHIP:
2029
+ r == null || r.handleShipMapEvent(w, "hover");
2030
+ break;
2031
+ case le.PORT:
2032
+ break;
2033
+ case le.TRACK:
2034
+ c == null || c.handleTrackMapEvent(w, "hover", $);
2035
+ break;
2036
+ }
2037
+ }, t = (n) => {
2038
+ switch (n) {
2039
+ case le.PORT:
2040
+ break;
2041
+ case le.SHIP:
2042
+ r == null || r.handleShipMapEvent(null, "hover");
2043
+ break;
2044
+ case le.TRACK:
2045
+ c == null || c.handleTrackMapEvent(null, "hover");
2046
+ break;
2047
+ }
2048
+ };
2049
+ h.on("pointermove", (n) => {
2050
+ if (o.getState() !== "open" && s.getState() !== "open" && e.getMapClick() && !h.getView().getAnimating())
2051
+ try {
2052
+ let w = !1, $ = !1;
2053
+ const A = h.getLayers().getArray().filter((p) => p.get("layerType"));
2054
+ try {
2055
+ A && A.length > 0 && A.forEach((p) => {
2056
+ if ($) return;
2057
+ const i = h == null ? void 0 : h.getEventPixel(n.originalEvent), u = p == null ? void 0 : p.get("layerType"), b = h == null ? void 0 : h.forEachFeatureAtPixel(i, (f) => f, {
2058
+ layerFilter: (f) => f === p,
2059
+ // 严格图层过滤
2060
+ hitTolerance: 5
2061
+ });
2062
+ b !== x[u] && (x[u] && t(u, x[u]), x[u] = b, b && (M(u, b, n), $ = !0)), b && (w = !0);
2063
+ }), w ? Le(h, "pointer") : Le(h, "grab");
2064
+ } catch (p) {
2065
+ console.log("pointermove----", p);
2066
+ }
2067
+ } catch (w) {
2068
+ console.log("pointermove----", w);
2069
+ }
2070
+ }), h.on("click", Nt((n) => {
2071
+ if (o.getState() !== "open" && s.getState() !== "open" && e.getMapClick() && !h.getView().getAnimating())
2072
+ try {
2073
+ let w = !1;
2074
+ const $ = h.getLayers().getArray().filter((A) => A.get("layerType"));
2075
+ $ && $.length > 0 && $.forEach((A) => {
2076
+ var p, i, u, b, f;
2077
+ if (!w)
2078
+ try {
2079
+ if (((i = (p = A == null ? void 0 : A.getSource()) == null ? void 0 : p.getFeatures()) == null ? void 0 : i.length) > 0) {
2080
+ const L = h == null ? void 0 : h.getEventPixel(n.originalEvent), O = h == null ? void 0 : h.forEachFeatureAtPixel(L, (z) => {
2081
+ if (z.get("shipData") || z.get("portData") || z.get("polygonData") || z.get("pathData"))
2082
+ return z;
2083
+ }, {
2084
+ layerFilter: (z) => z === A,
2085
+ // 严格图层过滤
2086
+ hitTolerance: 10
2087
+ });
2088
+ if (console.log("clickFeature", O), O) {
2089
+ if (O != null && O.get("shipData"))
2090
+ c.getTrackStatus() || r.handleShipMapEvent(O, "click", (u = l.getProps()) == null ? void 0 : u.selectShip);
2091
+ else if (O != null && O.get("portData")) {
2092
+ const z = O == null ? void 0 : O.get("portData");
2093
+ a.selected(z), (f = (b = l.getProps()) == null ? void 0 : b.selectPort) == null || f.call(b, z);
2094
+ }
2095
+ w = !0;
2096
+ }
2097
+ }
2098
+ } catch (L) {
2099
+ console.log("click--", L);
2100
+ }
2101
+ });
2102
+ } catch (w) {
2103
+ console.log("click----", w);
2104
+ }
2105
+ }, 150)), h.getView().on("change:resolution", () => {
2106
+ r.changeShipScale();
2107
+ });
2108
+ }, Yo = () => {
2109
+ const e = Bt([]);
2110
+ return {
2111
+ createInstance: (r, a) => {
2112
+ const s = vo();
2113
+ s.initMap(r, a);
2114
+ const o = s.getInstall(), h = Zo(o), x = po();
2115
+ x.setProps(a), h.setShowLayerType(a.layerType), h.setGreenTileVisible(a.showGreenLayer);
2116
+ const M = ko(o), t = bo(o, M), n = Vo(o, x), w = Oo(o, x), $ = Ao(o, x, s, w, n), A = Do(o), p = Wo(o);
2117
+ Go(s, x, M, $, p, n, w);
2118
+ const i = () => {
2119
+ const b = o.getView().calculateExtent(s.getSize()), f = Be([b[0], b[1]], se.mercator, se.data), L = Be([b[2], b[3]], se.mercator, se.data);
2120
+ return [f[0], f[1], L[0], L[1]];
2121
+ }, u = {
2122
+ id: Symbol("map-instance"),
2123
+ innerMap: null,
2124
+ map: s.getInstall(),
2125
+ destroy: () => {
2126
+ e.splice(e.indexOf(u), 1);
2127
+ },
2128
+ methods: {
2129
+ ...s,
2130
+ layer: h,
2131
+ ship: $,
2132
+ track: M,
2133
+ carTrack: t,
2134
+ port: {
2135
+ render: p.render,
2136
+ clear: p.clear,
2137
+ selected: p.selected
2138
+ },
2139
+ position: A,
2140
+ drawLine: n,
2141
+ drawPolygon: w,
2142
+ // 子模块
2143
+ utils: {
2144
+ getCalculateExtent: i,
2145
+ convertSixHundredThousandToLatLng: xt,
2146
+ calculateCirclePoints: mo
2147
+ }
2148
+ }
2149
+ };
2150
+ return e.push(u), u;
2151
+ },
2152
+ destroyInstance: (r) => {
2153
+ const a = e.findIndex((s) => s.id === r);
2154
+ a > -1 && (e[a].destroy(), e.splice(a, 1));
2155
+ },
2156
+ destroyAll: () => {
2157
+ e.forEach((r) => r.destroy()), e.splice(0, e.length);
2158
+ },
2159
+ getAllInstances: () => [...e]
2160
+ };
2161
+ }, Bo = { class: "zh-map-box" }, qo = /* @__PURE__ */ ft({
2162
+ __name: "Map",
2163
+ props: {
2164
+ zoom: { default: ce.default },
2165
+ center: { default: ho },
2166
+ layerType: { default: "vector" },
2167
+ showGreenLayer: { type: Boolean, default: !1 },
2168
+ showScale: { type: Boolean, default: !0 },
2169
+ scaleLineUnit: { default: "metric" },
2170
+ mapMoveEnd: { type: Function, default: () => {
2171
+ } },
2172
+ lineDrawEnd: {},
2173
+ areaDrawEnd: { type: Function, default: () => {
2174
+ } },
2175
+ selectShip: { type: Function, default: () => {
2176
+ } },
2177
+ selectPort: { type: Function, default: () => {
2178
+ } }
2179
+ },
2180
+ setup(e, { expose: l }) {
2181
+ function c() {
2182
+ return new Promise((t) => {
2183
+ document.fonts ? document.fonts.load("12px map-iconfont").then(t) : setTimeout(t, 300);
2184
+ });
2185
+ }
2186
+ c();
2187
+ const r = ge(), a = ge(), s = Yo(), o = ge(), h = e, x = ge({
2188
+ getInstall() {
2189
+ }
2190
+ });
2191
+ qt(() => {
2192
+ var t;
2193
+ o.value = s.createInstance(r.value, h), x.value = o.value.methods, (t = a.value) == null || t.setScaleLine(o.value.map, h.scaleLineUnit), window.addEventListener("nativeDoubleTap", function() {
2194
+ M();
2195
+ });
2196
+ });
2197
+ function M() {
2198
+ var n, w, $, A, p;
2199
+ if (((n = o.value) == null ? void 0 : n.methods.drawPolygon.getState()) === "open" || ((w = o.value) == null ? void 0 : w.methods.drawLine.getState()) === "open" || !(($ = o.value) != null && $.methods.getMapClick()))
2200
+ return;
2201
+ let t = (A = o.value) == null ? void 0 : A.methods.getZoom();
2202
+ (p = o.value) == null || p.methods.setZoom(t + 1);
2203
+ }
2204
+ return Xt(() => {
2205
+ var t, n;
2206
+ s.destroyInstance((t = o == null ? void 0 : o.value) == null ? void 0 : t.id), (n = o.value) == null || n.destroy();
2207
+ }), l({
2208
+ getZoom: () => {
2209
+ var t;
2210
+ return (t = o.value) == null ? void 0 : t.methods.getZoom();
2211
+ },
2212
+ setZoom: (t) => {
2213
+ var n;
2214
+ return (n = o.value) == null ? void 0 : n.methods.setZoom(t);
2215
+ },
2216
+ getInstall: () => {
2217
+ var t;
2218
+ return (t = o.value) == null ? void 0 : t.methods.getInstall();
2219
+ },
2220
+ setMapClick: (...t) => {
2221
+ var n;
2222
+ return (n = o.value) == null ? void 0 : n.methods.setMapClick(...t);
2223
+ },
2224
+ getMapClick: () => {
2225
+ var t;
2226
+ return (t = o.value) == null ? void 0 : t.methods.getMapClick();
2227
+ },
2228
+ getView: () => {
2229
+ var t;
2230
+ return (t = o.value) == null ? void 0 : t.methods.getView();
2231
+ },
2232
+ setCenter: (t, n) => {
2233
+ var w;
2234
+ return (w = o.value) == null ? void 0 : w.methods.setCenter(t, n);
2235
+ },
2236
+ getSize: () => {
2237
+ var t;
2238
+ return (t = o.value) == null ? void 0 : t.methods.getSize();
2239
+ },
2240
+ getCenter: () => {
2241
+ var t;
2242
+ return (t = o.value) == null ? void 0 : t.methods.getCenter();
2243
+ },
2244
+ layer: {
2245
+ setGreenTileVisible: (t) => {
2246
+ var n;
2247
+ return (n = o.value) == null ? void 0 : n.methods.layer.setGreenTileVisible(t);
2248
+ },
2249
+ getGreenTileVisible: () => {
2250
+ var t;
2251
+ return (t = o.value) == null ? void 0 : t.methods.layer.getGreenTileVisible();
2252
+ },
2253
+ getShowLayerType: () => {
2254
+ var t;
2255
+ return (t = o.value) == null ? void 0 : t.methods.layer.getShowLayerType();
2256
+ },
2257
+ setShowLayerType: (t) => {
2258
+ var n;
2259
+ return (n = o.value) == null ? void 0 : n.methods.layer.setShowLayerType(t);
2260
+ }
2261
+ },
2262
+ ship: {
2263
+ render: (...t) => {
2264
+ var n;
2265
+ return (n = o.value) == null ? void 0 : n.methods.ship.render(...t);
2266
+ },
2267
+ selected: (...t) => {
2268
+ var n;
2269
+ return (n = o.value) == null ? void 0 : n.methods.ship.selected(...t);
2270
+ },
2271
+ filter: (...t) => {
2272
+ var n;
2273
+ return (n = o.value) == null ? void 0 : n.methods.ship.filter(...t);
2274
+ },
2275
+ blinking: (...t) => {
2276
+ var n;
2277
+ return (n = o.value) == null ? void 0 : n.methods.ship.blinking(...t);
2278
+ },
2279
+ clear: () => {
2280
+ var t;
2281
+ return (t = o.value) == null ? void 0 : t.methods.ship.clear();
2282
+ },
2283
+ setLableStatus: (...t) => {
2284
+ var n;
2285
+ return (n = o.value) == null ? void 0 : n.methods.ship.setLableStatus(...t);
2286
+ }
2287
+ },
2288
+ track: {
2289
+ render: (...t) => {
2290
+ var n;
2291
+ return (n = o.value) == null ? void 0 : n.methods.track.render(...t);
2292
+ },
2293
+ remove: (...t) => {
2294
+ var n;
2295
+ return (n = o.value) == null ? void 0 : n.methods.track.remove(...t);
2296
+ },
2297
+ play: (...t) => {
2298
+ var n;
2299
+ return (n = o.value) == null ? void 0 : n.methods.track.play(...t);
2300
+ },
2301
+ setCenter: (...t) => {
2302
+ var n;
2303
+ return (n = o.value) == null ? void 0 : n.methods.track.setCenter(...t);
2304
+ },
2305
+ close: (...t) => {
2306
+ var n;
2307
+ return (n = o.value) == null ? void 0 : n.methods.track.close(...t);
2308
+ },
2309
+ getLength: (...t) => {
2310
+ var n;
2311
+ return (n = o.value) == null ? void 0 : n.methods.track.getLength(...t);
2312
+ }
2313
+ },
2314
+ carTrack: {
2315
+ location: (...t) => {
2316
+ var n;
2317
+ return (n = o.value) == null ? void 0 : n.methods.carTrack.location(...t);
2318
+ },
2319
+ remove: (...t) => {
2320
+ var n;
2321
+ return (n = o.value) == null ? void 0 : n.methods.carTrack.remove(...t);
2322
+ },
2323
+ renderTrack: (...t) => {
2324
+ var n;
2325
+ return (n = o.value) == null ? void 0 : n.methods.carTrack.renderTrack(...t);
2326
+ },
2327
+ setCenter: (...t) => {
2328
+ var n;
2329
+ return (n = o.value) == null ? void 0 : n.methods.carTrack.setCenter(...t);
2330
+ },
2331
+ closeTrack: () => {
2332
+ var t;
2333
+ return (t = o.value) == null ? void 0 : t.methods.carTrack.closeTrack();
2334
+ },
2335
+ playTrack: (...t) => {
2336
+ var n;
2337
+ return (n = o.value) == null ? void 0 : n.methods.carTrack.playTrack(...t);
2338
+ }
2339
+ },
2340
+ port: {
2341
+ render: (t, n) => {
2342
+ var w;
2343
+ return (w = o.value) == null ? void 0 : w.methods.port.render(t, n);
2344
+ },
2345
+ clear: () => {
2346
+ var t;
2347
+ return (t = o.value) == null ? void 0 : t.methods.port.clear();
2348
+ },
2349
+ selected: (t) => {
2350
+ var n;
2351
+ return (n = o.value) == null ? void 0 : n.methods.port.selected(t);
2352
+ }
2353
+ },
2354
+ position: {
2355
+ render: (...t) => {
2356
+ var n;
2357
+ return (n = o.value) == null ? void 0 : n.methods.position.render(...t);
2358
+ },
2359
+ selected: (...t) => {
2360
+ var n;
2361
+ return (n = o.value) == null ? void 0 : n.methods.position.selected(...t);
2362
+ },
2363
+ clearSelected: (...t) => {
2364
+ var n;
2365
+ return (n = o.value) == null ? void 0 : n.methods.position.clearSelected(...t);
2366
+ },
2367
+ clear: () => {
2368
+ var t;
2369
+ return (t = o.value) == null ? void 0 : t.methods.position.clear();
2370
+ },
2371
+ renderHtml: (...t) => {
2372
+ var n;
2373
+ return (n = o.value) == null ? void 0 : n.methods.position.renderHtml(...t);
2374
+ },
2375
+ removeHtml: (...t) => {
2376
+ var n;
2377
+ return (n = o.value) == null ? void 0 : n.methods.position.removeHtml(...t);
2378
+ }
2379
+ },
2380
+ drawLine: {
2381
+ open: () => {
2382
+ var t;
2383
+ return (t = o.value) == null ? void 0 : t.methods.drawLine.open();
2384
+ },
2385
+ close: () => {
2386
+ var t;
2387
+ return (t = o.value) == null ? void 0 : t.methods.drawLine.close();
2388
+ },
2389
+ deleteLine: (t) => {
2390
+ var n;
2391
+ return (n = o.value) == null ? void 0 : n.methods.drawLine.deleteLine(t);
2392
+ },
2393
+ setUnit: (t) => {
2394
+ var n;
2395
+ return (n = o.value) == null ? void 0 : n.methods.drawLine.setUnit(t);
2396
+ },
2397
+ getState: () => {
2398
+ var t;
2399
+ return (t = o.value) == null ? void 0 : t.methods.drawLine.getState();
2400
+ }
2401
+ },
2402
+ drawPolygon: {
2403
+ open: (...t) => {
2404
+ var n;
2405
+ return (n = o.value) == null ? void 0 : n.methods.drawPolygon.open(...t);
2406
+ },
2407
+ close: () => {
2408
+ var t;
2409
+ return (t = o.value) == null ? void 0 : t.methods.drawPolygon.close();
2410
+ },
2411
+ reset: () => {
2412
+ var t;
2413
+ return (t = o.value) == null ? void 0 : t.methods.drawPolygon.reset();
2414
+ }
2415
+ },
2416
+ // 子模块
2417
+ utils: {
2418
+ getCalculateExtent: (...t) => {
2419
+ var n;
2420
+ return (n = o.value) == null ? void 0 : n.methods.utils.getCalculateExtent(...t);
2421
+ },
2422
+ convertSixHundredThousandToLatLng: (...t) => {
2423
+ var n;
2424
+ return (n = o.value) == null ? void 0 : n.methods.utils.convertSixHundredThousandToLatLng(...t);
2425
+ },
2426
+ calculateCirclePoints: (t, n) => {
2427
+ var w;
2428
+ return (w = o.value) == null ? void 0 : w.methods.utils.calculateCirclePoints(t, n);
2429
+ }
2430
+ }
2431
+ }), (t, n) => (ht(), vt("div", Bo, [
2432
+ dt("div", {
2433
+ id: "map",
2434
+ ref_key: "zhMapRef",
2435
+ ref: r,
2436
+ class: "zh-map"
2437
+ }, null, 512),
2438
+ ut(ao, {
2439
+ ref_key: "scaleLineRef",
2440
+ ref: a
2441
+ }, null, 512),
2442
+ ut(fo, {
2443
+ ref: "zoomControlRef",
2444
+ "map-instance": o.value
2445
+ }, null, 8, ["map-instance"])
2446
+ ]));
2447
+ }
2448
+ }), Xo = /* @__PURE__ */ wt(qo, [["__scopeId", "data-v-d9ec684d"]]), Jo = io(Xo);
2449
+ export {
2450
+ Jo as Z
2451
+ };