zhihao-ui 1.2.49 → 1.2.51
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/es/{BaseItem-D1xoWSGo.js → BaseItem-CI19jDUQ.js} +20 -19
- package/dist/es/{DatePicker-Dh8sksac.js → DatePicker-CyE4WKsz.js} +1 -1
- package/dist/es/{DetailHeader-CSC9DAQc.js → DetailHeader-B0qKfcap.js} +1 -1
- package/dist/es/{DetailSubTitle-1ZjJAmet.js → DetailSubTitle-B8j6pwZs.js} +1 -1
- package/dist/es/{DiyDataTable-BerDffOX.js → DiyDataTable-BCJUnHv2.js} +1 -1
- package/dist/es/{EditInfoPair-Dx0KRj7O.js → EditInfoPair-Db3hVe7Q.js} +1 -1
- package/dist/es/{FileWrapper-CS2RTMEV.js → FileWrapper-DO8h_J2L.js} +1 -1
- package/dist/es/{Grid-BQYUct2W.js → Grid-oDsAMJ4n.js} +1 -1
- package/dist/es/{InfoPair-C3sCcJVT.js → InfoPair-CyRms8L-.js} +1 -1
- package/dist/es/{Map-FGjTLjM5.js → Map-BpWHFPmK.js} +906 -860
- package/dist/es/{MoneyInput-DevlnT8p.js → MoneyInput-y6Eygobx.js} +1 -1
- package/dist/es/{Table-BoMGydAp.js → Table-xnTrdqL9.js} +5 -4
- package/dist/es/index.js +14 -14
- package/dist/index.css +1 -1
- package/dist/types/components/Map/Map.vue.d.ts +6 -4
- package/dist/types/components/Map/index.d.ts +12 -6
- package/dist/types/components/Map/render/canvasRender/canvasRender.d.ts +1 -0
- package/dist/types/components/Map/render/drawPolygon.d.ts +1 -0
- package/dist/types/components/Map/render/renderPoint.d.ts +1 -1
- package/dist/types/components/Map/utils/store.d.ts +1 -2
- package/dist/types/components/Table/types.d.ts +1 -0
- package/dist/umd/index.css +1 -1
- package/dist/umd/index.umd.cjs +6 -6
- package/package.json +1 -1
|
@@ -1,123 +1,128 @@
|
|
|
1
|
-
var
|
|
2
|
-
var
|
|
3
|
-
var
|
|
4
|
-
import { defineComponent, inject, useModel,
|
|
1
|
+
var G = Object.defineProperty;
|
|
2
|
+
var _ = (e, t, o) => t in e ? G(e, t, { enumerable: !0, configurable: !0, writable: !0, value: o }) : e[t] = o;
|
|
3
|
+
var I = (e, t, o) => _(e, typeof t != "symbol" ? t + "" : t, o);
|
|
4
|
+
import { ref, defineComponent, inject, useModel, watch, openBlock, createElementBlock, createElementVNode, createVNode, unref, withCtx, Fragment, renderList, toDisplayString, createCommentVNode, mergeModels, nextTick, onMounted, normalizeClass, renderSlot, createBlock, useCssVars, computed, provide } from "vue";
|
|
5
5
|
import { p as getArea, q as getLength, V as VectorSource, r as VectorLayer, S as Style, C as CircleStyle, F as Fill, s as Stroke, D as Draw, O as Overlay, u as unByKey, t as ElSelect, v as ElOption, w as getUid, x as fromLonLat, P as Point, y as transform, z as Feature, T as Text, I as Icon, A as Translate, B as toLonLat, i as cloneDeep, G as GeoJSON, W as WebGLPointsLayer, H as Circle, J as transformExtent, h as hooks, L as LineString, K as Polyline, M as getVectorContext, N as buffer, Q as ScaleLine$1, R as MultiPoint, U as getCenter, X as TileLayer, Y as XYZ, Z as Map$1, _ as View } from "./vendor-DaYdW1_n.js";
|
|
6
6
|
import { _ as _export_sfc } from "./Button-CNEQmoqP.js";
|
|
7
|
-
import { g as getForegroundColor } from "./DatePicker-
|
|
7
|
+
import { g as getForegroundColor } from "./DatePicker-CyE4WKsz.js";
|
|
8
8
|
import { w as withInstall } from "./utils-BSQSj8Ii.js";
|
|
9
9
|
var BaseMapType = /* @__PURE__ */ ((e) => (e[e.vector = 0] = "vector", e[e.satellite = 1] = "satellite", e))(BaseMapType || {}), SEARCH_TYPE = /* @__PURE__ */ ((e) => (e[e.SEARCH_SHIP = 0] = "SEARCH_SHIP", e[e.SEARCH_PORT = 1] = "SEARCH_PORT", e[e.SEARCH_CUSTOM = 2] = "SEARCH_CUSTOM", e))(SEARCH_TYPE || {}), COPY_RIGHT_TYPE = /* @__PURE__ */ ((e) => (e[e.HORIZONTAL = 0] = "HORIZONTAL", e[e.VERTICAL = 1] = "VERTICAL", e))(COPY_RIGHT_TYPE || {}), CAR_COLOR = /* @__PURE__ */ ((e) => (e[e.BLUE = 1] = "BLUE", e[e.YELLOW = 2] = "YELLOW", e[e.Y_GREEN = 3] = "Y_GREEN", e))(CAR_COLOR || {}), DEVICE_TYPE = /* @__PURE__ */ ((e) => (e[e.HOST = 1] = "HOST", e[e.TALK = 2] = "TALK", e[e.STORAGE = 3] = "STORAGE", e[e.INTERNET = 4] = "INTERNET", e[e.CAMERA = 5] = "CAMERA", e[e.LOAD = 6] = "LOAD", e))(DEVICE_TYPE || {}), LENGTH_UNIT = /* @__PURE__ */ ((e) => (e[e.M = 1] = "M", e[e.KM = 2] = "KM", e[e.NM = 3] = "NM", e))(LENGTH_UNIT || {}), SWITCH_BTN = /* @__PURE__ */ ((e) => (e.Camera = "camera", e.Mobile = "mobile", e.WaterGauge = "waterGauge", e))(SWITCH_BTN || {}), SHIP_SAIL_STATUS = /* @__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))(SHIP_SAIL_STATUS || {});
|
|
10
10
|
class ShipMapData {
|
|
11
|
-
constructor(t, n,
|
|
12
|
-
|
|
11
|
+
constructor(t, o, n, l, r, i, c, s, m, d, u, h, p, f, v, g, k, M, b, E, V, F, $, y) {
|
|
12
|
+
I(this, "id");
|
|
13
13
|
// mmsi
|
|
14
|
-
|
|
14
|
+
I(this, "mmsi");
|
|
15
15
|
// 船舶三角形填充色
|
|
16
|
-
|
|
16
|
+
I(this, "fill");
|
|
17
17
|
// 船类型 "7": "货船",
|
|
18
|
-
|
|
18
|
+
I(this, "shipType");
|
|
19
19
|
// 船名
|
|
20
|
-
|
|
20
|
+
I(this, "name");
|
|
21
21
|
// 长度
|
|
22
|
-
|
|
22
|
+
I(this, "length");
|
|
23
23
|
// 宽度
|
|
24
|
-
|
|
24
|
+
I(this, "breadth");
|
|
25
25
|
// 经度
|
|
26
|
-
|
|
26
|
+
I(this, "lon");
|
|
27
27
|
// 纬度
|
|
28
|
-
|
|
28
|
+
I(this, "lat");
|
|
29
29
|
// 时间
|
|
30
|
-
|
|
30
|
+
I(this, "createdAt");
|
|
31
31
|
// 速度
|
|
32
|
-
|
|
32
|
+
I(this, "speed");
|
|
33
33
|
// 来源
|
|
34
|
-
|
|
34
|
+
I(this, "from");
|
|
35
35
|
// 船状态 "stop":"静止","sail":"航行","work":"作业","danger":"危险","other":"其他"
|
|
36
|
-
|
|
36
|
+
I(this, "sailStatus");
|
|
37
37
|
// 船艏向
|
|
38
|
-
|
|
38
|
+
I(this, "hdg");
|
|
39
39
|
// 航迹向
|
|
40
|
-
|
|
40
|
+
I(this, "cog");
|
|
41
41
|
// 设备定位类型
|
|
42
|
-
|
|
43
|
-
|
|
42
|
+
I(this, "posType");
|
|
43
|
+
I(this, "type");
|
|
44
44
|
// 航向角度
|
|
45
|
-
|
|
45
|
+
I(this, "angle");
|
|
46
46
|
// 左侧是否显示色块
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
this.id = t, this.mmsi =
|
|
47
|
+
I(this, "leftIconColor");
|
|
48
|
+
I(this, "existDevice");
|
|
49
|
+
I(this, "existMobile");
|
|
50
|
+
I(this, "existWaterGauge");
|
|
51
|
+
I(this, "selected");
|
|
52
|
+
I(this, "blinkColors");
|
|
53
|
+
this.id = t, this.mmsi = o, this.fill = n, this.shipType = l, this.name = r, this.length = i, this.breadth = c, this.lon = s, this.lat = m, this.createdAt = d, this.speed = u, this.from = h, this.sailStatus = p, this.hdg = f, this.cog = v, this.posType = g, this.type = k, this.angle = M, this.leftIconColor = b, this.existDevice = E, this.existMobile = V, this.existWaterGauge = F, this.selected = $, this.blinkColors = y;
|
|
54
54
|
}
|
|
55
55
|
}
|
|
56
56
|
const formatLength = function(e, t) {
|
|
57
|
-
const
|
|
58
|
-
let
|
|
57
|
+
const n = getLength(e);
|
|
58
|
+
let l = "";
|
|
59
59
|
switch (t) {
|
|
60
60
|
case LENGTH_UNIT.M:
|
|
61
|
-
|
|
61
|
+
l = Math.round(n * 100) / 100 + " m";
|
|
62
62
|
break;
|
|
63
63
|
case LENGTH_UNIT.KM:
|
|
64
|
-
|
|
64
|
+
l = Math.round(n / 1e3 * 100) / 100 + " km";
|
|
65
65
|
break;
|
|
66
66
|
case LENGTH_UNIT.NM:
|
|
67
|
-
|
|
67
|
+
l = (Math.round(n / 1e3 * 100) / 100 / 1.852).toFixed(2) + " nm";
|
|
68
68
|
break;
|
|
69
69
|
}
|
|
70
|
-
return
|
|
70
|
+
return l;
|
|
71
71
|
}, convertSixHundredThousandToLatLng = function(e, t) {
|
|
72
|
-
const
|
|
73
|
-
return [Number(e) / 6e5,
|
|
72
|
+
const o = Number(t) / 6e5;
|
|
73
|
+
return [Number(e) / 6e5, o];
|
|
74
74
|
}, formatArea = (e, t) => {
|
|
75
|
-
const
|
|
76
|
-
let
|
|
75
|
+
const n = getArea(e);
|
|
76
|
+
let l;
|
|
77
77
|
switch (t) {
|
|
78
78
|
case LENGTH_UNIT.KM:
|
|
79
|
-
|
|
79
|
+
n > 1e4 ? l = Math.round(n / 1e6 * 100) / 100 + " km<sup>2</sup>" : l = Math.round(n * 100) / 100 + " m<sup>2</sup>";
|
|
80
80
|
break;
|
|
81
81
|
case LENGTH_UNIT.NM:
|
|
82
|
-
const
|
|
83
|
-
|
|
82
|
+
const r = Math.pow(1.852, 2);
|
|
83
|
+
n > 1e4 ? l = Math.round(n / 1e6 / r * 100) / 100 + " nm<sup>2</sup>" : l = Math.round(n * 100) / 100 + " m<sup>2</sup>";
|
|
84
84
|
break;
|
|
85
85
|
}
|
|
86
|
-
return
|
|
86
|
+
return l;
|
|
87
87
|
}, convertShipMapData = (e) => {
|
|
88
|
-
const t = (
|
|
89
|
-
|
|
90
|
-
|
|
88
|
+
const t = (o) => new ShipMapData(
|
|
89
|
+
o.id,
|
|
90
|
+
o.id,
|
|
91
91
|
// 船舶三角形填充色
|
|
92
|
-
|
|
92
|
+
o.fill || "#04C900",
|
|
93
93
|
"70",
|
|
94
|
-
(
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
94
|
+
(o.cnname || o.enname || o.name || o.id) + `${o.existName ? o.existName : ""}`,
|
|
95
|
+
o.len || o.length,
|
|
96
|
+
o.wid || o.breadth,
|
|
97
|
+
o.lon,
|
|
98
|
+
o.lat,
|
|
99
99
|
(/* @__PURE__ */ new Date()).getTime(),
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
Number(
|
|
104
|
-
|
|
105
|
-
Number(
|
|
100
|
+
o.spd,
|
|
101
|
+
o.from,
|
|
102
|
+
o.status,
|
|
103
|
+
Number(o.hdg),
|
|
104
|
+
o.cog,
|
|
105
|
+
Number(o.postype),
|
|
106
106
|
"other",
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
107
|
+
o.cog,
|
|
108
|
+
o.leftIconColor,
|
|
109
|
+
o.existDevice,
|
|
110
|
+
o.existMobile,
|
|
111
|
+
o.existWaterGauge,
|
|
112
|
+
o.selected,
|
|
113
|
+
o.blinkColors
|
|
114
114
|
);
|
|
115
|
-
return Array.isArray(e) ? e.map((
|
|
115
|
+
return Array.isArray(e) ? e.map((o) => t(o)) : t(e);
|
|
116
116
|
}, formatUtils = {
|
|
117
117
|
formatLength,
|
|
118
118
|
convertSixHundredThousandToLatLng,
|
|
119
119
|
formatArea
|
|
120
|
-
},
|
|
120
|
+
}, mapInstance$9 = ref(), shipsLayer = ref(), largeAmountShipsLayer = ref(), selectShipsLayer = ref(), allShips = ref([]), selectSingleShipData = ref();
|
|
121
|
+
ref();
|
|
122
|
+
const trucksLayer = ref(), shipTrackLineFeatures = ref([]), trackLineVectorSource = ref(), shipTrackVectorLayer = ref();
|
|
123
|
+
ref();
|
|
124
|
+
ref();
|
|
125
|
+
const shipLabels = ref([]), trackLabels = ref([]), showTrackLayer = ref(!1), allTracks = ref([]), currentTrackId = ref(""), showTrackAnimatMarker = ref(!1), hiddenOrther = ref(!1), showDrawLayer = ref(!1), _hoisted_1$4 = {
|
|
121
126
|
key: 0,
|
|
122
127
|
class: "measure-panel"
|
|
123
128
|
}, _hoisted_2$2 = { class: "d-flex justify-content-between align-content-start w-100" }, _hoisted_3$1 = { class: "measure-history-list" }, _hoisted_4 = { class: "left-panel" }, _hoisted_5 = { class: "text index" }, _hoisted_6 = { class: "text" }, _hoisted_7 = ["onClick"], _sfc_main$5 = /* @__PURE__ */ defineComponent({
|
|
@@ -129,8 +134,8 @@ const formatLength = function(e, t) {
|
|
|
129
134
|
visibleModifiers: {}
|
|
130
135
|
}),
|
|
131
136
|
emits: /* @__PURE__ */ mergeModels(["close"], ["update:visible"]),
|
|
132
|
-
setup(e, { expose: t, emit:
|
|
133
|
-
const
|
|
137
|
+
setup(e, { expose: t, emit: o }) {
|
|
138
|
+
const n = inject("mapInstance"), l = o, r = useModel(e, "visible"), i = ref("3"), c = ref([]), s = ref(!1), m = new VectorSource();
|
|
134
139
|
let d, u, h, p, f;
|
|
135
140
|
const v = new VectorLayer({
|
|
136
141
|
source: m,
|
|
@@ -141,20 +146,20 @@ const formatLength = function(e, t) {
|
|
|
141
146
|
"circle-radius": 7,
|
|
142
147
|
"circle-fill-color": "#ffcc33"
|
|
143
148
|
}
|
|
144
|
-
}), g = function(
|
|
145
|
-
if (
|
|
149
|
+
}), g = function(S) {
|
|
150
|
+
if (S.dragging)
|
|
146
151
|
return;
|
|
147
152
|
let T = "点击选择起点";
|
|
148
|
-
d && (T = "单击继续,双击结束"), u && (u.innerHTML = T, h.setPosition(
|
|
149
|
-
},
|
|
150
|
-
var
|
|
151
|
-
|
|
153
|
+
d && (T = "单击继续,双击结束"), u && (u.innerHTML = T, h.setPosition(S.coordinate), u.classList.remove("hidden"));
|
|
154
|
+
}, k = () => {
|
|
155
|
+
var S, T;
|
|
156
|
+
n != null && n.value && ((S = n == null ? void 0 : n.value) == null || S.on("pointermove", g), (T = n == null ? void 0 : n.value) == null || T.getViewport().addEventListener("mouseout", function() {
|
|
152
157
|
var C;
|
|
153
158
|
(C = u == null ? void 0 : u.classList) == null || C.add("hidden");
|
|
154
159
|
}), s.value = !0);
|
|
155
160
|
};
|
|
156
|
-
let
|
|
157
|
-
const
|
|
161
|
+
let M;
|
|
162
|
+
const b = new Style({
|
|
158
163
|
fill: new Fill({
|
|
159
164
|
color: "rgba(255, 255, 255, 0.2)"
|
|
160
165
|
}),
|
|
@@ -173,97 +178,97 @@ const formatLength = function(e, t) {
|
|
|
173
178
|
})
|
|
174
179
|
})
|
|
175
180
|
});
|
|
176
|
-
function
|
|
177
|
-
var
|
|
178
|
-
if (
|
|
179
|
-
if (c.value = [], document.querySelectorAll(".ol-tooltip.ol-tooltip-static").forEach((C) => {
|
|
180
|
-
var
|
|
181
|
-
(
|
|
182
|
-
}), m.clear(),
|
|
183
|
-
const C =
|
|
184
|
-
C && ((
|
|
181
|
+
function E() {
|
|
182
|
+
var S, T;
|
|
183
|
+
if (n != null && n.value) {
|
|
184
|
+
if (showDrawLayer.value = !1, c.value = [], document.querySelectorAll(".ol-tooltip.ol-tooltip-static").forEach((C) => {
|
|
185
|
+
var P;
|
|
186
|
+
(P = C == null ? void 0 : C.parentNode) == null || P.removeChild(C);
|
|
187
|
+
}), m.clear(), M) {
|
|
188
|
+
const C = n.value.getInteractions().getArray().find((P) => getUid(P) === getUid(M));
|
|
189
|
+
C && ((S = n.value) == null || S.removeInteraction(C));
|
|
185
190
|
}
|
|
186
|
-
(T =
|
|
191
|
+
(T = n.value) == null || T.removeLayer(v), u != null && u.parentNode && u.parentNode.removeChild(u), p != null && p.parentNode && p.parentNode.removeChild(p);
|
|
187
192
|
}
|
|
188
193
|
}
|
|
189
|
-
function
|
|
194
|
+
function V() {
|
|
190
195
|
var T, C;
|
|
191
|
-
|
|
196
|
+
E(), (T = n == null ? void 0 : n.value) == null || T.addLayer(v), showDrawLayer.value = !0, M = new Draw({
|
|
192
197
|
source: m,
|
|
193
198
|
type: "LineString",
|
|
194
199
|
style: function() {
|
|
195
|
-
return
|
|
200
|
+
return b;
|
|
196
201
|
},
|
|
197
202
|
// 添加条件函数,判断是否应该触发绘制
|
|
198
|
-
condition: function(
|
|
199
|
-
return
|
|
203
|
+
condition: function(P) {
|
|
204
|
+
return P.originalEvent.target.tagName !== "DIV";
|
|
200
205
|
}
|
|
201
|
-
}), (C =
|
|
202
|
-
let
|
|
203
|
-
|
|
206
|
+
}), (C = n == null ? void 0 : n.value) == null || C.addInteraction(M), $(), F();
|
|
207
|
+
let S;
|
|
208
|
+
M.on("drawstart", function(P) {
|
|
204
209
|
var N;
|
|
205
|
-
d =
|
|
206
|
-
let
|
|
207
|
-
|
|
208
|
-
const
|
|
209
|
-
let
|
|
210
|
-
|
|
210
|
+
d = P.feature, d.set("randomId", w());
|
|
211
|
+
let x;
|
|
212
|
+
S = (N = d.getGeometry()) == null ? void 0 : N.on("change", function(R) {
|
|
213
|
+
const B = R.target;
|
|
214
|
+
let D = formatUtils.formatLength(B, Number(i.value));
|
|
215
|
+
x = B.getLastCoordinate(), p && D && (p.innerHTML = D), f.setPosition(x);
|
|
211
216
|
});
|
|
212
|
-
}),
|
|
213
|
-
var
|
|
217
|
+
}), M.on("drawend", function() {
|
|
218
|
+
var P;
|
|
214
219
|
if (p && (p.className = "ol-tooltip ol-tooltip-static ol-tooltip-measure"), p != null && p.innerHTML) {
|
|
215
|
-
const
|
|
216
|
-
c.value.push({ id:
|
|
220
|
+
const x = (d == null ? void 0 : d.get("randomId")) || w();
|
|
221
|
+
c.value.push({ id: x, value: p == null ? void 0 : p.innerHTML }), p.innerHTML = `${p.innerHTML}<div class="ol-tooltip-delete-button" data-id="${x}"><i class="map-iconfont icon-delete"></i></div>`;
|
|
217
222
|
}
|
|
218
|
-
(
|
|
219
|
-
var
|
|
220
|
-
|
|
221
|
-
const N = (
|
|
223
|
+
(P = document.querySelector(".ol-selectable:has(.ol-tooltip-delete-button):last-child .ol-tooltip-delete-button")) == null || P.addEventListener("click", (x) => {
|
|
224
|
+
var R;
|
|
225
|
+
x.preventDefault(), x.stopPropagation();
|
|
226
|
+
const N = (R = x.target) == null ? void 0 : R.getAttribute("data-id");
|
|
222
227
|
N && y(N);
|
|
223
|
-
}), f.setOffset([0, -7]), d = null, p = null, $(),
|
|
228
|
+
}), f.setOffset([0, -7]), d = null, p = null, $(), S && unByKey(S);
|
|
224
229
|
});
|
|
225
230
|
}
|
|
226
|
-
function
|
|
227
|
-
var
|
|
231
|
+
function F() {
|
|
232
|
+
var S;
|
|
228
233
|
u != null && u.parentNode && u.parentNode.removeChild(u), u = document.createElement("div"), u.className = "ol-tooltip hidden", h = new Overlay({
|
|
229
234
|
element: u,
|
|
230
235
|
offset: [15, 0],
|
|
231
236
|
positioning: "center-left"
|
|
232
|
-
}), (
|
|
237
|
+
}), (S = n == null ? void 0 : n.value) == null || S.addOverlay(h);
|
|
233
238
|
}
|
|
234
239
|
function $() {
|
|
235
|
-
var
|
|
240
|
+
var S;
|
|
236
241
|
p != null && p.parentNode && p.parentNode.removeChild(p), p = document.createElement("div"), p.className = "ol-tooltip ol-tooltip-measure", f = new Overlay({
|
|
237
242
|
element: p,
|
|
238
243
|
offset: [0, -15],
|
|
239
244
|
positioning: "bottom-center",
|
|
240
245
|
stopEvent: !1,
|
|
241
246
|
insertFirst: !1
|
|
242
|
-
}), (
|
|
247
|
+
}), (S = n == null ? void 0 : n.value) == null || S.addOverlay(f);
|
|
243
248
|
}
|
|
244
|
-
const y = (
|
|
245
|
-
var C,
|
|
246
|
-
const T = c.value.findIndex((
|
|
249
|
+
const y = (S) => {
|
|
250
|
+
var C, P;
|
|
251
|
+
const T = c.value.findIndex((x) => x.id === S);
|
|
247
252
|
if (T !== -1) {
|
|
248
253
|
c.value.splice(T, 1);
|
|
249
|
-
const
|
|
250
|
-
|
|
254
|
+
const x = document.querySelectorAll(".ol-tooltip.ol-tooltip-static.ol-tooltip-measure");
|
|
255
|
+
x[T] && ((P = (C = x[T]) == null ? void 0 : C.parentNode) == null || P.removeChild(x[T]));
|
|
251
256
|
const N = m.getFeatures();
|
|
252
257
|
N[T] && m.removeFeature(N[T]);
|
|
253
258
|
}
|
|
254
|
-
},
|
|
255
|
-
|
|
256
|
-
},
|
|
257
|
-
return watch(() =>
|
|
258
|
-
|
|
259
|
+
}, L = () => {
|
|
260
|
+
l("close");
|
|
261
|
+
}, w = () => Math.random().toString(36).substring(2, 9);
|
|
262
|
+
return watch(() => r, () => {
|
|
263
|
+
r.value && !s.value && (k(), V());
|
|
259
264
|
}, { deep: !0, immediate: !0 }), t({
|
|
260
|
-
addInteraction:
|
|
261
|
-
removeInteraction:
|
|
262
|
-
}), (
|
|
265
|
+
addInteraction: V,
|
|
266
|
+
removeInteraction: E
|
|
267
|
+
}), (S, T) => r.value && S.viewMode !== "WxMiniprogram" ? (openBlock(), createElementBlock("div", _hoisted_1$4, [
|
|
263
268
|
createElementVNode("div", { class: "header" }, [
|
|
264
269
|
T[1] || (T[1] = createElementVNode("div", { class: "title" }, "测量", -1)),
|
|
265
270
|
createElementVNode("i", {
|
|
266
|
-
onClick:
|
|
271
|
+
onClick: L,
|
|
267
272
|
class: "map-iconfont icon-close"
|
|
268
273
|
})
|
|
269
274
|
]),
|
|
@@ -271,8 +276,8 @@ const formatLength = function(e, t) {
|
|
|
271
276
|
T[2] || (T[2] = createElementVNode("div", { class: "tips" }, "在地图上点击多个点测量距离,距离单位", -1)),
|
|
272
277
|
createVNode(unref(ElSelect), {
|
|
273
278
|
class: "select-length-unit",
|
|
274
|
-
modelValue:
|
|
275
|
-
"onUpdate:modelValue": T[0] || (T[0] = (C) =>
|
|
279
|
+
modelValue: i.value,
|
|
280
|
+
"onUpdate:modelValue": T[0] || (T[0] = (C) => i.value = C)
|
|
276
281
|
}, {
|
|
277
282
|
default: withCtx(() => [
|
|
278
283
|
createVNode(unref(ElOption), {
|
|
@@ -292,18 +297,18 @@ const formatLength = function(e, t) {
|
|
|
292
297
|
}, 8, ["modelValue"])
|
|
293
298
|
]),
|
|
294
299
|
createElementVNode("div", _hoisted_3$1, [
|
|
295
|
-
(openBlock(!0), createElementBlock(Fragment, null, renderList(c.value, (C,
|
|
300
|
+
(openBlock(!0), createElementBlock(Fragment, null, renderList(c.value, (C, P) => (openBlock(), createElementBlock("div", {
|
|
296
301
|
class: "measure-history-item",
|
|
297
302
|
key: C.id
|
|
298
303
|
}, [
|
|
299
304
|
createElementVNode("div", _hoisted_4, [
|
|
300
305
|
T[3] || (T[3] = createElementVNode("i", { class: "map-iconfont icon-line" }, null, -1)),
|
|
301
|
-
createElementVNode("span", _hoisted_5, "线段" + toDisplayString(
|
|
306
|
+
createElementVNode("span", _hoisted_5, "线段" + toDisplayString(P + 1), 1),
|
|
302
307
|
createElementVNode("span", _hoisted_6, toDisplayString(C.value), 1)
|
|
303
308
|
]),
|
|
304
309
|
createElementVNode("div", {
|
|
305
310
|
class: "delete-button",
|
|
306
|
-
onClick: (
|
|
311
|
+
onClick: (x) => y(C.id)
|
|
307
312
|
}, T[4] || (T[4] = [
|
|
308
313
|
createElementVNode("i", { class: "map-iconfont icon-delete" }, null, -1)
|
|
309
314
|
]), 8, _hoisted_7)
|
|
@@ -311,7 +316,7 @@ const formatLength = function(e, t) {
|
|
|
311
316
|
])
|
|
312
317
|
])) : createCommentVNode("", !0);
|
|
313
318
|
}
|
|
314
|
-
}), Measure = /* @__PURE__ */ _export_sfc(_sfc_main$5, [["__scopeId", "data-v-
|
|
319
|
+
}), Measure = /* @__PURE__ */ _export_sfc(_sfc_main$5, [["__scopeId", "data-v-3277433d"]]), mapInstance$8 = ref(), renderMarkerSetInstance = (e) => mapInstance$8.value = e, markerPosition = ref(""), marker = ref(), createIconStyle = (e) => new Style({
|
|
315
320
|
image: new Icon({
|
|
316
321
|
src: CDN_URL + "map/poi-marker-default.png",
|
|
317
322
|
anchor: [0.5, 1]
|
|
@@ -340,19 +345,19 @@ const formatLength = function(e, t) {
|
|
|
340
345
|
padding: [2, 2, 2, 2]
|
|
341
346
|
// 设置文本背景的内边距
|
|
342
347
|
})
|
|
343
|
-
}), renderMarker = (e, t = !0,
|
|
348
|
+
}), renderMarker = (e, t = !0, o = !0) => {
|
|
344
349
|
var d;
|
|
345
350
|
if (!mapInstance$8.value || !e || e.split(",").length !== 2) return;
|
|
346
|
-
const [
|
|
351
|
+
const [n, l] = e.split(",").map(Number);
|
|
347
352
|
marker.value = new Feature({
|
|
348
|
-
geometry: new Point(fromLonLat([
|
|
353
|
+
geometry: new Point(fromLonLat([n, l]))
|
|
349
354
|
});
|
|
350
|
-
const
|
|
351
|
-
(d = marker.value) == null || d.setStyle(createIconStyle(
|
|
352
|
-
const
|
|
355
|
+
const r = o ? `${n}, ${l}` : "";
|
|
356
|
+
(d = marker.value) == null || d.setStyle(createIconStyle(r));
|
|
357
|
+
const i = new VectorSource({
|
|
353
358
|
features: [marker.value]
|
|
354
359
|
}), c = new VectorLayer({
|
|
355
|
-
source:
|
|
360
|
+
source: i
|
|
356
361
|
}), s = mapInstance$8.value.getView();
|
|
357
362
|
if (mapInstance$8.value.addLayer(c), t) {
|
|
358
363
|
const u = new Translate({
|
|
@@ -364,15 +369,15 @@ const formatLength = function(e, t) {
|
|
|
364
369
|
markerPosition.value = `${f[0].toFixed(6)}, ${f[1].toFixed(6)}`, (v = marker.value) == null || v.setStyle(createIconStyle(markerPosition.value));
|
|
365
370
|
}), mapInstance$8.value.addInteraction(u);
|
|
366
371
|
}
|
|
367
|
-
const m = new Point([
|
|
372
|
+
const m = new Point([n, l]);
|
|
368
373
|
s.setCenter(transform(m.getCoordinates(), projection.data, projection.mercator)), s.setZoom(mapZoom.findShip);
|
|
369
374
|
}, setMarkerPosition = (e) => {
|
|
370
|
-
var
|
|
375
|
+
var l, r;
|
|
371
376
|
if (!mapInstance$8.value) return;
|
|
372
|
-
const t = mapInstance$8.value.getView(),
|
|
373
|
-
(
|
|
374
|
-
const
|
|
375
|
-
t.setCenter(transform(
|
|
377
|
+
const t = mapInstance$8.value.getView(), o = e.split(",").map(Number);
|
|
378
|
+
(r = (l = marker.value) == null ? void 0 : l.getGeometry()) == null || r.setCoordinates(fromLonLat([o[0], o[1]]));
|
|
379
|
+
const n = new Point([o[0], o[1]]);
|
|
380
|
+
t.setCenter(transform(n.getCoordinates(), projection.data, projection.mercator)), t.setZoom(mapZoom.markerPosition);
|
|
376
381
|
}, CDN_URL = "https://static.zhihaoscm.cn/", tiandituKey = "a6e8f78974f2581f2ca00485b40c948f", zhongkeKey = "15c81cc0a191a232e0a0ca1a51c3ca81", baseMap = {
|
|
377
382
|
// 矢量底图
|
|
378
383
|
// zhongkeTile: `https://api.open.geovisearth.com/map/v1/vec/{z}/{x}/{y}?token=${zhongkeKey}&format=png&tmsIds=w`,
|
|
@@ -415,19 +420,12 @@ const formatLength = function(e, t) {
|
|
|
415
420
|
// 墨卡托投影坐标 渲染坐标
|
|
416
421
|
mercator: "EPSG:3857"
|
|
417
422
|
}, LOG_DATE_FORMAT = "YYYY-MM-DD HH:mm:ss", DEFAULT_VALUE = "--";
|
|
418
|
-
ref();
|
|
419
|
-
const shipsLayer = ref(), largeAmountShipsLayer = ref(), selectShipsLayer = ref(), allShips = ref([]), selectSingleShipData = ref();
|
|
420
|
-
ref();
|
|
421
|
-
const trucksLayer = ref(), shipTrackLineFeatures = ref([]), trackLineVectorSource = ref(), shipTrackVectorLayer = ref();
|
|
422
|
-
ref();
|
|
423
|
-
ref();
|
|
424
|
-
const shipLabels = ref([]), trackLabels = ref([]), showTrackLayer = ref(!1), allTracks = ref([]), currentTrackId = ref(""), showTrackAnimatMarker = ref(!1), hiddenOrther = ref(!1), showMeasure = ref(!1), getShowMeasure = () => showMeasure.value;
|
|
425
423
|
function getIconFont(unicode = "") {
|
|
426
424
|
return unicode.indexOf("&") !== -1 && (unicode = unicode.replace("&", "&")), unicode.indexOf("&") !== -1 && (unicode = unicode.replace("&", "&")), eval('("' + unicode.replace("&#x", "\\u").replace(";", "") + '")');
|
|
427
425
|
}
|
|
428
426
|
const multiplyPixelRatio = (e) => {
|
|
429
427
|
const t = window.devicePixelRatio || 1;
|
|
430
|
-
return e.map((
|
|
428
|
+
return e.map((o) => o.map((n) => n * t));
|
|
431
429
|
}, adjustBounds = (e, t) => t.length === 2 ? [e[0] - t[0], e[1] - t[1], e[2] + t[0], e[3] + t[1]] : [e[0] + t[0], e[1] + t[1], e[2] + t[2], e[3] + t[3]], isOverlapping = (e, t) => e[0] <= t[2] && e[2] >= t[0] && e[1] <= t[3] && e[3] >= t[1], getIconStyle = (e) => new Style({
|
|
432
430
|
text: new Text({
|
|
433
431
|
font: "Normal 14px map-iconfont",
|
|
@@ -436,14 +434,14 @@ const multiplyPixelRatio = (e) => {
|
|
|
436
434
|
offsetY: -14
|
|
437
435
|
}),
|
|
438
436
|
zIndex: 100
|
|
439
|
-
}), getRotation = (e, t,
|
|
440
|
-
function
|
|
437
|
+
}), getRotation = (e, t, o) => {
|
|
438
|
+
function n(u) {
|
|
441
439
|
return 180 * (u % (2 * Math.PI)) / Math.PI;
|
|
442
440
|
}
|
|
443
|
-
function
|
|
441
|
+
function l(u) {
|
|
444
442
|
return u % 360 * Math.PI / 180;
|
|
445
443
|
}
|
|
446
|
-
function
|
|
444
|
+
function r(u) {
|
|
447
445
|
if (!u) throw new Error("Coordinate is required");
|
|
448
446
|
if (!Array.isArray(u)) {
|
|
449
447
|
if (u.type === "Feature" && u.geometry !== null && u.geometry.type === "Point")
|
|
@@ -456,13 +454,13 @@ const multiplyPixelRatio = (e) => {
|
|
|
456
454
|
"Coordinate must be GeoJSON Point or an Array of numbers"
|
|
457
455
|
);
|
|
458
456
|
}
|
|
459
|
-
function
|
|
457
|
+
function i(u, h, p = {}) {
|
|
460
458
|
if (p.final)
|
|
461
|
-
return function(
|
|
462
|
-
return (
|
|
459
|
+
return function(F, $) {
|
|
460
|
+
return (i($, F) + 180) % 360;
|
|
463
461
|
}(u, h);
|
|
464
|
-
const f =
|
|
465
|
-
return
|
|
462
|
+
const f = r(u), v = r(h), g = l(f[0]), k = l(v[0]), M = l(f[1]), b = l(v[1]), E = Math.sin(k - g) * Math.cos(b), V = Math.cos(M) * Math.sin(b) - Math.sin(M) * Math.cos(b) * Math.cos(k - g);
|
|
463
|
+
return n(Math.atan2(E, V));
|
|
466
464
|
}
|
|
467
465
|
function c(u) {
|
|
468
466
|
return !isNaN(u) && u !== null && !Array.isArray(u);
|
|
@@ -474,7 +472,7 @@ const multiplyPixelRatio = (e) => {
|
|
|
474
472
|
const f = { type: "Feature" };
|
|
475
473
|
return p.id !== void 0 && (f.id = p.id), p.bbox && (f.bbox = p.bbox), f.properties = h || {}, f.geometry = u, f;
|
|
476
474
|
}
|
|
477
|
-
const d =
|
|
475
|
+
const d = i(s(e), s(t), o);
|
|
478
476
|
return d < 0 ? 360 + d : d;
|
|
479
477
|
}, triangleModel = multiplyPixelRatio([
|
|
480
478
|
[0, -8],
|
|
@@ -551,86 +549,93 @@ const multiplyPixelRatio = (e) => {
|
|
|
551
549
|
isMapMoving.value = !1, e.render();
|
|
552
550
|
});
|
|
553
551
|
}, speedCondition = [[1, 10], [10, 20], [20, 1 / 0]], drawShipModelByZoom = { 14: [200, 30], 15: [115, 15], 16: [55, 8], 17: [25, 5], 18: [1, 1] }, setShipStyle = (e, t = !1) => new Style({
|
|
554
|
-
renderer: (
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
552
|
+
renderer: (o, n) => {
|
|
553
|
+
var c, s;
|
|
554
|
+
o = o;
|
|
555
|
+
const l = n.context, r = n.feature.get("data");
|
|
556
|
+
if (!r) return;
|
|
557
|
+
const i = n.feature.get("index");
|
|
558
|
+
(i === 0 || i === void 0) && (shipLabels.value = []);
|
|
559
559
|
try {
|
|
560
|
-
const
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
560
|
+
const m = drawShipBody(l, r, o, t);
|
|
561
|
+
m && (drawHeading(l, r, m, t), r.selected = e, !isMapMoving.value && e && (drawSelectBounds(l, m), (s = (c = trackLineVectorSource.value) == null ? void 0 : c.getFeatures()) != null && s.some((u) => {
|
|
562
|
+
const h = u.get("data");
|
|
563
|
+
return (h == null ? void 0 : h.id) === r.id;
|
|
564
|
+
}) || setTimeout(() => {
|
|
565
|
+
drawSelectBounds(l, m);
|
|
566
|
+
}, 1))), drawShipLabel(l, r, o), e && setTimeout(() => {
|
|
567
|
+
drawShipLabel(l, r, o);
|
|
568
|
+
}, 1);
|
|
564
569
|
} catch {
|
|
565
570
|
return !1;
|
|
566
571
|
}
|
|
567
572
|
}
|
|
568
|
-
}), drawShipBody = (e, t,
|
|
573
|
+
}), drawShipBody = (e, t, o, n) => {
|
|
569
574
|
if (!mapInstance$7.value) return;
|
|
570
|
-
const
|
|
571
|
-
if (!
|
|
572
|
-
let
|
|
573
|
-
const [
|
|
574
|
-
if (
|
|
575
|
-
|
|
575
|
+
const l = Math.round(Number(mapInstance$7.value.getView().getZoom()));
|
|
576
|
+
if (!l) return;
|
|
577
|
+
let r = [];
|
|
578
|
+
const [i, c] = drawShipModelByZoom[l] || [0, 0], [s, m] = o;
|
|
579
|
+
if (l <= mapZoom.shipModelMax && l > mapZoom.shipModelMin && t.length >= i && t.breadth >= c)
|
|
580
|
+
r = rotateShapeModel(drawCurrentShipShapeModel(t, l), t.angle).map((u) => {
|
|
576
581
|
const [h, p] = u;
|
|
577
582
|
return [s + h, m + p];
|
|
578
583
|
});
|
|
579
584
|
else {
|
|
580
585
|
const d = rotateShapeModel(triangleModel, t.angle);
|
|
581
|
-
|
|
586
|
+
o.length === 2 && (r = d.map((u) => {
|
|
582
587
|
const [h, p] = u;
|
|
583
588
|
return [s + h, m + p];
|
|
584
589
|
}));
|
|
585
590
|
}
|
|
586
|
-
if (!(
|
|
591
|
+
if (!(r.length > 2)) return !1;
|
|
587
592
|
if (t != null && t.length) {
|
|
588
|
-
const d =
|
|
593
|
+
const d = r.length === 3 ? 30 : t.length * 0.4;
|
|
589
594
|
e.beginPath(), e.arc(
|
|
590
|
-
|
|
591
|
-
|
|
595
|
+
o[0],
|
|
596
|
+
o[1],
|
|
592
597
|
d,
|
|
593
598
|
0,
|
|
594
599
|
2 * Math.PI
|
|
595
600
|
), e.fillStyle = "rgba(255, 255, 255, 0.001)", e.fill();
|
|
596
601
|
}
|
|
597
|
-
e.save(), e.beginPath(), e.moveTo(
|
|
598
|
-
for (let d = 1; d <
|
|
599
|
-
e.lineTo(
|
|
600
|
-
return e.closePath(), e.strokeStyle =
|
|
601
|
-
}, drawHeading = (e, t,
|
|
602
|
-
const [
|
|
603
|
-
if (
|
|
604
|
-
const c =
|
|
602
|
+
e.save(), e.beginPath(), e.moveTo(r[0][0], r[0][1]);
|
|
603
|
+
for (let d = 1; d < r.length; d++)
|
|
604
|
+
e.lineTo(r[d][0], r[d][1]);
|
|
605
|
+
return e.closePath(), e.strokeStyle = n ? "#ff0000" : "#000", e.lineWidth = n ? 2 : 1, e.stroke(), e.fillStyle = t.fill, e.fill(), e.restore(), r;
|
|
606
|
+
}, drawHeading = (e, t, o, n) => {
|
|
607
|
+
const [l, r] = o[0], i = getShipDirectPath(t);
|
|
608
|
+
if (i) {
|
|
609
|
+
const c = i.map(function(s) {
|
|
605
610
|
const [m, d] = s;
|
|
606
|
-
return [m +
|
|
611
|
+
return [m + l, d + r];
|
|
607
612
|
});
|
|
608
613
|
if (e.save(), e.beginPath(), t.angle > 0) {
|
|
609
|
-
e.translate(
|
|
614
|
+
e.translate(l, r);
|
|
610
615
|
const s = t.angle * Math.PI / 180;
|
|
611
|
-
e.rotate(s), e.translate(-
|
|
616
|
+
e.rotate(s), e.translate(-l, -r);
|
|
612
617
|
}
|
|
613
|
-
e.moveTo(
|
|
618
|
+
e.moveTo(l, r);
|
|
614
619
|
for (let s = 1; s < c.length; s++) {
|
|
615
620
|
const [m, d] = c[s];
|
|
616
621
|
e.lineTo(m, d);
|
|
617
622
|
}
|
|
618
|
-
e.strokeStyle =
|
|
623
|
+
e.strokeStyle = n ? "#ff0000" : "#000", e.lineWidth = n ? 2 : 1, e.stroke(), e.restore();
|
|
619
624
|
}
|
|
620
625
|
}, drawSelectBounds = (e, t) => {
|
|
621
|
-
let [n,
|
|
622
|
-
const
|
|
623
|
-
|
|
624
|
-
const s = 8 *
|
|
625
|
-
e.beginPath(), e.moveTo(
|
|
626
|
-
}, drawShipLabel = (e, t,
|
|
627
|
-
if (!t.selected && shipLabels.value.find((u) => u.
|
|
628
|
-
const [
|
|
626
|
+
let [o, n, l, r] = getPixelFromCoordinate(t);
|
|
627
|
+
const i = window.devicePixelRatio || 1, c = 4;
|
|
628
|
+
o -= c, n -= c, l += c, r += c, e.save(), e.strokeStyle = "#ff0000", e.lineWidth = 4 * i;
|
|
629
|
+
const s = 8 * i;
|
|
630
|
+
e.beginPath(), e.moveTo(o + s, r), e.lineTo(o, r), e.lineTo(o, r - s), e.moveTo(o, n + s), e.lineTo(o, n), e.lineTo(o + s, n), e.moveTo(l - s, n), e.lineTo(l, n), e.lineTo(l, n + s), e.moveTo(l, r - s), e.lineTo(l, r), e.lineTo(l - s, r), e.stroke(), e.restore();
|
|
631
|
+
}, drawShipLabel = (e, t, o) => {
|
|
632
|
+
if (!t.selected && shipLabels.value.find((u) => u.id === t.id)) return;
|
|
633
|
+
const [n, l] = o, r = n, i = l, c = t.name;
|
|
629
634
|
let s;
|
|
630
635
|
t.leftIconColor && (s = { color: t.leftIconColor, icon: "" });
|
|
631
636
|
const m = getShipCustomIcon(t), d = {
|
|
632
637
|
id: t.id,
|
|
633
|
-
center: [
|
|
638
|
+
center: [r, i],
|
|
634
639
|
text: c,
|
|
635
640
|
fill: t.fill,
|
|
636
641
|
color: "#fff",
|
|
@@ -642,55 +647,55 @@ const multiplyPixelRatio = (e) => {
|
|
|
642
647
|
blinkColors: t.blinkColors,
|
|
643
648
|
type: "ShipName"
|
|
644
649
|
};
|
|
645
|
-
drawLabel(e, d, shipLabels.value, mapInstance$7.value);
|
|
650
|
+
mapInstance$7.value && drawLabel(e, d, shipLabels.value, mapInstance$7.value);
|
|
646
651
|
}, drawCurrentShipShapeModel = (e, t) => {
|
|
647
|
-
let
|
|
648
|
-
t <= 14 ?
|
|
649
|
-
const
|
|
650
|
-
let
|
|
651
|
-
return
|
|
652
|
+
let o = 0;
|
|
653
|
+
t <= 14 ? o = 0.058 : t === 15 ? o = 0.12 : t === 16 ? o = 0.22 : t === 17 ? o = 0.435 : t === 18 && (o = 0.857);
|
|
654
|
+
const n = e.length / 4 * o, l = e.breadth * o;
|
|
655
|
+
let r = cloneDeep(shipShapeModel);
|
|
656
|
+
return r = r.map(([i, c]) => [i * l, c * n]), r;
|
|
652
657
|
}, getShipDirectPath = (e) => {
|
|
653
|
-
const { speed: t, hdg:
|
|
654
|
-
let
|
|
655
|
-
if (t && t > 1 && (
|
|
656
|
-
for (let
|
|
657
|
-
const c = speedCondition[
|
|
658
|
+
const { speed: t, hdg: o, cog: n } = e;
|
|
659
|
+
let l = "", r = null;
|
|
660
|
+
if (t && t > 1 && (o !== null && o != 511 && n !== null ? n - o >= 3 ? l = "left" : n - o <= -3 ? l = "right" : l = "front" : l = "front", l && t))
|
|
661
|
+
for (let i = 0; i < speedCondition.length; i++) {
|
|
662
|
+
const c = speedCondition[i];
|
|
658
663
|
if (t >= c[0] && t < c[1]) {
|
|
659
|
-
|
|
664
|
+
r = shipDirectPath[l][i];
|
|
660
665
|
break;
|
|
661
666
|
}
|
|
662
667
|
}
|
|
663
|
-
return
|
|
668
|
+
return r;
|
|
664
669
|
}, getShipCustomIcon = (e) => {
|
|
665
670
|
const t = [];
|
|
666
671
|
return e.existDevice && t.push(""), e.existMobile && t.push(""), e.existWaterGauge && t.push(""), t || [];
|
|
667
672
|
}, mapInstance$6 = ref(), renderShipSetInstance = (e) => mapInstance$6.value = e;
|
|
668
673
|
let shipsMarkerList = [], shipsVectorSource, largeAmountShipsSource;
|
|
669
674
|
const selectedShipData = ref(null), selectedShips = ref([]);
|
|
670
|
-
let selectShipsVectorSource;
|
|
675
|
+
let selectShipsVectorSource, hoveredFeature = null, hoveredFeatures = [];
|
|
671
676
|
const renderShips = (e) => {
|
|
672
|
-
var r, i,
|
|
677
|
+
var l, r, i, c;
|
|
673
678
|
if (!mapInstance$6.value || showTrackLayer.value) return;
|
|
674
|
-
const t = e.reduce((s, m) => (s.some((d) => d.id === m.id) || s.push(m), s), []),
|
|
679
|
+
const t = e.reduce((s, m) => (s.some((d) => d.id === m.id) || s.push(m), s), []), o = Math.round(Number(mapInstance$6.value.getView().getZoom()));
|
|
675
680
|
if (selectedShipData.value && nextTick(() => {
|
|
676
681
|
selectSingleShipMarker(selectedShipData.value);
|
|
677
682
|
}).then((s) => {
|
|
678
|
-
}), !
|
|
679
|
-
const
|
|
683
|
+
}), !o || o < mapZoom.shipGreenDotMax) return;
|
|
684
|
+
const n = [...t, ...selectedShips.value].reduce((s, m) => (s.some((d) => d.id === m.id) || s.push(m), s), []);
|
|
680
685
|
if (allShips.value.forEach((s) => {
|
|
681
686
|
var m;
|
|
682
|
-
!
|
|
683
|
-
}), allShips.value =
|
|
684
|
-
return
|
|
687
|
+
!n.some((d) => d.id === s.id) && ((m = s.blinkColors) != null && m.length) && checkBlinkLabelExist(mapInstance$6.value, shipLabels.value, s.id);
|
|
688
|
+
}), allShips.value = n, !hiddenOrther.value)
|
|
689
|
+
return o >= mapZoom.shipGreenDotMax && o < mapZoom.shipModelMin ? ((l = shipsLayer.value) == null || l.setVisible(!1), (r = largeAmountShipsLayer.value) == null || r.setVisible(!0), renderLargeAmountShips(allShips.value)) : ((i = largeAmountShipsLayer.value) == null || i.setVisible(!1), (c = shipsLayer.value) == null || c.setVisible(!0), renderShipsMarker(allShips.value));
|
|
685
690
|
}, renderLargeAmountShips = (e) => {
|
|
686
691
|
if (!mapInstance$6.value) return;
|
|
687
|
-
const t = e.map((
|
|
692
|
+
const t = e.map((o) => ({
|
|
688
693
|
type: "Feature",
|
|
689
694
|
geometry: {
|
|
690
695
|
type: "Point",
|
|
691
|
-
coordinates: [
|
|
696
|
+
coordinates: [o.lon, o.lat]
|
|
692
697
|
},
|
|
693
|
-
properties:
|
|
698
|
+
properties: o
|
|
694
699
|
}));
|
|
695
700
|
return largeAmountShipsSource == null || largeAmountShipsSource.clear(), largeAmountShipsSource = new VectorSource({
|
|
696
701
|
features: new GeoJSON().readFeatures({
|
|
@@ -724,70 +729,86 @@ const renderShips = (e) => {
|
|
|
724
729
|
// 将值旋转 180 度
|
|
725
730
|
],
|
|
726
731
|
"shape-scale": [0.8, 1.2],
|
|
727
|
-
|
|
728
|
-
|
|
732
|
+
// 边框颜色为条件判断,悬浮时显示红色,否则黑色
|
|
733
|
+
"shape-stroke-color": [
|
|
734
|
+
"case",
|
|
735
|
+
["==", ["get", "hover"], 0],
|
|
736
|
+
"#000000",
|
|
737
|
+
["==", ["get", "hover"], 1],
|
|
738
|
+
"#FF0000",
|
|
739
|
+
"#000000"
|
|
740
|
+
// 默认颜色(黑色)
|
|
741
|
+
],
|
|
729
742
|
"shape-stroke-width": 0.5
|
|
730
|
-
// 边框宽度为0.5px
|
|
731
743
|
}
|
|
732
744
|
}), mapInstance$6.value.addLayer(largeAmountShipsLayer.value), largeAmountShipsLayer.value;
|
|
733
745
|
}, renderShipsMarker = (e) => {
|
|
734
|
-
var
|
|
746
|
+
var o;
|
|
735
747
|
if (!mapInstance$6.value) return;
|
|
736
748
|
deleteAllShipMarkers();
|
|
737
749
|
let t = convertShipMapData(e);
|
|
738
750
|
if (t = customFilterShips(t), !!(t != null && t.length))
|
|
739
|
-
return t.forEach((
|
|
740
|
-
const
|
|
741
|
-
geometry: new Point(fromLonLat(
|
|
751
|
+
return t.forEach((n, l) => {
|
|
752
|
+
const r = [n.lon, n.lat], i = new Feature({
|
|
753
|
+
geometry: new Point(fromLonLat(r))
|
|
742
754
|
}), c = 1;
|
|
743
|
-
|
|
755
|
+
i.set("clickGeometry", new Circle(fromLonLat(r), c)), i.set("data", n), i.set("index", l), i.setStyle(
|
|
744
756
|
setShipStyle(!1)
|
|
745
757
|
), shipsMarkerList.push({
|
|
746
|
-
ship:
|
|
747
|
-
lonlat:
|
|
748
|
-
feature:
|
|
758
|
+
ship: n,
|
|
759
|
+
lonlat: r,
|
|
760
|
+
feature: i
|
|
749
761
|
});
|
|
750
762
|
}), shipsVectorSource = new VectorSource({
|
|
751
|
-
features: shipsMarkerList.map((
|
|
763
|
+
features: shipsMarkerList.map((n) => n.feature)
|
|
752
764
|
}), shipsLayer.value = new VectorLayer({
|
|
753
765
|
source: shipsVectorSource,
|
|
754
766
|
zIndex: 100
|
|
755
|
-
}), (
|
|
767
|
+
}), (o = mapInstance$6.value) == null || o.addLayer(shipsLayer.value), shipsLayer.value;
|
|
756
768
|
}, onShipsMarkerHover = () => {
|
|
757
769
|
var o;
|
|
758
|
-
let e =
|
|
759
|
-
const
|
|
760
|
-
(o = mapInstance$6.value) == null || o.on("pointermove", function(
|
|
761
|
-
var s, m
|
|
762
|
-
|
|
763
|
-
|
|
770
|
+
let e = 0;
|
|
771
|
+
const t = 300;
|
|
772
|
+
(o = mapInstance$6.value) == null || o.on("pointermove", function(n) {
|
|
773
|
+
var c, s, m;
|
|
774
|
+
if (showDrawLayer.value) return;
|
|
775
|
+
const l = Date.now();
|
|
776
|
+
if (l - e < t)
|
|
764
777
|
return;
|
|
765
|
-
|
|
766
|
-
const
|
|
767
|
-
if (
|
|
768
|
-
if (
|
|
769
|
-
|
|
770
|
-
|
|
771
|
-
|
|
772
|
-
setShipStyle(
|
|
773
|
-
);
|
|
778
|
+
e = l;
|
|
779
|
+
const r = (c = mapInstance$6.value) == null ? void 0 : c.forEachFeatureAtPixel(n.pixel, (d) => d), i = (s = mapInstance$6.value) == null ? void 0 : s.getTargetElement();
|
|
780
|
+
if (i && (i.style.cursor = r ? "pointer" : ""), hoveredFeature !== r) {
|
|
781
|
+
if (hoveredFeature) {
|
|
782
|
+
hoveredFeature.set("hover", 0);
|
|
783
|
+
const d = hoveredFeature.get("data");
|
|
784
|
+
d != null && d.mmsi && hoveredFeature.setStyle(
|
|
785
|
+
setShipStyle(!1, !1)
|
|
786
|
+
), hoveredFeature = null;
|
|
774
787
|
}
|
|
775
|
-
if (
|
|
776
|
-
|
|
777
|
-
|
|
778
|
-
|
|
779
|
-
|
|
788
|
+
if (r) {
|
|
789
|
+
hoveredFeature = r, r.set("hover", 1);
|
|
790
|
+
const d = r.get("data");
|
|
791
|
+
if (!(d != null && d.mmsi)) return;
|
|
792
|
+
hoveredFeatures.push(r), r.setStyle(
|
|
793
|
+
setShipStyle(((m = selectedShipData.value) == null ? void 0 : m.id) === d.id, !0)
|
|
780
794
|
);
|
|
781
795
|
} else
|
|
782
|
-
|
|
796
|
+
hoveredFeatures.forEach((d) => {
|
|
797
|
+
var h;
|
|
798
|
+
d.set("hover", 0);
|
|
799
|
+
const u = d.get("data");
|
|
800
|
+
u != null && u.mmsi && d.setStyle(
|
|
801
|
+
setShipStyle(((h = selectedShipData.value) == null ? void 0 : h.id) === u.id, !1)
|
|
802
|
+
);
|
|
803
|
+
}), hoveredFeatures = [];
|
|
783
804
|
}
|
|
784
805
|
});
|
|
785
806
|
}, customFilterShips = (e) => {
|
|
786
807
|
let t = cloneDeep(e);
|
|
787
|
-
return t = t.filter((
|
|
788
|
-
var
|
|
789
|
-
const
|
|
790
|
-
return (switchBtnShow.value.camera || switchBtnShow.value.mobile || switchBtnShow.value.waterGauge) && ((
|
|
808
|
+
return t = t.filter((o) => {
|
|
809
|
+
var l;
|
|
810
|
+
const n = getFilterItem(o).every(({ btnShow: r, value: i }) => r ? !!i : !0);
|
|
811
|
+
return (switchBtnShow.value.camera || switchBtnShow.value.mobile || switchBtnShow.value.waterGauge) && ((l = selectedShipData.value) == null ? void 0 : l.id) === o.id && clearSelectFeature(), n;
|
|
791
812
|
}), t;
|
|
792
813
|
}, getFilterItem = (e) => [
|
|
793
814
|
{ btnShow: switchBtnShow.value.camera, value: e == null ? void 0 : e.existDevice },
|
|
@@ -798,40 +819,56 @@ const renderShips = (e) => {
|
|
|
798
819
|
e.feature && (shipsVectorSource == null || shipsVectorSource.removeFeature(e.feature));
|
|
799
820
|
}), clearAllInterval(), shipsMarkerList = [];
|
|
800
821
|
}, selectSingleShipMarker = (e) => {
|
|
801
|
-
var
|
|
822
|
+
var r;
|
|
802
823
|
if (!mapInstance$6.value) return;
|
|
803
824
|
const t = cloneDeep(selectSingleShipData.value);
|
|
804
825
|
selectSingleShipData.value = convertShipMapData(e);
|
|
805
|
-
const
|
|
806
|
-
geometry: new Point(fromLonLat(
|
|
826
|
+
const o = [selectSingleShipData.value.lon, selectSingleShipData.value.lat], n = new Feature({
|
|
827
|
+
geometry: new Point(fromLonLat(o))
|
|
807
828
|
});
|
|
808
|
-
|
|
829
|
+
if (n.set("data", selectSingleShipData.value), shipsLayer.value) {
|
|
830
|
+
const i = shipsLayer.value.getSource();
|
|
831
|
+
i && i.forEachFeature((c) => {
|
|
832
|
+
var s, m;
|
|
833
|
+
((s = c.get("data")) == null ? void 0 : s.id) === ((m = selectSingleShipData.value) == null ? void 0 : m.id) && c.set("data", selectSingleShipData.value);
|
|
834
|
+
});
|
|
835
|
+
}
|
|
836
|
+
n.setStyle(
|
|
809
837
|
setShipStyle(!0)
|
|
810
838
|
), shipsMarkerList.push({
|
|
811
839
|
ship: selectSingleShipData.value,
|
|
812
|
-
lonlat:
|
|
813
|
-
feature:
|
|
840
|
+
lonlat: o,
|
|
841
|
+
feature: n
|
|
814
842
|
}), selectShipsVectorSource == null || selectShipsVectorSource.clear(), selectShipsVectorSource = new VectorSource({
|
|
815
|
-
features: [
|
|
843
|
+
features: [n]
|
|
816
844
|
}), selectShipsLayer.value = new VectorLayer({
|
|
817
|
-
source: selectShipsVectorSource
|
|
845
|
+
source: selectShipsVectorSource,
|
|
846
|
+
updateWhileInteracting: !0
|
|
818
847
|
}), shipsVectorSource && setVisibleFeatureById(shipsVectorSource, selectSingleShipData.value.id, !0);
|
|
819
|
-
const
|
|
820
|
-
return
|
|
821
|
-
},
|
|
822
|
-
|
|
823
|
-
|
|
824
|
-
|
|
848
|
+
const l = (r = shipsLayer.value) == null ? void 0 : r.getSource();
|
|
849
|
+
return l && (t && setVisibleFeatureById(l, t.id, !0), setVisibleFeatureById(l, selectSingleShipData.value.id, !1)), mapInstance$6.value.addLayer(selectShipsLayer.value), selectShipsLayer.value.setVisible(!0), hideAllHoveredShips(), selectShipsLayer.value;
|
|
850
|
+
}, hideAllHoveredShips = () => {
|
|
851
|
+
hoveredFeatures == null || hoveredFeatures.forEach((e) => {
|
|
852
|
+
var o;
|
|
853
|
+
const t = e == null ? void 0 : e.get("data");
|
|
854
|
+
t && e && e.setStyle(
|
|
855
|
+
setShipStyle(((o = selectedShipData.value) == null ? void 0 : o.id) === t.id, !1)
|
|
856
|
+
);
|
|
825
857
|
});
|
|
826
|
-
},
|
|
827
|
-
|
|
858
|
+
}, setVisibleFeatureById = (e, t, o) => {
|
|
859
|
+
e && e.forEachFeature((n) => {
|
|
860
|
+
const l = n.get("data");
|
|
861
|
+
l && l.id === t && n.setStyle(o ? setShipStyle(!1, !1) : setBlankStyle());
|
|
862
|
+
});
|
|
863
|
+
}, findShip = (e, t, o = !0) => {
|
|
864
|
+
var l, r, i, c, s;
|
|
828
865
|
if (!e || !mapInstance$6.value) return;
|
|
829
|
-
const
|
|
866
|
+
const n = (i = (r = (l = shipsLayer.value) == null ? void 0 : l.getSource()) == null ? void 0 : r.getFeatures()) == null ? void 0 : i.find((m) => {
|
|
830
867
|
var d;
|
|
831
868
|
return ((d = m.get("data")) == null ? void 0 : d.id) === e;
|
|
832
869
|
});
|
|
833
|
-
if (
|
|
834
|
-
selectedShipData.value =
|
|
870
|
+
if (n)
|
|
871
|
+
selectedShipData.value = n.get("data");
|
|
835
872
|
else if (t && t.lon && t.lat)
|
|
836
873
|
selectedShipData.value = t;
|
|
837
874
|
else {
|
|
@@ -841,7 +878,7 @@ const renderShips = (e) => {
|
|
|
841
878
|
if (selectedShips.value.some((m) => {
|
|
842
879
|
var d;
|
|
843
880
|
return m.id === ((d = selectedShipData.value) == null ? void 0 : d.id);
|
|
844
|
-
}) || selectedShips.value.push(selectedShipData.value),
|
|
881
|
+
}) || selectedShips.value.push(selectedShipData.value), o && ((c = selectedShipData.value) != null && c.lon) && ((s = selectedShipData.value) != null && s.lat)) {
|
|
845
882
|
const m = mapInstance$6.value.getView(), d = new Point([selectedShipData.value.lon, selectedShipData.value.lat]);
|
|
846
883
|
m.setCenter(transform(d.getCoordinates(), projection.data, projection.mercator));
|
|
847
884
|
const u = m.getZoom(), h = u < mapZoom.findShipMin ? mapZoom.findShip : u;
|
|
@@ -849,7 +886,7 @@ const renderShips = (e) => {
|
|
|
849
886
|
}
|
|
850
887
|
return setTimeout(() => {
|
|
851
888
|
t && selectSingleShipMarker(t);
|
|
852
|
-
}, 50),
|
|
889
|
+
}, 50), n;
|
|
853
890
|
}, clearSelectFeature = () => {
|
|
854
891
|
var e;
|
|
855
892
|
if (selectedShipData.value && shipsVectorSource && selectSingleShipData.value) {
|
|
@@ -875,146 +912,147 @@ const renderShips = (e) => {
|
|
|
875
912
|
}, rerenderShip = () => {
|
|
876
913
|
renderShips(allShips.value);
|
|
877
914
|
}, clearShipData = (e = !0) => {
|
|
878
|
-
shipsVectorSource == null || shipsVectorSource.clear(), shipsMarkerList = [], e && (selectShipsVectorSource == null || selectShipsVectorSource.clear());
|
|
879
|
-
}, labelAlpha = 0.8, pixelRatio = window.devicePixelRatio || 1, labelFont = `500 ${12 * pixelRatio}px Arial`, labelOutSize = 2 * pixelRatio, labelHeight = 10 * pixelRatio, fillRectRadius = (e, t, n,
|
|
880
|
-
e.beginPath(), e.moveTo(t +
|
|
915
|
+
shipsVectorSource == null || shipsVectorSource.clear(), shipsMarkerList = [], selectedShips.value = [], shipLabels.value = [], e && (selectShipsVectorSource == null || selectShipsVectorSource.clear());
|
|
916
|
+
}, labelAlpha = 0.8, pixelRatio = window.devicePixelRatio || 1, labelFont = `500 ${12 * pixelRatio}px Arial`, labelOutSize = 2 * pixelRatio, labelHeight = 10 * pixelRatio, fillRectRadius = (e, t, o, n, l, r, i = 4) => {
|
|
917
|
+
e.beginPath(), e.moveTo(t + i, o), e.arcTo(t + n, o, t + n, o + i, i), e.arcTo(t + n, o + l, t + n - i, o + l, i), e.arcTo(t, o + l, t, o + l - i, i), e.arcTo(t, o, t + i, o, i), e.closePath(), e.fillStyle = r, e.fill();
|
|
881
918
|
}, getPixelFromCoordinate = (e) => {
|
|
882
919
|
if (!e || e.length === 0)
|
|
883
920
|
throw new Error("Points array is empty or invalid.");
|
|
884
|
-
let t = 1 / 0,
|
|
885
|
-
for (const [
|
|
886
|
-
|
|
887
|
-
return [t,
|
|
921
|
+
let t = 1 / 0, o = 1 / 0, n = -1 / 0, l = -1 / 0;
|
|
922
|
+
for (const [r, i] of e)
|
|
923
|
+
r < t && (t = r), i < o && (o = i), r > n && (n = r), i > l && (l = i);
|
|
924
|
+
return [t, o, n, l];
|
|
888
925
|
}, calculatePolygonCentroid = (e) => {
|
|
889
926
|
if (!Array.isArray(e) || e.length < 3)
|
|
890
927
|
throw new Error("A polygon must have at least 3 coordinates.");
|
|
891
|
-
let t = 0,
|
|
892
|
-
const
|
|
893
|
-
for (let c = 0; c <
|
|
928
|
+
let t = 0, o = 0, n = 0;
|
|
929
|
+
const l = e.length;
|
|
930
|
+
for (let c = 0; c < l - 1; c++) {
|
|
894
931
|
const [s, m] = e[c], [d, u] = e[c + 1], h = s * u - d * m;
|
|
895
|
-
|
|
932
|
+
n += h, t += (s + d) * h, o += (m + u) * h;
|
|
896
933
|
}
|
|
897
|
-
if (
|
|
934
|
+
if (n *= 0.5, n === 0)
|
|
898
935
|
throw new Error("多边形面积为零");
|
|
899
|
-
const
|
|
900
|
-
return [
|
|
936
|
+
const r = t / (6 * n), i = o / (6 * n);
|
|
937
|
+
return [r, i];
|
|
901
938
|
}, rotateShapeModel = (e, t) => {
|
|
902
|
-
const [
|
|
939
|
+
const [o, n] = calculatePolygonCentroid(e), l = t * Math.PI / 180, r = Math.cos(l), i = Math.sin(l);
|
|
903
940
|
return e.map(([c, s]) => {
|
|
904
|
-
const m = c -
|
|
941
|
+
const m = c - o, d = s - n, u = m * r - d * i + o, h = m * i + d * r + n;
|
|
905
942
|
return [u, h];
|
|
906
943
|
});
|
|
907
944
|
}, getTopLeftPoint = (e) => [e[0], e[3]], getBottomLeftPoint = (e) => [e[2], e[3]], getBottomRightPoint = (e) => [e[2], e[1]], getTopRighttPoint = (e) => [e[0], e[1]];
|
|
908
|
-
function calculateBounds(e, t,
|
|
909
|
-
let
|
|
945
|
+
function calculateBounds(e, t, o, n, l) {
|
|
946
|
+
let r, i, c, s;
|
|
910
947
|
const m = e[0], d = e[1];
|
|
911
948
|
switch (t) {
|
|
912
949
|
case 0:
|
|
913
|
-
|
|
950
|
+
r = m + l, i = r + o, s = d - l, c = s - n;
|
|
914
951
|
break;
|
|
915
952
|
case 1:
|
|
916
|
-
|
|
953
|
+
r = m + l, i = r + o, s = d + n / 2, c = s - n;
|
|
917
954
|
break;
|
|
918
955
|
case 2:
|
|
919
|
-
|
|
956
|
+
r = m + l, i = r + o, s = d + l + n, c = s - n;
|
|
920
957
|
break;
|
|
921
958
|
case 3:
|
|
922
|
-
|
|
959
|
+
r = m - o / 2, i = r + o, s = d + l + n, c = s - n;
|
|
923
960
|
break;
|
|
924
961
|
case 4:
|
|
925
|
-
|
|
962
|
+
i = m, r = i - o, s = d + l + n, c = s - n;
|
|
926
963
|
break;
|
|
927
964
|
case 5:
|
|
928
|
-
|
|
965
|
+
i = m - l, r = i - o, s = d + n / 2, c = s - n;
|
|
929
966
|
break;
|
|
930
967
|
case 6:
|
|
931
|
-
|
|
968
|
+
i = m, r = i - o, s = d - l, c = s - n;
|
|
932
969
|
break;
|
|
933
970
|
case 7:
|
|
934
|
-
|
|
971
|
+
r = m - o / 2, i = r + o, s = d - l, c = s - n;
|
|
935
972
|
}
|
|
936
|
-
if (!(!
|
|
937
|
-
return [Math.min(
|
|
973
|
+
if (!(!r || !c || !i || !s))
|
|
974
|
+
return [Math.min(r, i), Math.min(c, s), Math.max(r, i), Math.max(c, s) + 1];
|
|
938
975
|
}
|
|
939
|
-
function calculateAnchorPoint(e, t,
|
|
940
|
-
const
|
|
976
|
+
function calculateAnchorPoint(e, t, o = 70, n = 20, l = 20) {
|
|
977
|
+
const r = [0, 0];
|
|
941
978
|
switch (t) {
|
|
942
979
|
case 0:
|
|
943
|
-
|
|
980
|
+
r[0] = e[0] + l, r[1] = e[1] - l - n / 2;
|
|
944
981
|
break;
|
|
945
982
|
case 1:
|
|
946
|
-
|
|
983
|
+
r[0] = e[0] + l, r[1] = e[1];
|
|
947
984
|
break;
|
|
948
985
|
case 2:
|
|
949
|
-
|
|
986
|
+
r[0] = e[0] + l, r[1] = e[1] + l + n / 2;
|
|
950
987
|
break;
|
|
951
988
|
case 3:
|
|
952
|
-
|
|
989
|
+
r[0] = e[0], r[1] = e[1] + l + n / 4;
|
|
953
990
|
break;
|
|
954
991
|
case 4:
|
|
955
|
-
|
|
992
|
+
r[0] = Math.max(e[0] - l, e[0] - o / 2), r[1] = e[1] + l + n / 4;
|
|
956
993
|
break;
|
|
957
994
|
case 5:
|
|
958
|
-
|
|
995
|
+
r[0] = e[0] - l, r[1] = e[1];
|
|
959
996
|
break;
|
|
960
997
|
case 6:
|
|
961
|
-
|
|
998
|
+
r[0] = Math.max(e[0] - l, e[0] - o / 2), r[1] = e[1] - l - n / 4;
|
|
962
999
|
break;
|
|
963
1000
|
case 7:
|
|
964
|
-
|
|
1001
|
+
r[0] = e[0], r[1] = e[1] - l - n / 4;
|
|
965
1002
|
}
|
|
966
|
-
return
|
|
1003
|
+
return r;
|
|
967
1004
|
}
|
|
968
|
-
function drawLabelBody(e, t,
|
|
1005
|
+
function drawLabelBody(e, t, o) {
|
|
969
1006
|
if (!e) return;
|
|
970
1007
|
const {
|
|
971
|
-
font:
|
|
972
|
-
labelOutSize:
|
|
973
|
-
labelHeight:
|
|
974
|
-
center:
|
|
1008
|
+
font: n,
|
|
1009
|
+
labelOutSize: l = 2,
|
|
1010
|
+
labelHeight: r,
|
|
1011
|
+
center: i,
|
|
975
1012
|
text: c,
|
|
976
1013
|
id: s,
|
|
977
1014
|
leftIcon: m,
|
|
978
1015
|
shipColor: d,
|
|
979
1016
|
lineLength: u = 20,
|
|
980
|
-
selected: h
|
|
981
|
-
|
|
982
|
-
|
|
983
|
-
|
|
984
|
-
|
|
985
|
-
|
|
1017
|
+
selected: h,
|
|
1018
|
+
blinkColors: p
|
|
1019
|
+
} = o;
|
|
1020
|
+
e.save(), n && (e.font = n);
|
|
1021
|
+
let f = e.measureText(c).width + 4 * l;
|
|
1022
|
+
(m || d) && (f += r + 6 * l), e.restore();
|
|
1023
|
+
let v, g = 20, k = -1, M = r + 3 * l;
|
|
986
1024
|
if (u)
|
|
987
|
-
for (let
|
|
988
|
-
|
|
989
|
-
let
|
|
990
|
-
for (let
|
|
991
|
-
let
|
|
992
|
-
|
|
993
|
-
|
|
994
|
-
|
|
995
|
-
|
|
1025
|
+
for (let b = 0; b < 8; b++) {
|
|
1026
|
+
v = calculateBounds(i, b, f, M, u);
|
|
1027
|
+
let E = !1;
|
|
1028
|
+
for (let V = 0; V < t.length; ++V) {
|
|
1029
|
+
let F = t[V].bounds, $ = [
|
|
1030
|
+
F[0] - g,
|
|
1031
|
+
F[1] - g,
|
|
1032
|
+
F[2] + g,
|
|
1033
|
+
F[3] + g
|
|
996
1034
|
];
|
|
997
|
-
if (
|
|
998
|
-
|
|
1035
|
+
if (v && isOverlapping(v, $)) {
|
|
1036
|
+
E = !0;
|
|
999
1037
|
break;
|
|
1000
1038
|
}
|
|
1001
1039
|
}
|
|
1002
|
-
if (!
|
|
1003
|
-
|
|
1040
|
+
if (!E) {
|
|
1041
|
+
k = b;
|
|
1004
1042
|
break;
|
|
1005
1043
|
}
|
|
1006
1044
|
}
|
|
1007
1045
|
else
|
|
1008
|
-
|
|
1009
|
-
if (
|
|
1010
|
-
let
|
|
1046
|
+
k = 0, v = calculateBounds(i, k, f, M, u);
|
|
1047
|
+
if (((p == null ? void 0 : p.length) > 1 || h) && (k = 0, v = calculateBounds(i, k, f, M, u)), v && k > -1) {
|
|
1048
|
+
let b = getBottomLeftPoint(v), E = getTopRighttPoint(v);
|
|
1011
1049
|
return {
|
|
1012
|
-
center:
|
|
1013
|
-
x: calculateAnchorPoint(
|
|
1014
|
-
l:
|
|
1015
|
-
r:
|
|
1016
|
-
bounds:
|
|
1017
|
-
position:
|
|
1050
|
+
center: i,
|
|
1051
|
+
x: calculateAnchorPoint(i, k, f, M, u),
|
|
1052
|
+
l: E,
|
|
1053
|
+
r: b,
|
|
1054
|
+
bounds: v,
|
|
1055
|
+
position: k,
|
|
1018
1056
|
name: c,
|
|
1019
1057
|
id: s
|
|
1020
1058
|
};
|
|
@@ -1023,61 +1061,62 @@ function drawLabelBody(e, t, n) {
|
|
|
1023
1061
|
}
|
|
1024
1062
|
const drawText = (e, t) => {
|
|
1025
1063
|
if (!e) return;
|
|
1026
|
-
const { center:
|
|
1064
|
+
const { center: o, text: n, textColor: l, leftIcon: r, rightIcons: i, font: c } = t;
|
|
1027
1065
|
e.save(), e.setTransform(1, 0, 0, 1, 0, 0);
|
|
1028
|
-
let [s, m] =
|
|
1029
|
-
if (
|
|
1066
|
+
let [s, m] = o;
|
|
1067
|
+
if (r) {
|
|
1030
1068
|
e.font = `${18 * pixelRatio}px map-iconfont`;
|
|
1031
|
-
let d = getIconFont(
|
|
1032
|
-
e.fillStyle =
|
|
1069
|
+
let d = getIconFont(r.icon);
|
|
1070
|
+
e.fillStyle = r.color, e.fillText(d, s + labelOutSize - 3 * pixelRatio, m + 2.6 * pixelRatio), s += 23 * pixelRatio;
|
|
1033
1071
|
}
|
|
1034
|
-
if (
|
|
1072
|
+
if (i != null && i.length) {
|
|
1035
1073
|
e.font = `${12 * pixelRatio}px map-iconfont`, e.fillStyle = "#3370ff";
|
|
1036
|
-
const d = e.measureText(
|
|
1037
|
-
|
|
1074
|
+
const d = e.measureText(n).width + 6 * pixelRatio;
|
|
1075
|
+
i.forEach((u, h) => {
|
|
1038
1076
|
const p = getIconFont(u), f = 20 * pixelRatio * h;
|
|
1039
1077
|
e.fillText(p, s + d + f, m);
|
|
1040
1078
|
});
|
|
1041
1079
|
}
|
|
1042
|
-
e.font = c || labelFont, e.fillStyle =
|
|
1080
|
+
e.font = c || labelFont, e.fillStyle = l, e.fillText(n, s + 2, m), e.restore();
|
|
1043
1081
|
}, drawPolygon = (e, t) => {
|
|
1044
1082
|
let {
|
|
1045
|
-
points:
|
|
1046
|
-
strokeColor:
|
|
1047
|
-
fillColor:
|
|
1048
|
-
shouldClosePath:
|
|
1049
|
-
translation:
|
|
1083
|
+
points: o,
|
|
1084
|
+
strokeColor: n,
|
|
1085
|
+
fillColor: l,
|
|
1086
|
+
shouldClosePath: r,
|
|
1087
|
+
translation: i,
|
|
1050
1088
|
rotation: c,
|
|
1051
1089
|
rotationCenter: s,
|
|
1052
1090
|
scale: m,
|
|
1053
1091
|
globalAlpha: d
|
|
1054
1092
|
} = t;
|
|
1055
|
-
if (d || (d = 1),
|
|
1056
|
-
e.save(), e.beginPath(), c && c !== 0 && s == null && e.rotate(c),
|
|
1057
|
-
for (let u = 1; u <
|
|
1058
|
-
e.lineTo(
|
|
1059
|
-
|
|
1093
|
+
if (d || (d = 1), o && e) {
|
|
1094
|
+
e.save(), e.beginPath(), c && c !== 0 && s == null && e.rotate(c), i && e.translate(i[0], i[1]), c && (s != null && s.length) && e.rotate(c), m && e.scale(m, m), e.moveTo(o[0][0], o[0][1]);
|
|
1095
|
+
for (let u = 1; u < o.length; u++)
|
|
1096
|
+
e.lineTo(o[u][0], o[u][1]);
|
|
1097
|
+
r && e.closePath(), n && (e.strokeStyle = n, e.stroke()), l && r && (d && (e.globalAlpha = d), e.fillStyle = l, e.fill()), e.restore();
|
|
1060
1098
|
}
|
|
1061
|
-
}, intervalIds = {}, drawLabel = (e, t,
|
|
1062
|
-
var
|
|
1063
|
-
let { center:
|
|
1064
|
-
if (
|
|
1099
|
+
}, intervalIds = {}, drawLabel = (e, t, o, n) => {
|
|
1100
|
+
var f, v, g, k, M, b, E, V;
|
|
1101
|
+
let { center: l, id: r, text: i, color: c, textColor: s, bgColor: m, leftIcon: d, rightIcons: u, type: h, blinkColors: p } = t;
|
|
1102
|
+
if (l && i) {
|
|
1065
1103
|
const F = {
|
|
1066
1104
|
font: labelFont,
|
|
1067
1105
|
labelOutSize,
|
|
1068
1106
|
labelHeight,
|
|
1069
|
-
center:
|
|
1070
|
-
text:
|
|
1071
|
-
id:
|
|
1107
|
+
center: l,
|
|
1108
|
+
text: i,
|
|
1109
|
+
id: r,
|
|
1072
1110
|
leftIcon: d,
|
|
1111
|
+
blinkColors: p,
|
|
1073
1112
|
selected: t.selected
|
|
1074
1113
|
};
|
|
1075
|
-
(
|
|
1076
|
-
const
|
|
1077
|
-
if (
|
|
1078
|
-
const { x:
|
|
1079
|
-
|
|
1080
|
-
points: [
|
|
1114
|
+
(f = t.blinkColors) != null && f.length && t.fill && (m = t.fill, s = getForegroundColor(t.fill));
|
|
1115
|
+
const $ = drawLabelBody(e, o, F);
|
|
1116
|
+
if ($) {
|
|
1117
|
+
const { x: y, bounds: L, l: w } = $, S = [getTopLeftPoint(L), getBottomLeftPoint(L), getBottomRightPoint(L), getTopRighttPoint(L)];
|
|
1118
|
+
o.find((R) => R.name === i) || o.push($), drawPolygon(e, {
|
|
1119
|
+
points: [l, w],
|
|
1081
1120
|
strokeColor: c,
|
|
1082
1121
|
fillColor: "#000",
|
|
1083
1122
|
shouldClosePath: !0,
|
|
@@ -1087,140 +1126,146 @@ const drawText = (e, t) => {
|
|
|
1087
1126
|
scale: void 0,
|
|
1088
1127
|
globalAlpha: labelAlpha
|
|
1089
1128
|
}), u != null && u.length && u.forEach(() => {
|
|
1090
|
-
|
|
1129
|
+
S[1][0] += pixelRatio * 18, S[2][0] += pixelRatio * 18;
|
|
1091
1130
|
});
|
|
1092
|
-
const
|
|
1093
|
-
points:
|
|
1131
|
+
const C = {
|
|
1132
|
+
points: S,
|
|
1094
1133
|
strokeColor: c,
|
|
1095
1134
|
fillColor: m,
|
|
1096
1135
|
shouldClosePath: !0
|
|
1097
|
-
}, [
|
|
1098
|
-
center: [
|
|
1099
|
-
text:
|
|
1136
|
+
}, [P, x] = w, N = {
|
|
1137
|
+
center: [P, x + labelOutSize + labelHeight + 1],
|
|
1138
|
+
text: i,
|
|
1100
1139
|
textColor: s,
|
|
1101
1140
|
leftIcon: d,
|
|
1102
1141
|
rightIcons: u,
|
|
1103
1142
|
blinkColors: t.blinkColors
|
|
1104
1143
|
};
|
|
1105
|
-
if (drawPolygon(e,
|
|
1106
|
-
let
|
|
1107
|
-
const
|
|
1108
|
-
!!!((
|
|
1109
|
-
var
|
|
1110
|
-
return ((
|
|
1111
|
-
}) || (
|
|
1112
|
-
var
|
|
1113
|
-
return ((
|
|
1114
|
-
})) || hiddenOrther.value
|
|
1115
|
-
const
|
|
1116
|
-
|
|
1144
|
+
if (drawPolygon(e, C), drawText(e, N), t != null && t.blinkColors && t.blinkColors.length > 0) {
|
|
1145
|
+
let R = Date.now(), B = 0;
|
|
1146
|
+
const D = t.blinkColors;
|
|
1147
|
+
!!!((k = (g = (v = selectShipsLayer.value) == null ? void 0 : v.getSource()) == null ? void 0 : g.getFeatures()) != null && k.find((A) => {
|
|
1148
|
+
var O;
|
|
1149
|
+
return ((O = A.get("data")) == null ? void 0 : O.id) === t.id;
|
|
1150
|
+
}) || (E = (b = (M = shipsLayer.value) == null ? void 0 : M.getSource()) == null ? void 0 : b.getFeatures()) != null && E.find((A) => {
|
|
1151
|
+
var O;
|
|
1152
|
+
return ((O = A.get("data")) == null ? void 0 : O.id) === t.id;
|
|
1153
|
+
})) || hiddenOrther.value && ((V = selectSingleShipData.value) == null ? void 0 : V.id) !== t.id ? deleteLabelFromArray(o, t.id) : (intervalIds[t.id] && clearInterval(intervalIds[t.id]), intervalIds[t.id] = window.setInterval(() => {
|
|
1154
|
+
const A = Date.now();
|
|
1155
|
+
A - R >= 500 && (B = (B + 1) % D.length, R = A, C.fillColor = D[B], drawPolygon(e, C), N.textColor = getForegroundColor(C.fillColor), drawText(e, N)), checkBlinkLabelExist(n, o, t.id);
|
|
1117
1156
|
}, 500));
|
|
1118
1157
|
} else
|
|
1119
|
-
shipLabels.value.find((
|
|
1158
|
+
shipLabels.value.find((B) => B.name === i) && (clearInterval(intervalIds[t.id]), drawPolygon(e, C), drawText(e, N));
|
|
1120
1159
|
}
|
|
1121
1160
|
}
|
|
1122
1161
|
return null;
|
|
1123
|
-
}, checkBlinkLabelExist = (e, t,
|
|
1124
|
-
var
|
|
1125
|
-
const
|
|
1162
|
+
}, checkBlinkLabelExist = (e, t, o) => {
|
|
1163
|
+
var i, c, s, m, d, u, h;
|
|
1164
|
+
const n = shipsMarkerList == null ? void 0 : shipsMarkerList.some((p) => {
|
|
1126
1165
|
var f, v, g;
|
|
1127
|
-
return ((f = p.ship) == null ? void 0 : f.id) ===
|
|
1128
|
-
}),
|
|
1129
|
-
...((c = (
|
|
1166
|
+
return ((f = p.ship) == null ? void 0 : f.id) === o && ((g = (v = p.ship) == null ? void 0 : v.blinkColors) == null ? void 0 : g.length) > 0;
|
|
1167
|
+
}), l = [
|
|
1168
|
+
...((c = (i = shipsLayer.value) == null ? void 0 : i.getSource()) == null ? void 0 : c.getFeatures()) || [],
|
|
1130
1169
|
...((m = (s = selectShipsLayer.value) == null ? void 0 : s.getSource()) == null ? void 0 : m.getFeatures()) || []
|
|
1131
1170
|
].some((p) => {
|
|
1132
1171
|
const f = p.get("data");
|
|
1133
|
-
if ((f == null ? void 0 : f.id) ===
|
|
1172
|
+
if ((f == null ? void 0 : f.id) === o) {
|
|
1134
1173
|
const v = e == null ? void 0 : e.getView().calculateExtent();
|
|
1135
1174
|
if (!v) return !1;
|
|
1136
1175
|
const g = fromLonLat([f.lon, f.lat]);
|
|
1137
1176
|
return g[0] >= v[0] && g[0] <= v[2] && g[1] >= v[1] && g[1] <= v[3];
|
|
1138
1177
|
}
|
|
1139
1178
|
return !1;
|
|
1140
|
-
}),
|
|
1179
|
+
}), r = (u = (d = trackLineVectorSource.value) == null ? void 0 : d.getFeatures()) == null ? void 0 : u.some((p) => {
|
|
1141
1180
|
const f = p.get("data");
|
|
1142
|
-
return (f == null ? void 0 : f.id) ===
|
|
1181
|
+
return (f == null ? void 0 : f.id) === o;
|
|
1143
1182
|
});
|
|
1144
|
-
(
|
|
1183
|
+
(((h = shipsLayer.value) == null ? void 0 : h.getVisible()) === !1 && t.some((p) => {
|
|
1184
|
+
var f;
|
|
1185
|
+
return p.id !== ((f = selectSingleShipData.value) == null ? void 0 : f.id) && p.id === o;
|
|
1186
|
+
}) || (!r || !l) && (!l || !n)) && deleteLabelFromArray(e, t, o);
|
|
1145
1187
|
}, clearAllInterval = () => {
|
|
1146
1188
|
Object.keys(intervalIds).forEach((e) => {
|
|
1147
1189
|
clearInterval(e);
|
|
1148
1190
|
});
|
|
1149
|
-
}, deleteLabelFromArray = (e, t,
|
|
1150
|
-
var r, i,
|
|
1151
|
-
|
|
1152
|
-
|
|
1153
|
-
|
|
1154
|
-
|
|
1191
|
+
}, deleteLabelFromArray = (e, t, o) => {
|
|
1192
|
+
var l, r, i, c, s, m, d, u;
|
|
1193
|
+
clearInterval(intervalIds[o]);
|
|
1194
|
+
const n = t.findIndex((h) => h.id === o);
|
|
1195
|
+
if (n !== -1) {
|
|
1196
|
+
t.splice(n, 1);
|
|
1197
|
+
const h = (r = (l = shipsLayer.value) == null ? void 0 : l.getSource()) == null ? void 0 : r.getFeatures().find((f) => {
|
|
1155
1198
|
var v;
|
|
1156
|
-
return ((v = f.get("data")) == null ? void 0 : v.id) ===
|
|
1199
|
+
return ((v = f.get("data")) == null ? void 0 : v.id) === o;
|
|
1157
1200
|
});
|
|
1158
|
-
h && ((c = (
|
|
1201
|
+
h && ((c = (i = shipsLayer.value) == null ? void 0 : i.getSource()) == null || c.removeFeature(h));
|
|
1159
1202
|
const p = (m = (s = selectShipsLayer.value) == null ? void 0 : s.getSource()) == null ? void 0 : m.getFeatures().find((f) => {
|
|
1160
1203
|
var v;
|
|
1161
|
-
return ((v = f.get("data")) == null ? void 0 : v.id) ===
|
|
1204
|
+
return ((v = f.get("data")) == null ? void 0 : v.id) === o;
|
|
1162
1205
|
});
|
|
1163
1206
|
p && ((u = (d = selectShipsLayer.value) == null ? void 0 : d.getSource()) == null || u.removeFeature(p)), e && e.render();
|
|
1164
1207
|
}
|
|
1208
|
+
}, deleteLabelFromArrayById = () => {
|
|
1209
|
+
mapInstance$9.value && selectSingleShipData.value && deleteLabelFromArray(mapInstance$9.value, shipLabels.value, selectSingleShipData.value.id);
|
|
1165
1210
|
}, PI = Math.PI, a = 6378245, ee = 0.006693421622965943;
|
|
1166
1211
|
function transformLat(e, t) {
|
|
1167
|
-
let
|
|
1168
|
-
return
|
|
1212
|
+
let o = -100 + 2 * e + 3 * t + 0.2 * t * t + 0.1 * e * t + 0.2 * Math.sqrt(Math.abs(e));
|
|
1213
|
+
return o += (20 * Math.sin(6 * e * PI) + 20 * Math.sin(2 * e * PI)) * 2 / 3, o += (20 * Math.sin(t * PI) + 40 * Math.sin(t / 3 * PI)) * 2 / 3, o += (160 * Math.sin(t / 12 * PI) + 320 * Math.sin(t * PI / 30)) * 2 / 3, o;
|
|
1169
1214
|
}
|
|
1170
1215
|
function transformLng(e, t) {
|
|
1171
|
-
let
|
|
1172
|
-
return
|
|
1216
|
+
let o = 300 + e + 2 * t + 0.1 * e * e + 0.1 * e * t + 0.1 * Math.sqrt(Math.abs(e));
|
|
1217
|
+
return o += (20 * Math.sin(6 * e * PI) + 20 * Math.sin(2 * e * PI)) * 2 / 3, o += (20 * Math.sin(e * PI) + 40 * Math.sin(e / 3 * PI)) * 2 / 3, o += (150 * Math.sin(e / 12 * PI) + 300 * Math.sin(e / 30 * PI)) * 2 / 3, o;
|
|
1173
1218
|
}
|
|
1174
1219
|
function outOfChina(e, t) {
|
|
1175
1220
|
return !(e > 73.66 && e < 135.05 && t > 3.86 && t < 53.55);
|
|
1176
1221
|
}
|
|
1177
1222
|
function gcj02ToWgs84(e) {
|
|
1178
|
-
const [t,
|
|
1179
|
-
if (outOfChina(t,
|
|
1180
|
-
return `${t.toFixed(6)}, ${
|
|
1223
|
+
const [t, o] = e.split(",").map(Number);
|
|
1224
|
+
if (outOfChina(t, o))
|
|
1225
|
+
return `${t.toFixed(6)}, ${o.toFixed(6)}`;
|
|
1181
1226
|
{
|
|
1182
|
-
let
|
|
1183
|
-
const
|
|
1184
|
-
let
|
|
1185
|
-
|
|
1186
|
-
const c = Math.sqrt(
|
|
1187
|
-
|
|
1188
|
-
const s =
|
|
1189
|
-
return `${(t * 2 - m).toFixed(6)}, ${(
|
|
1227
|
+
let n = transformLat(t - 105, o - 35), l = transformLng(t - 105, o - 35);
|
|
1228
|
+
const r = o / 180 * PI;
|
|
1229
|
+
let i = Math.sin(r);
|
|
1230
|
+
i = 1 - ee * i * i;
|
|
1231
|
+
const c = Math.sqrt(i);
|
|
1232
|
+
n = n * 180 / (a * (1 - ee) / (i * c) * PI), l = l * 180 / (a / c * Math.cos(r) * PI);
|
|
1233
|
+
const s = o + n, m = t + l;
|
|
1234
|
+
return `${(t * 2 - m).toFixed(6)}, ${(o * 2 - s).toFixed(6)}`;
|
|
1190
1235
|
}
|
|
1191
1236
|
}
|
|
1192
1237
|
function calculateCirclePoints(e, t) {
|
|
1193
|
-
const
|
|
1194
|
-
|
|
1195
|
-
|
|
1196
|
-
|
|
1197
|
-
|
|
1198
|
-
],
|
|
1238
|
+
const o = fromLonLat(e), n = t * 1e3, l = [
|
|
1239
|
+
o[0] - n,
|
|
1240
|
+
o[1] - n,
|
|
1241
|
+
o[0] + n,
|
|
1242
|
+
o[1] + n
|
|
1243
|
+
], r = transformExtent(l, projection.mercator, projection.data);
|
|
1199
1244
|
return {
|
|
1200
|
-
leftTopPoint: { lng:
|
|
1201
|
-
rightTopPoint: { lng:
|
|
1202
|
-
rightBottomPoint: { lng:
|
|
1203
|
-
leftBottomPoint: { lng:
|
|
1245
|
+
leftTopPoint: { lng: r[0], lat: r[3] },
|
|
1246
|
+
rightTopPoint: { lng: r[2], lat: r[3] },
|
|
1247
|
+
rightBottomPoint: { lng: r[2], lat: r[1] },
|
|
1248
|
+
leftBottomPoint: { lng: r[0], lat: r[1] }
|
|
1204
1249
|
};
|
|
1205
1250
|
}
|
|
1206
1251
|
const equatorialCircumference = 2003750834e-2;
|
|
1207
1252
|
function lonLatToMercator(e) {
|
|
1208
1253
|
const t = e[0] * equatorialCircumference / 180;
|
|
1209
|
-
let
|
|
1210
|
-
return
|
|
1254
|
+
let o = Math.log(Math.tan((90 + e[1]) * Math.PI / 360)) / (Math.PI / 180);
|
|
1255
|
+
return o = o * equatorialCircumference / 180, [t, o];
|
|
1211
1256
|
}
|
|
1212
1257
|
function mercatorToLonLat(e, t = "lonlat") {
|
|
1213
|
-
const
|
|
1214
|
-
let
|
|
1215
|
-
return
|
|
1258
|
+
const o = { lon: 0, lat: 0 }, n = e[0] / equatorialCircumference * 180;
|
|
1259
|
+
let l = e[1] / equatorialCircumference * 180;
|
|
1260
|
+
return l = 180 / Math.PI * (2 * Math.atan(Math.exp(l * Math.PI / 180)) - Math.PI / 2), o.lon = n, o.lat = l, t === "lonlat" ? o : [n, l];
|
|
1216
1261
|
}
|
|
1217
1262
|
function calculateBoundingBox(e) {
|
|
1218
|
-
let t = 1 / 0,
|
|
1263
|
+
let t = 1 / 0, o = -1 / 0, n = 1 / 0, l = -1 / 0;
|
|
1219
1264
|
e.forEach((v) => {
|
|
1220
|
-
const [g,
|
|
1221
|
-
t = Math.min(t,
|
|
1265
|
+
const [g, k] = v;
|
|
1266
|
+
t = Math.min(t, k), o = Math.max(o, k), n = Math.min(n, g), l = Math.max(l, g);
|
|
1222
1267
|
});
|
|
1223
|
-
const
|
|
1268
|
+
const r = l - n, i = o - t, c = Math.max(r, i), s = (n + l) / 2, m = (t + o) / 2, d = c / 2, u = s - d, h = s + d, p = m - d, f = m + d;
|
|
1224
1269
|
return [h, p, u, f];
|
|
1225
1270
|
}
|
|
1226
1271
|
const transformUtils = {
|
|
@@ -1230,61 +1275,58 @@ const transformUtils = {
|
|
|
1230
1275
|
mercatorToLonLat,
|
|
1231
1276
|
calculateBoundingBox,
|
|
1232
1277
|
transform
|
|
1233
|
-
}, mapInstance$5 = ref(), renderTrackStyleSetInstance = (e) => mapInstance$5.value = e, stopIcon = "", stopColor = "#E31818", slowIcon = "", slowColor = "#1890FF", dropletsIcon = "", trackList$1 = ref([])
|
|
1234
|
-
|
|
1235
|
-
const
|
|
1236
|
-
|
|
1237
|
-
|
|
1238
|
-
|
|
1239
|
-
|
|
1240
|
-
|
|
1241
|
-
|
|
1242
|
-
|
|
1243
|
-
const [u, h] = formatUtils.convertSixHundredThousandToLatLng(m.lon, m.lat);
|
|
1244
|
-
m.lon = u, m.lat = h;
|
|
1278
|
+
}, mapInstance$5 = ref(), renderTrackStyleSetInstance = (e) => mapInstance$5.value = e, stopIcon = "", stopColor = "#E31818", slowIcon = "", slowColor = "#1890FF", dropletsIcon = "", trackList$1 = ref([]), renderTrackLine = (e, t, o) => {
|
|
1279
|
+
var s, m, d;
|
|
1280
|
+
const n = e[t];
|
|
1281
|
+
if (!n) return;
|
|
1282
|
+
allTracks.value[t] = n, trackList$1.value = [];
|
|
1283
|
+
const r = Math.max(1, Math.floor(n.length / 50)), i = n.filter((u, h) => h % r === 0);
|
|
1284
|
+
trackList$1.value = i.map((u, h) => {
|
|
1285
|
+
if (Number(u.lon) > 180 || Number(u.lat) > 180) {
|
|
1286
|
+
const [p, f] = formatUtils.convertSixHundredThousandToLatLng(u.lon, u.lat);
|
|
1287
|
+
u.lon = p, u.lat = f;
|
|
1245
1288
|
}
|
|
1246
|
-
return
|
|
1289
|
+
return u.center = [u.lon, u.lat], u.centerPoint = transformUtils.lonLatToMercator(u.center), u.id = t, u.index = h, u.time = hooks(u.createdAt).format("YYYY-MM-DD HH:mm:ss"), u;
|
|
1247
1290
|
});
|
|
1248
|
-
const
|
|
1249
|
-
if (
|
|
1250
|
-
const
|
|
1251
|
-
|
|
1291
|
+
const c = trackList$1.value.map((u) => u.centerPoint);
|
|
1292
|
+
if (c.length >= 2) {
|
|
1293
|
+
const u = new LineString(c), h = new Feature({ geometry: u });
|
|
1294
|
+
h.setStyle(
|
|
1252
1295
|
new Style({
|
|
1253
1296
|
stroke: new Stroke({
|
|
1254
|
-
color:
|
|
1297
|
+
color: o,
|
|
1255
1298
|
width: 2
|
|
1256
1299
|
})
|
|
1257
1300
|
})
|
|
1258
|
-
),
|
|
1259
|
-
const
|
|
1260
|
-
|
|
1261
|
-
const h = createAnimatedIconFeature(n, i);
|
|
1262
|
-
trackLineVectorSource.value = new VectorSource({
|
|
1301
|
+
), h.setId(t), h.set("type", "line"), (m = (s = shipTrackVectorLayer.value) == null ? void 0 : s.getSource()) == null || m.clear(), shipTrackLineFeatures.value = [];
|
|
1302
|
+
const p = shipTrackLineFeatures.value.findIndex((f) => f.getId() === t);
|
|
1303
|
+
p >= 0 ? shipTrackLineFeatures.value[p] = h : shipTrackLineFeatures.value.push(h), createAnimatedIconFeature(o, c), trackLineVectorSource.value = new VectorSource({
|
|
1263
1304
|
features: [...shipTrackLineFeatures.value]
|
|
1264
|
-
}),
|
|
1305
|
+
}), shipTrackVectorLayer.value = new VectorLayer({
|
|
1265
1306
|
source: trackLineVectorSource.value,
|
|
1266
|
-
zIndex: 102
|
|
1267
|
-
|
|
1307
|
+
zIndex: 102,
|
|
1308
|
+
updateWhileInteracting: !0
|
|
1309
|
+
}), renderPoint(o), (d = mapInstance$5.value) == null || d.addLayer(shipTrackVectorLayer.value);
|
|
1268
1310
|
}
|
|
1269
1311
|
}, handlePlay = (e, t) => {
|
|
1270
|
-
const
|
|
1271
|
-
playAnimation(
|
|
1312
|
+
const o = allTracks.value[String(e)];
|
|
1313
|
+
playAnimation(o.map((n) => [n.lon, n.lat]), t);
|
|
1272
1314
|
}, removeShipTrackLineFeatureByIndex = (e, t) => {
|
|
1273
1315
|
e >= 0 && e < shipTrackLineFeatures.value.length && (shipTrackLineFeatures.value.splice(e, 1), delete allTracks.value[t]), trackLineVectorSource.value = new VectorSource({
|
|
1274
1316
|
features: [...shipTrackLineFeatures.value]
|
|
1275
1317
|
}), shipTrackVectorLayer.value && shipTrackVectorLayer.value.setSource(trackLineVectorSource.value);
|
|
1276
1318
|
}, createAnimatedIconFeature = (e, t) => {
|
|
1277
|
-
const
|
|
1319
|
+
const o = new Feature({
|
|
1278
1320
|
geometry: new Point(fromLonLat([t[0][0], t[0][1]]))
|
|
1279
1321
|
// 初始位置
|
|
1280
|
-
}),
|
|
1322
|
+
}), n = new Style({
|
|
1281
1323
|
text: new Text({
|
|
1282
1324
|
font: "700 14px map-iconfont",
|
|
1283
1325
|
text: getIconFont(""),
|
|
1284
1326
|
fill: new Fill({ color: e })
|
|
1285
1327
|
})
|
|
1286
1328
|
});
|
|
1287
|
-
return
|
|
1329
|
+
return o.setStyle(n), o;
|
|
1288
1330
|
}, geoMarkerStyle = new Style({
|
|
1289
1331
|
text: new Text({
|
|
1290
1332
|
font: "700 20px map-iconfont",
|
|
@@ -1299,22 +1341,22 @@ const trackAnimating = ref(!1);
|
|
|
1299
1341
|
let distance = 0, lastTime = Date.now(), moveFeatureHandler = null;
|
|
1300
1342
|
const moveFeature = (e, t) => {
|
|
1301
1343
|
var u, h, p;
|
|
1302
|
-
const
|
|
1303
|
-
if (distance = (distance +
|
|
1344
|
+
const o = Number(50 * t), n = ((u = e.frameState) == null ? void 0 : u.time) ?? Date.now(), l = n - lastTime;
|
|
1345
|
+
if (distance = (distance + o * l / 1e6) % 2, lastTime = n, distance >= 1) {
|
|
1304
1346
|
stopAnimation();
|
|
1305
1347
|
return;
|
|
1306
1348
|
}
|
|
1307
|
-
const
|
|
1349
|
+
const r = linePath.getCoordinateAt(
|
|
1308
1350
|
distance > 1 ? 2 - distance : distance
|
|
1309
|
-
),
|
|
1351
|
+
), i = linePath.getCoordinateAt(
|
|
1310
1352
|
distance > 1 ? distance - 0.01 : distance
|
|
1311
1353
|
), c = linePath.getCoordinateAt(
|
|
1312
1354
|
distance > 1 ? 2 - distance : distance + 0.01
|
|
1313
1355
|
), m = getRotation(
|
|
1314
|
-
transformUtils.mercatorToLonLat(
|
|
1356
|
+
transformUtils.mercatorToLonLat(i, "array"),
|
|
1315
1357
|
transformUtils.mercatorToLonLat(c, "array")
|
|
1316
1358
|
) * Math.PI / 180;
|
|
1317
|
-
(h = geoMarkerStyle.getText()) == null || h.setRotation(m), position.setCoordinates(
|
|
1359
|
+
(h = geoMarkerStyle.getText()) == null || h.setRotation(m), position.setCoordinates(r);
|
|
1318
1360
|
const d = getVectorContext(e);
|
|
1319
1361
|
d.context_.save(), d.setStyle(geoMarkerStyle), d.drawGeometry(position), d.context_.restore(), (p = mapInstance$5.value) == null || p.render();
|
|
1320
1362
|
}, startAnimation = () => {
|
|
@@ -1324,7 +1366,7 @@ const moveFeature = (e, t) => {
|
|
|
1324
1366
|
var e;
|
|
1325
1367
|
trackAnimating.value && (trackAnimating.value = !1, geoMarker == null || geoMarker.setGeometry(void 0), moveFeatureHandler && vectorLayer && vectorLayer.un("postrender", moveFeatureHandler), vectorLayer && ((e = mapInstance$5.value) == null || e.removeLayer(vectorLayer)), vectorLayer = null, geoMarker = null);
|
|
1326
1368
|
}, playAnimation = (e, t) => {
|
|
1327
|
-
var
|
|
1369
|
+
var n;
|
|
1328
1370
|
trackAnimating.value && stopAnimation(), polyline = new Polyline({
|
|
1329
1371
|
factor: 1e6
|
|
1330
1372
|
}).writeGeometry(new LineString(e)), linePath = new Polyline({
|
|
@@ -1336,8 +1378,8 @@ const moveFeature = (e, t) => {
|
|
|
1336
1378
|
type: "icon",
|
|
1337
1379
|
geometry: new Point(linePath.getFirstCoordinate())
|
|
1338
1380
|
});
|
|
1339
|
-
const
|
|
1340
|
-
position =
|
|
1381
|
+
const o = startMarker.getGeometry();
|
|
1382
|
+
position = o ? o.clone() : new Point([0, 0]), geoMarker = new Feature({
|
|
1341
1383
|
type: "geoMarker",
|
|
1342
1384
|
style: geoMarkerStyle,
|
|
1343
1385
|
geometry: position
|
|
@@ -1345,13 +1387,13 @@ const moveFeature = (e, t) => {
|
|
|
1345
1387
|
source: new VectorSource({
|
|
1346
1388
|
features: [geoMarker]
|
|
1347
1389
|
})
|
|
1348
|
-
}), (
|
|
1390
|
+
}), (n = mapInstance$5.value) == null || n.addLayer(vectorLayer), moveFeatureHandler = (l) => moveFeature(l, t), startAnimation();
|
|
1349
1391
|
}, renderPoint = (e) => {
|
|
1350
1392
|
if (!mapInstance$5.value) return;
|
|
1351
1393
|
const t = trackList$1.value || [];
|
|
1352
1394
|
if (!(t && t.length > 1)) return [];
|
|
1353
|
-
const
|
|
1354
|
-
for (let c = 0; c <
|
|
1395
|
+
const o = { 16: 24, 17: 15, default: 4 }, n = [], l = t.length;
|
|
1396
|
+
for (let c = 0; c < l; c++) {
|
|
1355
1397
|
t[c].index = c;
|
|
1356
1398
|
const s = mapInstance$5.value.getPixelFromCoordinate(t[c].centerPoint);
|
|
1357
1399
|
if (s) {
|
|
@@ -1360,22 +1402,22 @@ const moveFeature = (e, t) => {
|
|
|
1360
1402
|
const d = mapInstance$5.value.getView().getZoom();
|
|
1361
1403
|
if (!d) return;
|
|
1362
1404
|
if (d > 15) {
|
|
1363
|
-
const h =
|
|
1405
|
+
const h = o[d] || o.default;
|
|
1364
1406
|
m = adjustBounds(m, [h, h]);
|
|
1365
1407
|
}
|
|
1366
1408
|
let u = !0;
|
|
1367
1409
|
if (t[c].state !== "0") {
|
|
1368
|
-
for (let h = 0; h <
|
|
1369
|
-
if (isOverlapping(m,
|
|
1410
|
+
for (let h = 0; h < n.length; h++)
|
|
1411
|
+
if (isOverlapping(m, n[h].bounds)) {
|
|
1370
1412
|
u = !1;
|
|
1371
1413
|
break;
|
|
1372
1414
|
}
|
|
1373
1415
|
}
|
|
1374
|
-
u && (t[c].bounds = m,
|
|
1416
|
+
u && (t[c].bounds = m, n.push(t[c]));
|
|
1375
1417
|
}
|
|
1376
1418
|
}
|
|
1377
|
-
const
|
|
1378
|
-
|
|
1419
|
+
const r = getIconStyle(stopIcon), i = getIconStyle(slowIcon);
|
|
1420
|
+
n.forEach((c, s) => {
|
|
1379
1421
|
var u, h;
|
|
1380
1422
|
const m = new Feature({
|
|
1381
1423
|
geometry: new Point(c.centerPoint)
|
|
@@ -1415,27 +1457,27 @@ const moveFeature = (e, t) => {
|
|
|
1415
1457
|
}),
|
|
1416
1458
|
zIndex: 99
|
|
1417
1459
|
}), v = [];
|
|
1418
|
-
Number(c.state) === 0 ? ((u = f.getText()) == null || u.setFill(new Fill({ color: stopColor })), v.push(
|
|
1460
|
+
Number(c.state) === 0 ? ((u = f.getText()) == null || u.setFill(new Fill({ color: stopColor })), v.push(r)) : Number(c.state) === 1 && ((h = f.getText()) == null || h.setFill(new Fill({ color: slowColor })), v.push(i)), v.push(f), p.setStyle(v), trackLineVectorSource.value.addFeature(p);
|
|
1419
1461
|
}
|
|
1420
|
-
}), renderArrow(
|
|
1462
|
+
}), renderArrow(n, e), renderIconPoint();
|
|
1421
1463
|
}, renderArrow = (e, t) => {
|
|
1422
|
-
const
|
|
1423
|
-
|
|
1424
|
-
for (let
|
|
1425
|
-
let
|
|
1426
|
-
const
|
|
1427
|
-
if (
|
|
1428
|
-
|
|
1464
|
+
const o = e.length;
|
|
1465
|
+
o || (e.push(trackList$1.value[0]), e.push(trackList$1.value[trackList$1.value.length - 1]));
|
|
1466
|
+
for (let n = 0; n < o - 1; n++) {
|
|
1467
|
+
let l;
|
|
1468
|
+
const r = e[n], i = (e[n + 1].index + r.index) / 2;
|
|
1469
|
+
if (i % 2 === 0)
|
|
1470
|
+
l = trackList$1.value[i].centerPoint;
|
|
1429
1471
|
else {
|
|
1430
|
-
const c = trackList$1.value[Math.floor(
|
|
1472
|
+
const c = trackList$1.value[Math.floor(i)], s = trackList$1.value[Math.ceil(i)];
|
|
1431
1473
|
if (c && s) {
|
|
1432
1474
|
const [m, d] = c.centerPoint, [u, h] = s.centerPoint;
|
|
1433
|
-
|
|
1475
|
+
l = [(m + u) / 2, (d + h) / 2];
|
|
1434
1476
|
}
|
|
1435
1477
|
}
|
|
1436
|
-
if (
|
|
1478
|
+
if (l) {
|
|
1437
1479
|
const c = new Feature({
|
|
1438
|
-
geometry: new Point(
|
|
1480
|
+
geometry: new Point(l)
|
|
1439
1481
|
});
|
|
1440
1482
|
c.set("type", "track_arrow"), c.setStyle(
|
|
1441
1483
|
new Style({
|
|
@@ -1445,8 +1487,8 @@ const moveFeature = (e, t) => {
|
|
|
1445
1487
|
fill: new Fill({ color: t }),
|
|
1446
1488
|
// 设置箭头旋转 角度转为弧度
|
|
1447
1489
|
rotation: getRotation(
|
|
1448
|
-
e[
|
|
1449
|
-
e[
|
|
1490
|
+
e[n].center,
|
|
1491
|
+
e[n + 1].center
|
|
1450
1492
|
) * (Math.PI / 180)
|
|
1451
1493
|
})
|
|
1452
1494
|
})
|
|
@@ -1454,29 +1496,29 @@ const moveFeature = (e, t) => {
|
|
|
1454
1496
|
}
|
|
1455
1497
|
}
|
|
1456
1498
|
}, renderIconPoint = () => {
|
|
1457
|
-
const e = "", t = "#fcdc3f",
|
|
1458
|
-
(trackList$1.value.length < 2 ? [trackList$1.value[0]] : [trackList$1.value[0], trackList$1.value[trackList$1.value.length - 1]]).forEach((
|
|
1459
|
-
const
|
|
1460
|
-
geometry: new Point(
|
|
1499
|
+
const e = "", t = "#fcdc3f", o = "#ff0000";
|
|
1500
|
+
(trackList$1.value.length < 2 ? [trackList$1.value[0]] : [trackList$1.value[0], trackList$1.value[trackList$1.value.length - 1]]).forEach((l) => {
|
|
1501
|
+
const r = new Feature({
|
|
1502
|
+
geometry: new Point(l.centerPoint)
|
|
1461
1503
|
});
|
|
1462
|
-
|
|
1463
|
-
const
|
|
1464
|
-
|
|
1504
|
+
r.set("type", "track_begin"), r.set("data", l);
|
|
1505
|
+
const i = l.index === 0 && trackList$1.value.length >= 2 ? t : o;
|
|
1506
|
+
r.setStyle(
|
|
1465
1507
|
new Style({
|
|
1466
1508
|
text: new Text({
|
|
1467
1509
|
font: "Normal 14px map-iconfont",
|
|
1468
1510
|
text: getIconFont(e),
|
|
1469
|
-
fill: new Fill({ color:
|
|
1511
|
+
fill: new Fill({ color: i })
|
|
1470
1512
|
}),
|
|
1471
1513
|
zIndex: 101
|
|
1472
1514
|
})
|
|
1473
|
-
), trackLineVectorSource.value.addFeature(
|
|
1515
|
+
), trackLineVectorSource.value.addFeature(r);
|
|
1474
1516
|
});
|
|
1475
1517
|
}, setTrackLabelStyle = (e, t) => new Style({
|
|
1476
|
-
renderer: (
|
|
1477
|
-
const
|
|
1518
|
+
renderer: (o, n) => {
|
|
1519
|
+
const l = n.context, c = {
|
|
1478
1520
|
id: e.id || "",
|
|
1479
|
-
center:
|
|
1521
|
+
center: o,
|
|
1480
1522
|
text: e.time,
|
|
1481
1523
|
color: t,
|
|
1482
1524
|
textColor: "#000",
|
|
@@ -1484,91 +1526,91 @@ const moveFeature = (e, t) => {
|
|
|
1484
1526
|
selected: !0,
|
|
1485
1527
|
type: "TrackTime"
|
|
1486
1528
|
};
|
|
1487
|
-
drawLabel(
|
|
1529
|
+
drawLabel(l, c, trackLabels.value, mapInstance$5.value);
|
|
1488
1530
|
}
|
|
1489
|
-
}), mapInstance$4 = ref(), renderCustomOverlaySetInstance = (e) => mapInstance$4.value = e, drawCustomContent = (e, t,
|
|
1531
|
+
}), mapInstance$4 = ref(), renderCustomOverlaySetInstance = (e) => mapInstance$4.value = e, drawCustomContent = (e, t, o, n = "top-left", l = !1, r = !0) => {
|
|
1490
1532
|
var u, h;
|
|
1491
1533
|
if (!t || !mapInstance$4.value) return;
|
|
1492
|
-
|
|
1534
|
+
r && document.querySelectorAll(".truck-custom-content").forEach((p) => {
|
|
1493
1535
|
var f;
|
|
1494
1536
|
return (f = p.parentNode) == null ? void 0 : f.removeChild(p);
|
|
1495
1537
|
});
|
|
1496
|
-
const
|
|
1497
|
-
|
|
1538
|
+
const i = document.createElement("div");
|
|
1539
|
+
i.innerHTML = o;
|
|
1498
1540
|
const c = new Overlay({
|
|
1499
|
-
element:
|
|
1541
|
+
element: i,
|
|
1500
1542
|
position: t,
|
|
1501
1543
|
// 初始位置
|
|
1502
|
-
positioning:
|
|
1503
|
-
stopEvent:
|
|
1544
|
+
positioning: n,
|
|
1545
|
+
stopEvent: l
|
|
1504
1546
|
// 设置不阻拦事件
|
|
1505
1547
|
});
|
|
1506
|
-
if (
|
|
1507
|
-
let p = !1, f = [0, 0], v = [0, 0], g = 0,
|
|
1508
|
-
|
|
1509
|
-
var
|
|
1510
|
-
p = !0, g =
|
|
1511
|
-
const
|
|
1512
|
-
|
|
1513
|
-
|
|
1514
|
-
|
|
1515
|
-
],
|
|
1516
|
-
}), document.addEventListener("mousemove", function(
|
|
1517
|
-
var
|
|
1548
|
+
if (l) {
|
|
1549
|
+
let p = !1, f = [0, 0], v = [0, 0], g = 0, k = 0;
|
|
1550
|
+
i.addEventListener("mousedown", function(M) {
|
|
1551
|
+
var E;
|
|
1552
|
+
p = !0, g = M.clientX, k = M.clientY;
|
|
1553
|
+
const b = (E = mapInstance$4.value) == null ? void 0 : E.getCoordinateFromPixel([M.clientX - 200, M.clientY - 200]);
|
|
1554
|
+
b && (f = b), v = [
|
|
1555
|
+
M.clientX - i.getBoundingClientRect().left + 160,
|
|
1556
|
+
M.clientY - i.getBoundingClientRect().top + 84
|
|
1557
|
+
], M.preventDefault(), console.log(e, g, k);
|
|
1558
|
+
}), document.addEventListener("mousemove", function(M) {
|
|
1559
|
+
var b;
|
|
1518
1560
|
if (p) {
|
|
1519
|
-
const
|
|
1520
|
-
c.setPosition([f[0] +
|
|
1561
|
+
const E = (b = mapInstance$4.value) == null ? void 0 : b.getCoordinateFromPixel([M.clientX - v[0], M.clientY - v[1]]), V = E[0] - f[0], F = E[1] - f[1];
|
|
1562
|
+
c.setPosition([f[0] + V, f[1] + F]);
|
|
1521
1563
|
}
|
|
1522
1564
|
}), document.addEventListener("mouseup", function() {
|
|
1523
1565
|
p = !1;
|
|
1524
1566
|
});
|
|
1525
1567
|
}
|
|
1526
1568
|
(u = mapInstance$4.value) == null || u.addOverlay(c);
|
|
1527
|
-
const s =
|
|
1569
|
+
const s = i.querySelector(".close-button");
|
|
1528
1570
|
s && s.addEventListener("click", () => {
|
|
1529
1571
|
var p, f;
|
|
1530
|
-
(p = mapInstance$4.value) == null || p.removeOverlay(c), (f =
|
|
1572
|
+
(p = mapInstance$4.value) == null || p.removeOverlay(c), (f = i.parentNode) == null || f.removeChild(i);
|
|
1531
1573
|
});
|
|
1532
1574
|
const m = JSON.parse(JSON.stringify(t)), d = (h = mapInstance$4.value) == null ? void 0 : h.getCoordinateFromPixel(m);
|
|
1533
1575
|
return c.setPosition(d), c;
|
|
1534
1576
|
}, mapInstance$3 = ref(), renderTrackSetInstance = (e) => mapInstance$3.value = e, showTracks = ref([]), trackList = ref([]);
|
|
1535
1577
|
ref(null);
|
|
1536
|
-
const trackId = ref(""), cursor = ref(0), renderTrack = (e, t,
|
|
1578
|
+
const trackId = ref(""), cursor = ref(0), renderTrack = (e, t, o, n, l = "ship") => {
|
|
1537
1579
|
var d;
|
|
1538
|
-
if (console.log(
|
|
1580
|
+
if (console.log(l), nextTick(() => {
|
|
1539
1581
|
hiddenAllShips(), clearShipData(!1);
|
|
1540
1582
|
}).then((u) => {
|
|
1541
1583
|
}), (t == null ? void 0 : t.length) < 2) {
|
|
1542
1584
|
((d = showTracks.value) == null ? void 0 : d.findIndex((u) => u.id === e)) < 0 && showTracks.value.push({ id: e, length: "" });
|
|
1543
1585
|
return;
|
|
1544
1586
|
}
|
|
1545
|
-
const
|
|
1587
|
+
const r = {};
|
|
1546
1588
|
t.forEach((u) => {
|
|
1547
1589
|
u.state ? u.state = Number(u.state) : delete u.state;
|
|
1548
|
-
}), trackId.value = e,
|
|
1549
|
-
const
|
|
1590
|
+
}), trackId.value = e, r[e] = t, trackList.value = t;
|
|
1591
|
+
const i = ["#ff0000", "#00ff00", "#0079ff", "#ffa500", "#800080", "#008080", "#ffc0cb", "#800000", "#000080", "#808000"], c = r[e].map(
|
|
1550
1592
|
(u) => transform([u.lon, u.lat], projection.data, projection.mercator)
|
|
1551
|
-
), s = new LineString(c), m = formatUtils.formatLength(s,
|
|
1593
|
+
), s = new LineString(c), m = formatUtils.formatLength(s, n) || "--";
|
|
1552
1594
|
nextTick(() => {
|
|
1553
1595
|
var h, p;
|
|
1554
1596
|
const u = (h = showTracks.value) == null ? void 0 : h.findIndex((f) => f.id === e);
|
|
1555
|
-
u < 0 ? showTracks.value.push({ id: e, length: m }) : showTracks.value[u].length = m, ++cursor.value, cursor.value >
|
|
1597
|
+
u < 0 ? showTracks.value.push({ id: e, length: m }) : showTracks.value[u].length = m, ++cursor.value, cursor.value > i.length && (cursor.value = 0), renderTrackLine(r, e, o), nextTick(() => {
|
|
1556
1598
|
resetTrackView(e);
|
|
1557
1599
|
}).then(() => {
|
|
1558
1600
|
}), (p = mapInstance$3.value) == null || p.on("moveend", () => {
|
|
1559
|
-
showTrackLayer.value && (trackLabels.value = [], renderTrackLine(
|
|
1560
|
-
}), renderTrackPointPopup();
|
|
1601
|
+
showTrackLayer.value && (trackLabels.value = [], renderTrackLine(r, e, o));
|
|
1602
|
+
}), l === "ship" && renderTrackPointPopup();
|
|
1561
1603
|
}).then(() => {
|
|
1562
1604
|
});
|
|
1563
1605
|
}, renderTrackPointPopup = () => {
|
|
1564
1606
|
var t;
|
|
1565
1607
|
const e = ref(null);
|
|
1566
|
-
(t = mapInstance$3.value) == null || t.on("pointermove", (
|
|
1567
|
-
var r, i,
|
|
1568
|
-
e.value && ((
|
|
1569
|
-
const
|
|
1570
|
-
if (
|
|
1571
|
-
const s =
|
|
1608
|
+
(t = mapInstance$3.value) == null || t.on("pointermove", (o) => {
|
|
1609
|
+
var l, r, i, c;
|
|
1610
|
+
e.value && ((l = mapInstance$3.value) == null || l.removeOverlay(e.value));
|
|
1611
|
+
const n = (r = mapInstance$3.value) == null ? void 0 : r.forEachFeatureAtPixel(o.pixel, (s) => s);
|
|
1612
|
+
if (n) {
|
|
1613
|
+
const s = n.get("data");
|
|
1572
1614
|
if (!(s != null && s.time)) return;
|
|
1573
1615
|
let m = "";
|
|
1574
1616
|
s != null && s.stayTime && (m = `
|
|
@@ -1608,7 +1650,7 @@ const trackId = ref(""), cursor = ref(0), renderTrack = (e, t, n, o, r = "ship")
|
|
|
1608
1650
|
<div class="item-item">${s.time}</div>
|
|
1609
1651
|
</div>
|
|
1610
1652
|
${m ?? m}
|
|
1611
|
-
</div>`, u = (
|
|
1653
|
+
</div>`, u = (i = mapInstance$3.value) == null ? void 0 : i.getPixelFromCoordinate(o.coordinate);
|
|
1612
1654
|
if (u) {
|
|
1613
1655
|
const h = drawCustomContent(s.time, u, d, "top-left");
|
|
1614
1656
|
h && (e.value = h);
|
|
@@ -1622,21 +1664,21 @@ const trackId = ref(""), cursor = ref(0), renderTrack = (e, t, n, o, r = "ship")
|
|
|
1622
1664
|
}, playTrack = (e, t) => {
|
|
1623
1665
|
handlePlay(String(e), t);
|
|
1624
1666
|
}, resetTrackView = (e) => {
|
|
1625
|
-
var
|
|
1626
|
-
const t = mapInstance$3.value.getView(),
|
|
1627
|
-
if (!
|
|
1628
|
-
const
|
|
1629
|
-
if (
|
|
1667
|
+
var l;
|
|
1668
|
+
const t = mapInstance$3.value.getView(), o = e ? shipTrackLineFeatures.value.find((r) => r.getId() === e) : shipTrackLineFeatures.value[0];
|
|
1669
|
+
if (!o) return;
|
|
1670
|
+
const n = (l = o == null ? void 0 : o.getGeometry()) == null ? void 0 : l.getExtent();
|
|
1671
|
+
if (n != null && n.length)
|
|
1630
1672
|
try {
|
|
1631
|
-
const
|
|
1632
|
-
t.fit(
|
|
1633
|
-
} catch (
|
|
1634
|
-
console.log(
|
|
1673
|
+
const r = buffer(n, Math.max(n[2] - n[0], n[3] - n[1]) * 0.02);
|
|
1674
|
+
t.fit(r);
|
|
1675
|
+
} catch (r) {
|
|
1676
|
+
console.log(r);
|
|
1635
1677
|
}
|
|
1636
1678
|
}, formatMinutesToDDHHMM = (e) => {
|
|
1637
|
-
const t = hooks.duration(e, "minutes"),
|
|
1638
|
-
let
|
|
1639
|
-
return
|
|
1679
|
+
const t = hooks.duration(e, "minutes"), o = Math.floor(t.asDays()), n = t.hours(), l = t.minutes();
|
|
1680
|
+
let r = `${String(l).padStart(2, "0")}分`;
|
|
1681
|
+
return n !== 0 && (r = `${String(n).padStart(2, "0")}时${r}`), o !== 0 && (r = `${String(o).padStart(2, "0")}天${r}`), r;
|
|
1640
1682
|
}, _hoisted_1$3 = {
|
|
1641
1683
|
key: 0,
|
|
1642
1684
|
class: "more-tool-panel"
|
|
@@ -1652,24 +1694,24 @@ const trackId = ref(""), cursor = ref(0), renderTrack = (e, t, n, o, r = "ship")
|
|
|
1652
1694
|
emits: ["switchGreenDot", "switchMapTile"],
|
|
1653
1695
|
setup(e, { emit: t }) {
|
|
1654
1696
|
var p, f;
|
|
1655
|
-
const
|
|
1656
|
-
|
|
1697
|
+
const o = inject("mapInstance"), n = e, l = t, r = ref(((f = (p = o == null ? void 0 : o.value) == null ? void 0 : p.getView()) == null ? void 0 : f.getZoom()) || mapZoom.default), i = ref(!1), c = ref(null), s = ref(!0), m = () => {
|
|
1698
|
+
n.disableGreenDot || r.value >= mapZoom.shipGreenDotMax || (s.value = !s.value, l("switchGreenDot", s.value));
|
|
1657
1699
|
}, d = () => {
|
|
1658
|
-
|
|
1700
|
+
l("switchMapTile", n.mapTileMode === BaseMapType.vector ? BaseMapType.satellite : BaseMapType.vector);
|
|
1659
1701
|
}, u = () => {
|
|
1660
1702
|
var v, g;
|
|
1661
|
-
|
|
1703
|
+
i.value ? (v = c.value) == null || v.removeInteraction() : (g = c.value) == null || g.addInteraction(), i.value = !i.value;
|
|
1662
1704
|
}, h = () => {
|
|
1663
1705
|
var v;
|
|
1664
|
-
(v = c.value) == null || v.removeInteraction(),
|
|
1706
|
+
(v = c.value) == null || v.removeInteraction(), i.value = !1;
|
|
1665
1707
|
};
|
|
1666
1708
|
return onMounted(() => {
|
|
1667
1709
|
nextTick(() => {
|
|
1668
1710
|
var v;
|
|
1669
|
-
(v =
|
|
1670
|
-
var
|
|
1671
|
-
const g = (
|
|
1672
|
-
g && (
|
|
1711
|
+
(v = o == null ? void 0 : o.value) == null || v.on("moveend", () => {
|
|
1712
|
+
var k, M;
|
|
1713
|
+
const g = (M = (k = o == null ? void 0 : o.value) == null ? void 0 : k.getView()) == null ? void 0 : M.getZoom();
|
|
1714
|
+
g && (r.value = g);
|
|
1673
1715
|
});
|
|
1674
1716
|
});
|
|
1675
1717
|
}), (v, g) => (openBlock(), createElementBlock(Fragment, null, [
|
|
@@ -1680,7 +1722,7 @@ const trackId = ref(""), cursor = ref(0), renderTrack = (e, t, n, o, r = "ship")
|
|
|
1680
1722
|
createElementVNode("div", _hoisted_2$1, [
|
|
1681
1723
|
v.vehicleMode === "ship" ? (openBlock(), createElementBlock("div", {
|
|
1682
1724
|
key: 0,
|
|
1683
|
-
class: normalizeClass(["switch-btn", `${
|
|
1725
|
+
class: normalizeClass(["switch-btn", `${i.value && "active"}`]),
|
|
1684
1726
|
onClick: u
|
|
1685
1727
|
}, g[5] || (g[5] = [
|
|
1686
1728
|
createElementVNode("i", { class: "map-iconfont icon-measure" }, null, -1),
|
|
@@ -1688,7 +1730,7 @@ const trackId = ref(""), cursor = ref(0), renderTrack = (e, t, n, o, r = "ship")
|
|
|
1688
1730
|
]), 2)) : createCommentVNode("", !0),
|
|
1689
1731
|
v.vehicleMode === "ship" ? (openBlock(), createElementBlock("div", {
|
|
1690
1732
|
key: 1,
|
|
1691
|
-
class: normalizeClass(`switch-btn ${s.value && "active"} ${(v.disableGreenDot ||
|
|
1733
|
+
class: normalizeClass(`switch-btn ${s.value && "active"} ${(v.disableGreenDot || r.value >= unref(mapZoom).shipGreenDotMax) && "disabled"}`),
|
|
1692
1734
|
onClick: m
|
|
1693
1735
|
}, g[6] || (g[6] = [
|
|
1694
1736
|
createElementVNode("i", { class: "map-iconfont icon-ship" }, null, -1),
|
|
@@ -1697,7 +1739,7 @@ const trackId = ref(""), cursor = ref(0), renderTrack = (e, t, n, o, r = "ship")
|
|
|
1697
1739
|
v.vehicleMode === "ship" ? (openBlock(), createElementBlock("div", {
|
|
1698
1740
|
key: 2,
|
|
1699
1741
|
class: normalizeClass(`switch-btn ${v.mapTileMode === unref(BaseMapType).satellite && "active"}`),
|
|
1700
|
-
onClick: g[0] || (g[0] = (
|
|
1742
|
+
onClick: g[0] || (g[0] = (k) => d())
|
|
1701
1743
|
}, g[7] || (g[7] = [
|
|
1702
1744
|
createElementVNode("i", { class: "map-iconfont icon-space" }, null, -1),
|
|
1703
1745
|
createElementVNode("div", { class: "button-text" }, "图层", -1)
|
|
@@ -1705,7 +1747,7 @@ const trackId = ref(""), cursor = ref(0), renderTrack = (e, t, n, o, r = "ship")
|
|
|
1705
1747
|
v.vehicleMode === "truck" ? (openBlock(), createElementBlock("div", {
|
|
1706
1748
|
key: 3,
|
|
1707
1749
|
class: normalizeClass(`switch-btn ${v.mapTileMode === unref(BaseMapType).satellite && "active"}`),
|
|
1708
|
-
onClick: g[1] || (g[1] = (
|
|
1750
|
+
onClick: g[1] || (g[1] = (k) => d())
|
|
1709
1751
|
}, g[8] || (g[8] = [
|
|
1710
1752
|
createElementVNode("i", { class: "map-iconfont icon-space" }, null, -1),
|
|
1711
1753
|
createElementVNode("div", { class: "button-text" }, "卫星", -1)
|
|
@@ -1713,14 +1755,14 @@ const trackId = ref(""), cursor = ref(0), renderTrack = (e, t, n, o, r = "ship")
|
|
|
1713
1755
|
v.showTrackLayer ? (openBlock(), createElementBlock(Fragment, { key: 4 }, [
|
|
1714
1756
|
createElementVNode("div", {
|
|
1715
1757
|
class: "switch-btn multiple",
|
|
1716
|
-
onClick: g[2] || (g[2] = (
|
|
1758
|
+
onClick: g[2] || (g[2] = (k) => unref(playTrack)(unref(currentTrackId), 1))
|
|
1717
1759
|
}, g[9] || (g[9] = [
|
|
1718
1760
|
createElementVNode("i", { class: "map-iconfont icon-play" }, null, -1),
|
|
1719
1761
|
createElementVNode("div", { class: "button-text" }, "播放轨迹", -1)
|
|
1720
1762
|
])),
|
|
1721
1763
|
createElementVNode("div", {
|
|
1722
1764
|
class: "switch-btn multiple",
|
|
1723
|
-
onClick: g[3] || (g[3] = (
|
|
1765
|
+
onClick: g[3] || (g[3] = (k) => unref(resetTrackView)())
|
|
1724
1766
|
}, g[10] || (g[10] = [
|
|
1725
1767
|
createElementVNode("i", { class: "map-iconfont icon-center" }, null, -1),
|
|
1726
1768
|
createElementVNode("div", { class: "button-text" }, "轨迹居中", -1)
|
|
@@ -1731,7 +1773,7 @@ const trackId = ref(""), cursor = ref(0), renderTrack = (e, t, n, o, r = "ship")
|
|
|
1731
1773
|
])) : (openBlock(), createElementBlock(Fragment, { key: 1 }, [
|
|
1732
1774
|
v.vehicleMode === "ship" ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [
|
|
1733
1775
|
createElementVNode("div", {
|
|
1734
|
-
class: normalizeClass(["switch-btn", `${
|
|
1776
|
+
class: normalizeClass(["switch-btn", `${i.value && "active"}`]),
|
|
1735
1777
|
onClick: u
|
|
1736
1778
|
}, g[11] || (g[11] = [
|
|
1737
1779
|
createElementVNode("i", { class: "map-iconfont icon-measure" }, null, -1),
|
|
@@ -1739,7 +1781,7 @@ const trackId = ref(""), cursor = ref(0), renderTrack = (e, t, n, o, r = "ship")
|
|
|
1739
1781
|
]), 2),
|
|
1740
1782
|
v.vehicleMode === "ship" ? (openBlock(), createElementBlock("div", {
|
|
1741
1783
|
key: 0,
|
|
1742
|
-
class: normalizeClass(`switch-btn ${s.value && "active"} ${(v.disableGreenDot ||
|
|
1784
|
+
class: normalizeClass(`switch-btn ${s.value && "active"} ${(v.disableGreenDot || r.value >= unref(mapZoom).shipGreenDotMax) && "disabled"}`),
|
|
1743
1785
|
onClick: m
|
|
1744
1786
|
}, g[12] || (g[12] = [
|
|
1745
1787
|
createElementVNode("i", { class: "map-iconfont icon-ship" }, null, -1),
|
|
@@ -1756,32 +1798,32 @@ const trackId = ref(""), cursor = ref(0), renderTrack = (e, t, n, o, r = "ship")
|
|
|
1756
1798
|
], 64))
|
|
1757
1799
|
], 2),
|
|
1758
1800
|
createElementVNode("div", _hoisted_3, [
|
|
1759
|
-
|
|
1801
|
+
i.value ? (openBlock(), createBlock(Measure, {
|
|
1760
1802
|
key: 0,
|
|
1761
1803
|
ref_key: "measureRef",
|
|
1762
1804
|
ref: c,
|
|
1763
|
-
visible:
|
|
1764
|
-
"onUpdate:visible": g[4] || (g[4] = (
|
|
1805
|
+
visible: i.value,
|
|
1806
|
+
"onUpdate:visible": g[4] || (g[4] = (k) => i.value = k),
|
|
1765
1807
|
onClose: h,
|
|
1766
1808
|
"view-mode": v.viewMode
|
|
1767
1809
|
}, null, 8, ["visible", "view-mode"])) : createCommentVNode("", !0)
|
|
1768
1810
|
])
|
|
1769
1811
|
], 64));
|
|
1770
1812
|
}
|
|
1771
|
-
}), ToolPanel = /* @__PURE__ */ _export_sfc(_sfc_main$4, [["__scopeId", "data-v-
|
|
1813
|
+
}), ToolPanel = /* @__PURE__ */ _export_sfc(_sfc_main$4, [["__scopeId", "data-v-79266143"]]), _hoisted_1$2 = { id: "scale-line-container" }, _sfc_main$3 = /* @__PURE__ */ defineComponent({
|
|
1772
1814
|
__name: "scaleLine",
|
|
1773
1815
|
setup(e, { expose: t }) {
|
|
1774
|
-
const
|
|
1816
|
+
const o = inject("mapInstance");
|
|
1775
1817
|
return t({
|
|
1776
|
-
setScaleLine: (
|
|
1818
|
+
setScaleLine: (l) => {
|
|
1777
1819
|
var c;
|
|
1778
|
-
|
|
1779
|
-
const
|
|
1780
|
-
units:
|
|
1781
|
-
}),
|
|
1782
|
-
|
|
1820
|
+
l || (l = "metric");
|
|
1821
|
+
const r = new ScaleLine$1({
|
|
1822
|
+
units: l
|
|
1823
|
+
}), i = document.getElementById("scale-line-container");
|
|
1824
|
+
i && (r.setTarget(i), (c = o == null ? void 0 : o.value) == null || c.addControl(r));
|
|
1783
1825
|
}
|
|
1784
|
-
}), (
|
|
1826
|
+
}), (l, r) => (openBlock(), createElementBlock("div", _hoisted_1$2));
|
|
1785
1827
|
}
|
|
1786
1828
|
}), ScaleLine = /* @__PURE__ */ _export_sfc(_sfc_main$3, [["__scopeId", "data-v-d666f80d"]]), _hoisted_1$1 = { class: "zoom" }, _sfc_main$2 = /* @__PURE__ */ defineComponent({
|
|
1787
1829
|
__name: "zoomControl",
|
|
@@ -1791,22 +1833,22 @@ const trackId = ref(""), cursor = ref(0), renderTrack = (e, t, n, o, r = "ship")
|
|
|
1791
1833
|
}
|
|
1792
1834
|
},
|
|
1793
1835
|
setup(e) {
|
|
1794
|
-
const t = inject("mapInstance"),
|
|
1836
|
+
const t = inject("mapInstance"), o = () => {
|
|
1795
1837
|
if (!t.value) return;
|
|
1796
|
-
const
|
|
1797
|
-
|
|
1798
|
-
},
|
|
1838
|
+
const l = t.value.getView(), r = l.getZoom();
|
|
1839
|
+
r && l.setZoom(r + 1);
|
|
1840
|
+
}, n = () => {
|
|
1799
1841
|
if (!t.value) return;
|
|
1800
|
-
const
|
|
1801
|
-
|
|
1842
|
+
const l = t.value.getView(), r = l.getZoom();
|
|
1843
|
+
r && l.setZoom(r - 1);
|
|
1802
1844
|
};
|
|
1803
|
-
return (
|
|
1845
|
+
return (l, r) => (openBlock(), createElementBlock("div", _hoisted_1$1, [
|
|
1804
1846
|
createElementVNode("div", {
|
|
1805
|
-
onClick:
|
|
1847
|
+
onClick: o,
|
|
1806
1848
|
class: "button big-button"
|
|
1807
1849
|
}, "+"),
|
|
1808
1850
|
createElementVNode("div", {
|
|
1809
|
-
onClick:
|
|
1851
|
+
onClick: n,
|
|
1810
1852
|
class: "button small-button"
|
|
1811
1853
|
}, "-")
|
|
1812
1854
|
]));
|
|
@@ -1818,14 +1860,14 @@ const trackId = ref(""), cursor = ref(0), renderTrack = (e, t, n, o, r = "ship")
|
|
|
1818
1860
|
mapTile: { default: BaseMapType.satellite }
|
|
1819
1861
|
},
|
|
1820
1862
|
setup(e) {
|
|
1821
|
-
useCssVars((
|
|
1822
|
-
"0d38823b":
|
|
1863
|
+
useCssVars((r) => ({
|
|
1864
|
+
"0d38823b": l.value
|
|
1823
1865
|
}));
|
|
1824
|
-
const t = e,
|
|
1825
|
-
return (
|
|
1866
|
+
const t = e, o = computed(() => t.type === COPY_RIGHT_TYPE.HORIZONTAL ? `map/tdt-copyright-h${t.mapTile === BaseMapType.satellite ? "-w" : ""}.svg` : `map/tdt-copyright-v${t.mapTile === BaseMapType.satellite ? "-w" : ""}.svg`), n = computed(() => t.type === COPY_RIGHT_TYPE.HORIZONTAL ? "400px" : "168px"), l = computed(() => t.type === COPY_RIGHT_TYPE.HORIZONTAL ? "auto auto 0 5px" : "0 auto auto 5px");
|
|
1867
|
+
return (r, i) => (openBlock(), createElementBlock("div", _hoisted_1, [
|
|
1826
1868
|
createElementVNode("img", {
|
|
1827
|
-
src: unref(CDN_URL) +
|
|
1828
|
-
width:
|
|
1869
|
+
src: unref(CDN_URL) + o.value,
|
|
1870
|
+
width: n.value,
|
|
1829
1871
|
class: "logo",
|
|
1830
1872
|
alt: ""
|
|
1831
1873
|
}, null, 8, _hoisted_2)
|
|
@@ -1843,31 +1885,31 @@ cameraImage.crossOrigin = "anonymous";
|
|
|
1843
1885
|
const loadImage = new Image();
|
|
1844
1886
|
loadImage.src = `${CDN_URL}/map/map-load.svg`;
|
|
1845
1887
|
loadImage.crossOrigin = "anonymous";
|
|
1846
|
-
const setTruckStyle = (e, t,
|
|
1847
|
-
renderer: (
|
|
1848
|
-
const
|
|
1849
|
-
|
|
1888
|
+
const setTruckStyle = (e, t, o, n) => new Style({
|
|
1889
|
+
renderer: (l, r) => {
|
|
1890
|
+
const i = r.context;
|
|
1891
|
+
i.save();
|
|
1850
1892
|
let c = 1;
|
|
1851
|
-
|
|
1852
|
-
let [s, m] =
|
|
1893
|
+
i.scale(c, c);
|
|
1894
|
+
let [s, m] = l;
|
|
1853
1895
|
s = Number(s) / c - 20, m = Number(m) / c;
|
|
1854
1896
|
const d = s - 70, u = m - 68;
|
|
1855
1897
|
let h = 180;
|
|
1856
1898
|
const p = 56, f = "#FFFFFF";
|
|
1857
1899
|
let v = 176;
|
|
1858
1900
|
const g = 52;
|
|
1859
|
-
let
|
|
1860
|
-
|
|
1861
|
-
const
|
|
1862
|
-
if (
|
|
1863
|
-
const
|
|
1864
|
-
let
|
|
1865
|
-
|
|
1866
|
-
$ === DEVICE_TYPE.CAMERA && (
|
|
1901
|
+
let k = "#164AFF", M = "#FFFFFF";
|
|
1902
|
+
o === CAR_COLOR.YELLOW ? (v = 176, k = "#FFC81E", M = "rgba(0,0,0,0.88)") : o === CAR_COLOR.Y_GREEN && (h = 200, v = 196, k = "#8FED7C", M = "rgba(0,0,0,0.88)"), n != null && n.length && (h += n.length * 56), fillRectRadius(i, d, u, h, p, f), fillRectRadius(i, d + 2, u + 2, v, g, k), o === CAR_COLOR.Y_GREEN && fillRectRadius(i, d + 2, u + 2, 68, g, "#FFC81E"), i.save(), i.restore(), i.fillStyle = M, i.font = "bold 28px Arial", i.textAlign = "left", i.textBaseline = "middle";
|
|
1903
|
+
const b = `${t.slice(0, 2) + " · " + t.slice(2)}`;
|
|
1904
|
+
if (i.fillText(b, d + 12, u + 32), i.save(), i.restore(), n != null && n.length) {
|
|
1905
|
+
const V = i.measureText(b).width + 12;
|
|
1906
|
+
let F = 0;
|
|
1907
|
+
n.forEach(($) => {
|
|
1908
|
+
$ === DEVICE_TYPE.CAMERA && (i.drawImage(cameraImage, s - 54 + V + F * 56, m - 64, 50, 50), ++F), $ === DEVICE_TYPE.LOAD && (i.drawImage(loadImage, s - 54 + V + F * 56, m - 64, 50, 50), ++F);
|
|
1867
1909
|
});
|
|
1868
1910
|
}
|
|
1869
|
-
const
|
|
1870
|
-
|
|
1911
|
+
const E = dotImage;
|
|
1912
|
+
i.drawImage(E, s + h / 2 - 90, m, 50 / c, 50 / c), i.restore();
|
|
1871
1913
|
}
|
|
1872
1914
|
}), mapInstance$2 = ref(), renderDashboardSetInstance = (e) => mapInstance$2.value = e;
|
|
1873
1915
|
ref([]);
|
|
@@ -1875,15 +1917,15 @@ let truckMarkerList = [], trucksVectorSource;
|
|
|
1875
1917
|
const renderTrucksMarker = (e) => {
|
|
1876
1918
|
if (deleteAllTruckMarkers(), !!mapInstance$2.value)
|
|
1877
1919
|
return e.forEach((t) => {
|
|
1878
|
-
const
|
|
1879
|
-
geometry: new Point(fromLonLat(
|
|
1920
|
+
const o = formatUtils.convertSixHundredThousandToLatLng(t.lon, t.lat), n = new Feature({
|
|
1921
|
+
geometry: new Point(fromLonLat(o))
|
|
1880
1922
|
});
|
|
1881
|
-
|
|
1923
|
+
n.set("data", t), n.setStyle(
|
|
1882
1924
|
setTruckStyle(!1, t.vno, t.vclColor ?? 0, t.icons ?? [])
|
|
1883
1925
|
), truckMarkerList.push({
|
|
1884
1926
|
name: t.vno,
|
|
1885
|
-
lonlat:
|
|
1886
|
-
feature:
|
|
1927
|
+
lonlat: o,
|
|
1928
|
+
feature: n
|
|
1887
1929
|
});
|
|
1888
1930
|
}), trucksVectorSource = new VectorSource({
|
|
1889
1931
|
features: truckMarkerList.map((t) => t.feature)
|
|
@@ -1896,31 +1938,31 @@ const renderTrucksMarker = (e) => {
|
|
|
1896
1938
|
}), truckMarkerList = [];
|
|
1897
1939
|
}, mapInstance$1 = ref(), renderTruckSetInstance = (e) => mapInstance$1.value = e, vehicle = ref(null), focusShipData = ref(), currentTruckOverlay = ref(null), findTruck = async (e, t) => {
|
|
1898
1940
|
if (!mapInstance$1.value || (focusShipData.value = e, !(e != null && e.lon && (e != null && e.lat)))) return;
|
|
1899
|
-
const
|
|
1900
|
-
currentTruckOverlay.value = e ? drawTruckIcon(e.vno,
|
|
1901
|
-
const
|
|
1902
|
-
|
|
1941
|
+
const o = Math.abs(Number(e.lon)) > 180 ? formatUtils.convertSixHundredThousandToLatLng(e.lon, e.lat) : [e.lon, e.lat], n = mapInstance$1.value.getPixelFromCoordinate(transform(o, projection.data, projection.mercator));
|
|
1942
|
+
currentTruckOverlay.value = e ? drawTruckIcon(e.vno, n, (e == null ? void 0 : e.drc) ?? "", t) ?? null : null;
|
|
1943
|
+
const l = mapInstance$1.value.getView(), r = new Point(o);
|
|
1944
|
+
l.setCenter(transform(r.getCoordinates(), projection.data, projection.mercator));
|
|
1903
1945
|
}, clearAllTruck = () => {
|
|
1904
1946
|
vehicle.value.clearAllShip();
|
|
1905
|
-
}, drawTruckIcon = (e, t,
|
|
1906
|
-
let
|
|
1947
|
+
}, drawTruckIcon = (e, t, o, n) => {
|
|
1948
|
+
let l = `<div id="${e}" class="ol-custom-content truck-custom-content" style="width: 80px; height: 80px; transform: rotate(${o}deg);">
|
|
1907
1949
|
<img src="${CDN_URL}map/car-icon.gif" width="100%" height="100%" />
|
|
1908
1950
|
</div>`;
|
|
1909
|
-
return
|
|
1951
|
+
return n && (l += n), drawCustomContent(e, t, l, "center-center");
|
|
1910
1952
|
}, removeTruckIcon = () => {
|
|
1911
1953
|
var t;
|
|
1912
1954
|
const e = (t = currentTruckOverlay.value) == null ? void 0 : t.getElement();
|
|
1913
1955
|
e && (e.innerHTML = "");
|
|
1914
1956
|
}, zoomTruckIcon = () => {
|
|
1915
|
-
var
|
|
1957
|
+
var r;
|
|
1916
1958
|
if (!mapInstance$1.value) return;
|
|
1917
|
-
const e = mapInstance$1.value.getView().getZoom(), t = 120,
|
|
1918
|
-
function
|
|
1919
|
-
return
|
|
1959
|
+
const e = mapInstance$1.value.getView().getZoom(), t = 120, o = 60;
|
|
1960
|
+
function n(i) {
|
|
1961
|
+
return i < 14 ? o : i >= 14 && i <= 18 ? Math.round((i - 14) * (t - o) / 4 + o) : t;
|
|
1920
1962
|
}
|
|
1921
|
-
const
|
|
1922
|
-
(
|
|
1923
|
-
|
|
1963
|
+
const l = n(e);
|
|
1964
|
+
(r = document.querySelectorAll(".truck-custom-content")) == null || r.forEach((i) => {
|
|
1965
|
+
i.style.width = `${l}px`, i.style.height = `${l}px`;
|
|
1924
1966
|
});
|
|
1925
1967
|
}, mapInstance = ref(), drawPolygonSetInstance = (e) => mapInstance.value = e;
|
|
1926
1968
|
let layerState = "drawn", drawnState = "undrawn";
|
|
@@ -1966,28 +2008,28 @@ function createHelpTooltip() {
|
|
|
1966
2008
|
}
|
|
1967
2009
|
let squareLimitError = !1, lineLimitError = !1;
|
|
1968
2010
|
const validateSquareLimit = (e) => {
|
|
1969
|
-
let
|
|
2011
|
+
let o = 1 / 0, n = -1 / 0, l = 1 / 0, r = -1 / 0;
|
|
1970
2012
|
e == null || e.forEach((s) => {
|
|
1971
2013
|
const m = transform(s, projection.mercator, projection.data), d = m[0], u = m[1];
|
|
1972
|
-
|
|
2014
|
+
o = Math.min(o, u), n = Math.max(n, u), l = Math.min(l, d), r = Math.max(r, d);
|
|
1973
2015
|
});
|
|
1974
|
-
const
|
|
1975
|
-
squareLimitError =
|
|
2016
|
+
const i = (n - o) * 111, c = (r - l) * 111;
|
|
2017
|
+
squareLimitError = i > 150 || c > 150;
|
|
1976
2018
|
};
|
|
1977
2019
|
let storeFeature, callbackFunction = null;
|
|
1978
2020
|
const addInteraction = (e) => {
|
|
1979
|
-
var
|
|
1980
|
-
e && (callbackFunction = e), drawVector || init(), drawnState = "undrawn", layerState = "drawn", (
|
|
2021
|
+
var o, n;
|
|
2022
|
+
showDrawLayer.value = !0, e && (callbackFunction = e), drawVector || init(), drawnState = "undrawn", layerState = "drawn", drawVector && ((o = mapInstance.value) == null || o.addLayer(drawVector)), draw = new Draw({
|
|
1981
2023
|
type: "Polygon",
|
|
1982
2024
|
source,
|
|
1983
2025
|
trace: !0,
|
|
1984
2026
|
style: [drawPolygonStyle.drawing, circleStyle]
|
|
1985
|
-
}), (
|
|
2027
|
+
}), storeFeature || ((n = mapInstance.value) == null || n.addInteraction(draw), createHelpTooltip()), createMeasureTooltip();
|
|
1986
2028
|
let t;
|
|
1987
|
-
draw.on("drawstart", function(
|
|
1988
|
-
var
|
|
1989
|
-
layerState = "drawn", sketch =
|
|
1990
|
-
const c =
|
|
2029
|
+
draw.on("drawstart", function(l) {
|
|
2030
|
+
var r;
|
|
2031
|
+
layerState = "drawn", sketch = l.feature, t = (r = sketch.getGeometry()) == null ? void 0 : r.on("change", function(i) {
|
|
2032
|
+
const c = i.target, s = formatUtils.formatArea(c, LENGTH_UNIT.NM), d = c.getCoordinates()[0], u = new LineString([d[d.length - 2], d[d.length - 1]]), h = formatUtils.formatLength(u, LENGTH_UNIT.NM);
|
|
1991
2033
|
if (lineLimitError = Number(getLength(u) / 1e3) > 150, validateSquareLimit(d), measureTooltipElement && s && (measureTooltipElement.innerHTML = `
|
|
1992
2034
|
<span class="text">面积:${s}${lineLimitError || squareLimitError ? '<span class="error pl-12">超出可以绘画的距离</span>' : ""}</span>
|
|
1993
2035
|
`), helpTooltipElement && s) {
|
|
@@ -1999,63 +2041,63 @@ const addInteraction = (e) => {
|
|
|
1999
2041
|
`;
|
|
2000
2042
|
}
|
|
2001
2043
|
}), drawnState = "drawing";
|
|
2002
|
-
}), draw.on("drawend", function(
|
|
2003
|
-
if (
|
|
2004
|
-
storeFeature =
|
|
2005
|
-
const
|
|
2006
|
-
|
|
2044
|
+
}), draw.on("drawend", function(l) {
|
|
2045
|
+
if (l.feature.getGeometry()) {
|
|
2046
|
+
storeFeature = l.feature;
|
|
2047
|
+
const r = endFn(l.feature);
|
|
2048
|
+
r != null && r.length && callbackFunction && callbackFunction(r);
|
|
2007
2049
|
}
|
|
2008
2050
|
if (sketch = null, measureTooltipElement = null, createMeasureTooltip(), t && unByKey(t), drawnState = "drawend", draw && mapInstance.value) {
|
|
2009
|
-
const
|
|
2010
|
-
|
|
2051
|
+
const r = mapInstance.value.getInteractions().getArray().find((i) => getUid(i) === getUid(draw));
|
|
2052
|
+
r && mapInstance.value.removeInteraction(r), helpTooltipElement != null && helpTooltipElement.parentNode && helpTooltipElement.parentNode.removeChild(helpTooltipElement);
|
|
2011
2053
|
}
|
|
2012
2054
|
});
|
|
2013
2055
|
}, removeInteraction = () => {
|
|
2014
|
-
var e, t,
|
|
2056
|
+
var e, t, o;
|
|
2015
2057
|
if (mapInstance.value) {
|
|
2016
|
-
if (document.querySelectorAll(".ol-tooltip.ol-tooltip-draw-polygon").forEach((
|
|
2017
|
-
var
|
|
2018
|
-
(
|
|
2019
|
-
}), source.clear(), (e = mapInstance.value) == null || e.removeLayer(drawVector), helpTooltipElement != null && helpTooltipElement.parentNode && helpTooltipElement.parentNode.removeChild(helpTooltipElement), ((t = mapInstance.value) == null ? void 0 : t.getTargetElement()).style.cursor = "", document.querySelector("#map").style.cursor = "", draw) {
|
|
2020
|
-
const
|
|
2021
|
-
|
|
2058
|
+
if (showDrawLayer.value = !1, document.querySelectorAll(".ol-tooltip.ol-tooltip-draw-polygon").forEach((n) => {
|
|
2059
|
+
var l;
|
|
2060
|
+
(l = n == null ? void 0 : n.parentNode) == null || l.removeChild(n);
|
|
2061
|
+
}), source.clear(), drawVector && ((e = mapInstance.value) == null || e.removeLayer(drawVector)), helpTooltipElement != null && helpTooltipElement.parentNode && helpTooltipElement.parentNode.removeChild(helpTooltipElement), ((t = mapInstance.value) == null ? void 0 : t.getTargetElement()).style.cursor = "", document.querySelector("#map").style.cursor = "", draw) {
|
|
2062
|
+
const n = mapInstance.value.getInteractions().getArray().find((l) => getUid(l) === getUid(draw));
|
|
2063
|
+
n && ((o = mapInstance.value) == null || o.removeInteraction(n));
|
|
2022
2064
|
}
|
|
2023
2065
|
drawnState = "undrawn", layerState = "destroyed";
|
|
2024
2066
|
}
|
|
2025
2067
|
}, endFn = (e) => {
|
|
2026
|
-
var t,
|
|
2068
|
+
var t, o, n;
|
|
2027
2069
|
if (e.getGeometry()) {
|
|
2028
|
-
const
|
|
2029
|
-
(t =
|
|
2030
|
-
|
|
2070
|
+
const l = [], i = e.getGeometry().getCoordinates();
|
|
2071
|
+
(t = i[0]) == null || t.forEach((s) => {
|
|
2072
|
+
l.push(transform(s, projection.mercator, projection.data));
|
|
2031
2073
|
});
|
|
2032
|
-
const c =
|
|
2033
|
-
if (c && measureTooltip.setPosition(c), measureTooltip.setOffset([10, 0]), measureTooltipElement && (measureTooltipElement.innerHTML += '<span class="delete-icon"><i class="map-iconfont icon-delete" /></div>'), (
|
|
2074
|
+
const c = i[0][i[0].length - 2];
|
|
2075
|
+
if (c && measureTooltip.setPosition(c), measureTooltip.setOffset([10, 0]), measureTooltipElement && (measureTooltipElement.innerHTML += '<span class="delete-icon"><i class="map-iconfont icon-delete" /></div>'), (o = document.querySelector(".delete-icon")) == null || o.addEventListener("click", () => {
|
|
2034
2076
|
reset();
|
|
2035
2077
|
}), !lineLimitError && !squareLimitError)
|
|
2036
|
-
return
|
|
2037
|
-
draw && ((
|
|
2078
|
+
return l;
|
|
2079
|
+
draw && ((n = mapInstance.value) == null || n.removeInteraction(draw)), helpTooltipElement != null && helpTooltipElement.parentNode && helpTooltipElement.parentNode.removeChild(helpTooltipElement);
|
|
2038
2080
|
}
|
|
2039
2081
|
}, initFeature = (e) => {
|
|
2040
|
-
var t,
|
|
2082
|
+
var t, o;
|
|
2041
2083
|
if (e && (callbackFunction = e), layerState = "drawn", storeFeature) {
|
|
2042
|
-
const
|
|
2043
|
-
if (!
|
|
2044
|
-
const
|
|
2084
|
+
const n = storeFeature.getGeometry();
|
|
2085
|
+
if (!n) return;
|
|
2086
|
+
const l = formatUtils.formatArea(n, LENGTH_UNIT.NM);
|
|
2045
2087
|
measureTooltipElement && (measureTooltipElement.innerHTML = `
|
|
2046
|
-
<span class="text">面积:${
|
|
2047
|
-
`), (t = drawVector.getSource()) == null || t.addFeature(storeFeature);
|
|
2048
|
-
const
|
|
2049
|
-
|
|
2050
|
-
const
|
|
2051
|
-
(
|
|
2088
|
+
<span class="text">面积:${l}${lineLimitError || squareLimitError ? '<span class="error pl-12">超出可以绘画的距离</span>' : ""}</span>
|
|
2089
|
+
`), drawVector && ((t = drawVector.getSource()) == null || t.addFeature(storeFeature));
|
|
2090
|
+
const r = endFn(storeFeature);
|
|
2091
|
+
r != null && r.length && callbackFunction && callbackFunction(r);
|
|
2092
|
+
const i = getCenter(storeFeature.getGeometry().getExtent());
|
|
2093
|
+
(o = mapInstance.value) == null || o.getView().setCenter(i);
|
|
2052
2094
|
}
|
|
2053
2095
|
}, pointerMoveHandler = function(e) {
|
|
2054
|
-
var
|
|
2096
|
+
var o;
|
|
2055
2097
|
if (e.dragging)
|
|
2056
2098
|
return;
|
|
2057
2099
|
let t = "点击选择起点";
|
|
2058
|
-
sketch && (t = "单击继续,双击结束"), helpTooltipElement && (helpTooltipElement.innerHTML = t, helpTooltip.setPosition(e.coordinate), helpTooltipElement.classList.remove("hidden")), layerState === "drawn" && (((
|
|
2100
|
+
sketch && (t = "单击继续,双击结束"), helpTooltipElement && (helpTooltipElement.innerHTML = t, helpTooltip.setPosition(e.coordinate), helpTooltipElement.classList.remove("hidden")), layerState === "drawn" && (((o = mapInstance.value) == null ? void 0 : o.getTargetElement()).style.cursor = "crosshair");
|
|
2059
2101
|
}, init = () => {
|
|
2060
2102
|
mapInstance.value && (circleStyle = new Style({
|
|
2061
2103
|
image: new CircleStyle({
|
|
@@ -2077,20 +2119,23 @@ const addInteraction = (e) => {
|
|
|
2077
2119
|
}), mapInstance.value.on(["dblclick"], function(e) {
|
|
2078
2120
|
drawnState !== "undrawn" && (e.stopPropagation(), e.preventDefault());
|
|
2079
2121
|
}));
|
|
2122
|
+
}, destroy = () => {
|
|
2123
|
+
storeFeature = null, drawVector = null, removeInteraction();
|
|
2080
2124
|
}, reset = () => {
|
|
2081
|
-
|
|
2125
|
+
destroy(), addInteraction();
|
|
2082
2126
|
}, drawPolygonTool = {
|
|
2083
2127
|
addInteraction,
|
|
2084
2128
|
removeInteraction,
|
|
2085
2129
|
initFeature,
|
|
2086
|
-
reset
|
|
2087
|
-
|
|
2088
|
-
|
|
2089
|
-
|
|
2090
|
-
|
|
2091
|
-
|
|
2092
|
-
|
|
2093
|
-
|
|
2130
|
+
reset,
|
|
2131
|
+
destroy
|
|
2132
|
+
}, setPointStyle = (e, t, o) => {
|
|
2133
|
+
const n = new Image();
|
|
2134
|
+
n.crossOrigin = "anonymous";
|
|
2135
|
+
const l = new Image();
|
|
2136
|
+
l.crossOrigin = "anonymous";
|
|
2137
|
+
const { color: r, url: i, activeUrl: c, activeColor: s, imgWidth: m, imgHeight: d } = o;
|
|
2138
|
+
return (c || i) && (e ? l.src = CDN_URL + (c || i) : n.src = CDN_URL + (i || c)), new Style({
|
|
2094
2139
|
renderer: (u, h) => {
|
|
2095
2140
|
const p = h.context;
|
|
2096
2141
|
p.save();
|
|
@@ -2098,12 +2143,12 @@ const addInteraction = (e) => {
|
|
|
2098
2143
|
let [v, g] = u;
|
|
2099
2144
|
if (v = Number(v), g = Number(g), t) {
|
|
2100
2145
|
p.font = `${12 * f}px Arial`;
|
|
2101
|
-
const
|
|
2102
|
-
fillRectRadius(p,
|
|
2146
|
+
const k = p.measureText(t).width, M = v - k / 2 - (f <= 1 ? 10 : -3), b = g + (f <= 1 ? 0 : 10) + 6 * f, E = k + 4, V = 16 * f, F = e && s || r;
|
|
2147
|
+
fillRectRadius(p, M, b + (f <= 1 ? 6 : 13 * f), E, V, F), p.save(), p.restore(), p.fillStyle = e ? "#FFFFFF" : "#000000", p.textAlign = "center", p.textBaseline = "middle", p.fillText(t, M + (k + 4) / 2, b + (f <= 1 ? 15 : 22 * f)), p.save(), p.restore();
|
|
2103
2148
|
}
|
|
2104
|
-
if (
|
|
2105
|
-
const
|
|
2106
|
-
p.drawImage(
|
|
2149
|
+
if (i || c) {
|
|
2150
|
+
const k = e ? l : n;
|
|
2151
|
+
p.drawImage(k, v - (m || k.width) / 2, g - (d || k.height) / 2, 30 * f, 30 * f);
|
|
2107
2152
|
}
|
|
2108
2153
|
p.restore();
|
|
2109
2154
|
}
|
|
@@ -2116,39 +2161,39 @@ class PointMarkerClass {
|
|
|
2116
2161
|
* 配置渲染点的样式
|
|
2117
2162
|
* @param options
|
|
2118
2163
|
*/
|
|
2119
|
-
constructor(t,
|
|
2120
|
-
|
|
2164
|
+
constructor(t, o) {
|
|
2165
|
+
I(this, "mapInstance");
|
|
2121
2166
|
// 渲染的数据
|
|
2122
|
-
|
|
2167
|
+
I(this, "pointMarkerList", []);
|
|
2123
2168
|
// 绘制点渲染层数据
|
|
2124
|
-
|
|
2169
|
+
I(this, "pointsVectorSource");
|
|
2125
2170
|
// 当前高亮的数据
|
|
2126
|
-
|
|
2127
|
-
|
|
2171
|
+
I(this, "highlightPoint");
|
|
2172
|
+
I(this, "pointLayer");
|
|
2128
2173
|
// 颜色等其他设置
|
|
2129
|
-
|
|
2174
|
+
I(this, "options");
|
|
2130
2175
|
// 使用坐标点区域自动缩放地图层级
|
|
2131
|
-
|
|
2176
|
+
I(this, "resetPointsView", (t, o = 0.02) => {
|
|
2132
2177
|
var i;
|
|
2133
2178
|
if (!this.mapInstance || t.length === 0) return;
|
|
2134
2179
|
const n = (i = this.mapInstance) == null ? void 0 : i.getView();
|
|
2135
2180
|
if (!n) return;
|
|
2136
2181
|
const r = t.map(
|
|
2137
|
-
(
|
|
2138
|
-
).reduce((
|
|
2139
|
-
Math.min(
|
|
2140
|
-
Math.min(
|
|
2141
|
-
Math.max(
|
|
2142
|
-
Math.max(
|
|
2182
|
+
(c) => transform(c, projection.data, projection.mercator)
|
|
2183
|
+
).reduce((c, s) => [
|
|
2184
|
+
Math.min(c[0], s[0]),
|
|
2185
|
+
Math.min(c[1], s[1]),
|
|
2186
|
+
Math.max(c[2], s[0]),
|
|
2187
|
+
Math.max(c[3], s[1])
|
|
2143
2188
|
], [1 / 0, 1 / 0, -1 / 0, -1 / 0]);
|
|
2144
2189
|
try {
|
|
2145
|
-
const
|
|
2146
|
-
n.fit(
|
|
2147
|
-
} catch (
|
|
2148
|
-
console.error("Failed to zoom to points:",
|
|
2190
|
+
const c = buffer(r, Math.max(r[2] - r[0], r[3] - r[1]) * o);
|
|
2191
|
+
n.fit(c);
|
|
2192
|
+
} catch (c) {
|
|
2193
|
+
console.error("Failed to zoom to points:", c);
|
|
2149
2194
|
}
|
|
2150
2195
|
});
|
|
2151
|
-
this.mapInstance = t, this.options =
|
|
2196
|
+
this.mapInstance = t, this.options = o;
|
|
2152
2197
|
}
|
|
2153
2198
|
/**
|
|
2154
2199
|
* 渲染
|
|
@@ -2166,49 +2211,49 @@ class PointMarkerClass {
|
|
|
2166
2211
|
* pointType
|
|
2167
2212
|
*/
|
|
2168
2213
|
renderPointMarker(t) {
|
|
2169
|
-
if (!this.mapInstance) return;
|
|
2170
|
-
let
|
|
2171
|
-
t.forEach((
|
|
2172
|
-
var
|
|
2173
|
-
const
|
|
2174
|
-
if (((
|
|
2175
|
-
|
|
2176
|
-
id:
|
|
2177
|
-
name:
|
|
2178
|
-
lonlat: [Number(
|
|
2179
|
-
pointType:
|
|
2214
|
+
if (this.deleteAllPointMarkers(), !this.mapInstance) return;
|
|
2215
|
+
let o = {};
|
|
2216
|
+
t.forEach((n) => {
|
|
2217
|
+
var r;
|
|
2218
|
+
const l = [n.lon, n.lat];
|
|
2219
|
+
if (((r = this.highlightPoint) == null ? void 0 : r.id) === n.id)
|
|
2220
|
+
o = {
|
|
2221
|
+
id: n.id,
|
|
2222
|
+
name: n.name,
|
|
2223
|
+
lonlat: [Number(n.lon), Number(n.lat)],
|
|
2224
|
+
pointType: n.pointType
|
|
2180
2225
|
};
|
|
2181
2226
|
else {
|
|
2182
|
-
const
|
|
2227
|
+
const i = this.getFeature(n, l);
|
|
2183
2228
|
this.pointMarkerList.push({
|
|
2184
|
-
id:
|
|
2185
|
-
name:
|
|
2186
|
-
lonlat: [Number(
|
|
2187
|
-
feature:
|
|
2188
|
-
pointType:
|
|
2229
|
+
id: n.id,
|
|
2230
|
+
name: n.name,
|
|
2231
|
+
lonlat: [Number(n.lon), Number(n.lat)],
|
|
2232
|
+
feature: i,
|
|
2233
|
+
pointType: n.pointType
|
|
2189
2234
|
});
|
|
2190
2235
|
}
|
|
2191
|
-
}),
|
|
2192
|
-
features: [...this.pointMarkerList.map((
|
|
2236
|
+
}), o && o.lonlat && (o.feature = this.getFeature(o, o.lonlat), this.pointMarkerList.push(o)), this.pointsVectorSource = new VectorSource({
|
|
2237
|
+
features: [...this.pointMarkerList.map((n) => n.feature)]
|
|
2193
2238
|
}), this.pointLayer = new VectorLayer({
|
|
2194
2239
|
source: this.pointsVectorSource
|
|
2195
2240
|
}), this.mapInstance.addLayer(this.pointLayer);
|
|
2196
2241
|
}
|
|
2197
2242
|
// 删除 未选中的渲染点
|
|
2198
2243
|
deleteAllPointMarkers(t) {
|
|
2199
|
-
this.pointMarkerList.forEach((
|
|
2200
|
-
var
|
|
2201
|
-
|
|
2244
|
+
this.pointMarkerList.forEach((o) => {
|
|
2245
|
+
var n;
|
|
2246
|
+
o.feature && t !== o.id && ((n = this.pointsVectorSource) == null || n.removeFeature(o.feature));
|
|
2202
2247
|
});
|
|
2203
2248
|
}
|
|
2204
2249
|
// 取消高亮
|
|
2205
2250
|
cancelHighlightTruckMarker() {
|
|
2206
2251
|
if (!this.highlightPoint)
|
|
2207
2252
|
return;
|
|
2208
|
-
const { id: t, name:
|
|
2209
|
-
this.highlightPoint = void 0, this.pointMarkerList.find((
|
|
2210
|
-
|
|
2211
|
-
setPointStyle(!1,
|
|
2253
|
+
const { id: t, name: o } = this.highlightPoint;
|
|
2254
|
+
this.highlightPoint = void 0, this.pointMarkerList.find((n) => {
|
|
2255
|
+
n.id === t && n.feature.setStyle(
|
|
2256
|
+
setPointStyle(!1, o, this.options)
|
|
2212
2257
|
);
|
|
2213
2258
|
});
|
|
2214
2259
|
}
|
|
@@ -2230,24 +2275,24 @@ class PointMarkerClass {
|
|
|
2230
2275
|
*/
|
|
2231
2276
|
highlightPointMarker(t) {
|
|
2232
2277
|
if (!this.mapInstance) return;
|
|
2233
|
-
const { id:
|
|
2278
|
+
const { id: o, name: n, fullName: l, lon: r, lat: i, pointType: c } = t, s = [Number(r), Number(i)];
|
|
2234
2279
|
this.highlightPoint = {
|
|
2235
|
-
id:
|
|
2236
|
-
name:
|
|
2237
|
-
fullName:
|
|
2280
|
+
id: o,
|
|
2281
|
+
name: n,
|
|
2282
|
+
fullName: l,
|
|
2238
2283
|
lonlat: s,
|
|
2239
2284
|
pointType: c
|
|
2240
2285
|
}, this.setPointCenter(s);
|
|
2241
2286
|
}
|
|
2242
2287
|
// 获取feature
|
|
2243
|
-
getFeature(t,
|
|
2244
|
-
var
|
|
2245
|
-
const
|
|
2246
|
-
geometry: new Point(fromLonLat(
|
|
2288
|
+
getFeature(t, o) {
|
|
2289
|
+
var l;
|
|
2290
|
+
const n = new Feature({
|
|
2291
|
+
geometry: new Point(fromLonLat(o))
|
|
2247
2292
|
});
|
|
2248
|
-
return
|
|
2249
|
-
setPointStyle(((
|
|
2250
|
-
),
|
|
2293
|
+
return n.set("data", t), n.setStyle(
|
|
2294
|
+
setPointStyle(((l = this.highlightPoint) == null ? void 0 : l.id) === t.id, t.name, this.options)
|
|
2295
|
+
), n;
|
|
2251
2296
|
}
|
|
2252
2297
|
/**
|
|
2253
2298
|
*
|
|
@@ -2257,12 +2302,12 @@ class PointMarkerClass {
|
|
|
2257
2302
|
* type 0: 不改变地图大小 1: 等于customZoom 2: 地图当前zoom > 传入的customZoom(缩小地图) 3: 地图当前zoom < 传入的customZoom(放大地图)
|
|
2258
2303
|
* }
|
|
2259
2304
|
*/
|
|
2260
|
-
setPointCenter(t,
|
|
2305
|
+
setPointCenter(t, o = { customZoom: mapZoom.findShip, type: 1 }) {
|
|
2261
2306
|
if (!this.mapInstance) return;
|
|
2262
|
-
const { customZoom:
|
|
2263
|
-
(
|
|
2307
|
+
const { customZoom: n = mapZoom.findShip, type: l = 1 } = o, r = this.mapInstance.getView(), i = r.getZoom();
|
|
2308
|
+
(l === 1 || i > n && l === 2 || i < n && l === 3) && r.setZoom(n);
|
|
2264
2309
|
const c = new Point(t);
|
|
2265
|
-
|
|
2310
|
+
r.setCenter(transform(c.getCoordinates(), projection.data, projection.mercator));
|
|
2266
2311
|
}
|
|
2267
2312
|
}
|
|
2268
2313
|
const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
@@ -2278,17 +2323,17 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
2278
2323
|
showToolPanel: { type: Boolean }
|
|
2279
2324
|
},
|
|
2280
2325
|
emits: ["zoomChanged", "extentChanged"],
|
|
2281
|
-
setup(e, { expose: t, emit:
|
|
2282
|
-
const
|
|
2283
|
-
provide("mapInstance",
|
|
2284
|
-
const
|
|
2326
|
+
setup(e, { expose: t, emit: o }) {
|
|
2327
|
+
const n = ref();
|
|
2328
|
+
provide("mapInstance", n);
|
|
2329
|
+
const l = ref(null), r = ref(null), i = ref(null), c = o, s = e, m = ref(s.zoom || mapZoom.default), d = ref(!1), u = ref(!0), h = ref(!0), p = ref(!0), f = {
|
|
2285
2330
|
tiandituTile: new TileLayer({ source: new XYZ({ url: baseMap.tiandituTile }) }),
|
|
2286
2331
|
tiandituTileMark: new TileLayer({ source: new XYZ({ url: baseMap.tiandituTileMark }) }),
|
|
2287
2332
|
tiandituImgTile: new TileLayer({ source: new XYZ({ url: baseMap.tiandituImgTile }), visible: !1 }),
|
|
2288
2333
|
tiandituImgTileMark: new TileLayer({ source: new XYZ({ url: baseMap.tiandituImgTileMark }), visible: !1 }),
|
|
2289
2334
|
greenMark: new TileLayer({ source: new XYZ({ url: baseMap.greenTile }) })
|
|
2290
2335
|
}, v = () => {
|
|
2291
|
-
var
|
|
2336
|
+
var L, w;
|
|
2292
2337
|
const y = {
|
|
2293
2338
|
projection: projection.mercator,
|
|
2294
2339
|
// 地图投影坐标系
|
|
@@ -2306,7 +2351,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
2306
2351
|
// 禁用旋转
|
|
2307
2352
|
multiWorld: !0
|
|
2308
2353
|
};
|
|
2309
|
-
|
|
2354
|
+
n.value = new Map$1({
|
|
2310
2355
|
target: "map",
|
|
2311
2356
|
// 对应页面里 id 为 map 的元素
|
|
2312
2357
|
layers: [
|
|
@@ -2318,7 +2363,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
2318
2363
|
f.greenMark
|
|
2319
2364
|
],
|
|
2320
2365
|
view: new View(y)
|
|
2321
|
-
}), g(), s.showToolPanel === void 0 ? p.value = !0 : p.value = s.showToolPanel, (
|
|
2366
|
+
}), g(), s.showToolPanel === void 0 ? p.value = !0 : p.value = s.showToolPanel, (L = r.value) == null || L.setScaleLine(s.vehicleMode === "ship" ? "nautical" : "metric"), (w = n.value) == null || w.on("moveend", E), k(y.zoom < mapZoom.shipGreenDotMax), b(s.vehicleMode === "ship" || s.viewMode === "findShip" ? BaseMapType.satellite : BaseMapType.vector), s.viewMode === "findShip" && s.mmsi && s.shipData && nextTick(() => {
|
|
2322
2367
|
findShip(String(s.mmsi), s.shipData);
|
|
2323
2368
|
}), onShipsMarkerHover();
|
|
2324
2369
|
};
|
|
@@ -2326,69 +2371,69 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
2326
2371
|
v();
|
|
2327
2372
|
});
|
|
2328
2373
|
const g = () => {
|
|
2329
|
-
|
|
2330
|
-
},
|
|
2331
|
-
var
|
|
2332
|
-
s.vehicleMode !== "ship" && (y = !1), (
|
|
2333
|
-
getUid(
|
|
2374
|
+
n.value && (renderCustomOverlaySetInstance(n.value), renderTruckSetInstance(n.value), drawPolygonSetInstance(n.value), renderShipStyleSetInstance(n.value), renderTrackStyleSetInstance(n.value), renderDashboardSetInstance(n.value), renderMarkerSetInstance(n.value), renderShipSetInstance(n.value), renderTrackSetInstance(n.value));
|
|
2375
|
+
}, k = (y) => {
|
|
2376
|
+
var L;
|
|
2377
|
+
s.vehicleMode !== "ship" && (y = !1), (L = n.value) == null || L.getLayers().forEach((w) => {
|
|
2378
|
+
getUid(w) === getUid(f.greenMark) && (w.setVisible(y), u.value = y);
|
|
2334
2379
|
});
|
|
2335
|
-
},
|
|
2336
|
-
var
|
|
2337
|
-
|
|
2338
|
-
(getUid(
|
|
2380
|
+
}, M = ref(BaseMapType.satellite), b = (y) => {
|
|
2381
|
+
var L;
|
|
2382
|
+
M.value = y, (L = n.value) == null || L.getLayers().forEach((w) => {
|
|
2383
|
+
(getUid(w) === getUid(f.tiandituTile) || getUid(w) === getUid(f.tiandituTileMark) || getUid(w) === getUid(f.tiandituImgTile) || getUid(w) === getUid(f.tiandituImgTileMark)) && w.setVisible(!1), (y === BaseMapType.vector && (getUid(w) === getUid(f.tiandituTile) || getUid(w) === getUid(f.tiandituTileMark)) || y === BaseMapType.satellite && (getUid(w) === getUid(f.tiandituImgTile) || getUid(w) === getUid(f.tiandituImgTileMark))) && w.setVisible(!0);
|
|
2339
2384
|
});
|
|
2340
|
-
},
|
|
2341
|
-
const y =
|
|
2342
|
-
|
|
2343
|
-
const
|
|
2344
|
-
|
|
2345
|
-
},
|
|
2346
|
-
var
|
|
2347
|
-
m.value = y,
|
|
2348
|
-
const
|
|
2349
|
-
showTrackLayer.value ? (h.value = !1,
|
|
2350
|
-
},
|
|
2351
|
-
const
|
|
2352
|
-
c("extentChanged", { extent: [
|
|
2385
|
+
}, E = () => {
|
|
2386
|
+
const y = n.value.getView(), L = y.getZoom();
|
|
2387
|
+
L && V(L);
|
|
2388
|
+
const w = y.calculateExtent(n.value.getSize());
|
|
2389
|
+
w && L && F(w, L);
|
|
2390
|
+
}, V = (y) => {
|
|
2391
|
+
var S, T, C, P, x;
|
|
2392
|
+
m.value = y, k(y < mapZoom.shipGreenDotMax);
|
|
2393
|
+
const L = (S = n.value) == null ? void 0 : S.getLayers(), w = s.vehicleMode === "ship" ? L == null ? void 0 : L.getArray().find((N) => getUid(N) === getUid(f.greenMark)) : void 0;
|
|
2394
|
+
showTrackLayer.value ? (h.value = !1, w == null || w.setVisible(!1), (T = shipsLayer.value) == null || T.setVisible(!1), (C = largeAmountShipsLayer.value) == null || C.setVisible(!1)) : !d.value && u.value && y <= mapZoom.shipGreenDotMax ? (h.value = !0, w == null || w.setVisible(!0), (P = shipsLayer.value) == null || P.setVisible(!1), (x = largeAmountShipsLayer.value) == null || x.setVisible(!1)) : (h.value = !1, w == null || w.setVisible(!1)), c("zoomChanged", y);
|
|
2395
|
+
}, F = (y, L) => {
|
|
2396
|
+
const w = transform([y[0], y[1]], projection.mercator, projection.data), S = transform([y[2], y[3]], projection.mercator, projection.data);
|
|
2397
|
+
c("extentChanged", { extent: [w, S], zoom: L });
|
|
2353
2398
|
};
|
|
2354
2399
|
return t({
|
|
2355
|
-
mapInstance:
|
|
2400
|
+
mapInstance: n,
|
|
2356
2401
|
initMap: v,
|
|
2357
|
-
pointRender: (y,
|
|
2402
|
+
pointRender: (y, L) => new PointMarkerClass(y, L),
|
|
2358
2403
|
renderTrucksMarker,
|
|
2359
2404
|
renderShip: renderShips,
|
|
2360
|
-
renderTrack: (y,
|
|
2361
|
-
var
|
|
2362
|
-
currentTrackId.value = y, showTrackLayer.value = !0, d.value = !0, hiddenAllShips(), (T = (
|
|
2405
|
+
renderTrack: (y, L, w) => {
|
|
2406
|
+
var S, T;
|
|
2407
|
+
showDrawLayer.value = !0, currentTrackId.value = y, showTrackLayer.value = !0, d.value = !0, hiddenAllShips(), (T = (S = largeAmountShipsLayer.value) == null ? void 0 : S.getSource()) == null || T.clear(), renderTrack(y, s.vehicleMode === "ship" ? L.reverse() : L, w, LENGTH_UNIT.NM);
|
|
2363
2408
|
},
|
|
2364
2409
|
findTruck,
|
|
2365
2410
|
removeTruckIcon,
|
|
2366
2411
|
clearAllTruck,
|
|
2367
|
-
closeTrack: () => {
|
|
2368
|
-
var
|
|
2369
|
-
showTrackLayer.value = !1, (
|
|
2412
|
+
closeTrack: (y = !1) => {
|
|
2413
|
+
var L, w, S;
|
|
2414
|
+
showDrawLayer.value = !1, showTrackLayer.value = !1, (L = shipTrackVectorLayer.value) == null || L.setVisible(!1), (w = selectShipsLayer.value) == null || w.setVisible(!0), d.value = !1, k(m.value < mapZoom.shipGreenDotMax), y && (allTracks.value = [], (S = trackLineVectorSource.value) == null || S.clear()), stopAnimation();
|
|
2370
2415
|
},
|
|
2371
2416
|
closeTruckTrack: () => {
|
|
2372
|
-
var y,
|
|
2373
|
-
showTrackLayer.value = !1, (y = shipTrackVectorLayer.value) == null || y.setVisible(!1), (
|
|
2417
|
+
var y, L;
|
|
2418
|
+
showTrackLayer.value = !1, (y = shipTrackVectorLayer.value) == null || y.setVisible(!1), (L = selectShipsLayer.value) == null || L.setVisible(!0), stopAnimation();
|
|
2374
2419
|
},
|
|
2375
2420
|
resetTrackView,
|
|
2376
2421
|
playTrack,
|
|
2377
2422
|
clearSelectFeature,
|
|
2378
2423
|
findShip,
|
|
2379
|
-
focusShip: (y,
|
|
2380
|
-
var
|
|
2381
|
-
hiddenOrther.value =
|
|
2424
|
+
focusShip: (y, L, w = !0) => {
|
|
2425
|
+
var S, T;
|
|
2426
|
+
hiddenOrther.value = w, (S = shipsLayer.value) == null || S.setVisible(!w), w || rerenderShip(), (T = largeAmountShipsLayer.value) == null || T.setVisible(!1), findShip(y, L);
|
|
2382
2427
|
},
|
|
2383
2428
|
clearShipData,
|
|
2384
2429
|
showTracks,
|
|
2385
2430
|
removeAllTrackLayer,
|
|
2386
2431
|
switchFilterItem,
|
|
2387
2432
|
rerenderShip,
|
|
2388
|
-
switchGreenDot: () =>
|
|
2433
|
+
switchGreenDot: () => k(!1),
|
|
2389
2434
|
zoomTruckIcon,
|
|
2390
|
-
renderTruckTrack: (y,
|
|
2391
|
-
showTrackLayer.value = !0, renderTrack(y,
|
|
2435
|
+
renderTruckTrack: (y, L, w) => {
|
|
2436
|
+
showTrackLayer.value = !0, renderTrack(y, L, w, LENGTH_UNIT.KM, "truck");
|
|
2392
2437
|
},
|
|
2393
2438
|
drawCustomContent,
|
|
2394
2439
|
removerLayer: removeShipTrackLineFeatureByIndex,
|
|
@@ -2398,22 +2443,23 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
2398
2443
|
},
|
|
2399
2444
|
getZoomAndCenter: () => {
|
|
2400
2445
|
var T;
|
|
2401
|
-
const y = (T =
|
|
2446
|
+
const y = (T = n.value) == null ? void 0 : T.getView();
|
|
2402
2447
|
if (!y) return null;
|
|
2403
|
-
const
|
|
2404
|
-
return { zoom:
|
|
2448
|
+
const L = Math.round(Number(y.getZoom())), { lon: w, lat: S } = transformUtils.mercatorToLonLat(y.getCenter());
|
|
2449
|
+
return { zoom: L, center: [w, S] };
|
|
2405
2450
|
},
|
|
2406
2451
|
setCenter: (y) => {
|
|
2407
|
-
var
|
|
2408
|
-
const
|
|
2409
|
-
if (!
|
|
2410
|
-
const
|
|
2411
|
-
|
|
2452
|
+
var S;
|
|
2453
|
+
const L = (S = n.value) == null ? void 0 : S.getView();
|
|
2454
|
+
if (!L) return null;
|
|
2455
|
+
const w = new Point(y);
|
|
2456
|
+
L.setCenter(transform(w.getCoordinates(), projection.data, projection.mercator));
|
|
2412
2457
|
},
|
|
2458
|
+
deleteLabelFromArray: deleteLabelFromArrayById,
|
|
2413
2459
|
drawPolygonTool,
|
|
2414
2460
|
setMapInstance: g,
|
|
2415
2461
|
store: {
|
|
2416
|
-
|
|
2462
|
+
showDrawLayer: () => showDrawLayer.value
|
|
2417
2463
|
},
|
|
2418
2464
|
config: {
|
|
2419
2465
|
mapZoom,
|
|
@@ -2423,12 +2469,12 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
2423
2469
|
transform: transformUtils,
|
|
2424
2470
|
format: formatUtils
|
|
2425
2471
|
}
|
|
2426
|
-
}), (y,
|
|
2472
|
+
}), (y, L) => (openBlock(), createElementBlock("div", {
|
|
2427
2473
|
class: "map-page map-container",
|
|
2428
2474
|
ref_key: "pageRef",
|
|
2429
|
-
ref:
|
|
2475
|
+
ref: l
|
|
2430
2476
|
}, [
|
|
2431
|
-
|
|
2477
|
+
L[0] || (L[0] = createElementVNode("div", {
|
|
2432
2478
|
id: "map",
|
|
2433
2479
|
class: "map"
|
|
2434
2480
|
}, null, -1)),
|
|
@@ -2438,9 +2484,9 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
2438
2484
|
"view-mode": y.viewMode,
|
|
2439
2485
|
"disable-green-dot": d.value,
|
|
2440
2486
|
"show-track-layer": unref(showTrackLayer),
|
|
2441
|
-
"map-tile-mode":
|
|
2442
|
-
onSwitchGreenDot:
|
|
2443
|
-
onSwitchMapTile:
|
|
2487
|
+
"map-tile-mode": M.value,
|
|
2488
|
+
onSwitchGreenDot: k,
|
|
2489
|
+
onSwitchMapTile: b
|
|
2444
2490
|
}, {
|
|
2445
2491
|
toolPanel: withCtx(() => [
|
|
2446
2492
|
renderSlot(y.$slots, "toolPanel", {}, void 0, !0)
|
|
@@ -2450,20 +2496,20 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
2450
2496
|
y.viewMode !== "WxMiniprogram" ? (openBlock(), createElementBlock(Fragment, { key: 1 }, [
|
|
2451
2497
|
createVNode(ScaleLine, {
|
|
2452
2498
|
ref_key: "scaleLineControl",
|
|
2453
|
-
ref:
|
|
2499
|
+
ref: r
|
|
2454
2500
|
}, null, 512),
|
|
2455
2501
|
createVNode(ZoomControl, {
|
|
2456
2502
|
ref_key: "zoomControl",
|
|
2457
|
-
ref:
|
|
2503
|
+
ref: i
|
|
2458
2504
|
}, null, 512)
|
|
2459
2505
|
], 64)) : createCommentVNode("", !0),
|
|
2460
2506
|
createVNode(Copyright, {
|
|
2461
2507
|
type: y.logoType,
|
|
2462
|
-
"map-tile":
|
|
2508
|
+
"map-tile": M.value
|
|
2463
2509
|
}, null, 8, ["type", "map-tile"])
|
|
2464
2510
|
], 512));
|
|
2465
2511
|
}
|
|
2466
|
-
}), Map = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-
|
|
2512
|
+
}), Map = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-6751c660"]]), ZhMap = withInstall(Map);
|
|
2467
2513
|
export {
|
|
2468
2514
|
BaseMapType as B,
|
|
2469
2515
|
CDN_URL as C,
|