zhihao-ui 1.3.20 → 1.3.22
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/{Map-DlXenBet.js → Map-B9MkYv-r.js} +874 -848
- package/dist/es/index.js +1 -1
- package/dist/index.css +1 -1
- package/dist/types/components/Map/Map.vue.d.ts +1 -1
- package/dist/types/components/Map/function/ship/index.d.ts +4 -1
- package/dist/types/components/Map/function/ship/style.d.ts +2 -2
- package/dist/types/components/Map/index.d.ts +3 -3
- package/dist/types/components/Map/utils/shipOverlay.d.ts +1 -1
- package/dist/umd/index.css +1 -1
- package/dist/umd/index.umd.cjs +17 -17
- package/package.json +1 -1
|
@@ -4,16 +4,16 @@ import { _ as _export_sfc } from "./Button-CGndQwez.js";
|
|
|
4
4
|
import { w as withInstall } from "./utils-D2wHR1YB.js";
|
|
5
5
|
const _hoisted_1$2 = { id: "scale-line-container" }, _sfc_main$2 = /* @__PURE__ */ defineComponent({
|
|
6
6
|
__name: "scaleLine",
|
|
7
|
-
setup(e, { expose:
|
|
8
|
-
return
|
|
9
|
-
setScaleLine: (
|
|
10
|
-
|
|
7
|
+
setup(e, { expose: l }) {
|
|
8
|
+
return l({
|
|
9
|
+
setScaleLine: (s, c) => {
|
|
10
|
+
c || (c = "metric");
|
|
11
11
|
const t = new ScaleLine$1({
|
|
12
|
-
units:
|
|
13
|
-
}),
|
|
14
|
-
|
|
12
|
+
units: c
|
|
13
|
+
}), L = document.getElementById("scale-line-container");
|
|
14
|
+
L && (t.setTarget(L), s.addControl(t));
|
|
15
15
|
}
|
|
16
|
-
}), (
|
|
16
|
+
}), (s, c) => (openBlock(), createElementBlock("div", _hoisted_1$2));
|
|
17
17
|
}
|
|
18
18
|
}), ScaleLine = /* @__PURE__ */ _export_sfc(_sfc_main$2, [["__scopeId", "data-v-2bc5dee8"]]), _hoisted_1$1 = { class: "zoom" }, _sfc_main$1 = /* @__PURE__ */ defineComponent({
|
|
19
19
|
__name: "zoomControl",
|
|
@@ -24,28 +24,28 @@ const _hoisted_1$2 = { id: "scale-line-container" }, _sfc_main$2 = /* @__PURE__
|
|
|
24
24
|
}
|
|
25
25
|
},
|
|
26
26
|
setup(e) {
|
|
27
|
-
const
|
|
28
|
-
console.log("props",
|
|
29
|
-
const
|
|
27
|
+
const l = e;
|
|
28
|
+
console.log("props", l);
|
|
29
|
+
const n = () => {
|
|
30
30
|
console.log("props");
|
|
31
|
-
const { setZoom:
|
|
32
|
-
if (!
|
|
31
|
+
const { setZoom: c, getZoom: t, getInstall: L } = l.mapInstance.methods;
|
|
32
|
+
if (!L()) return;
|
|
33
33
|
const o = t();
|
|
34
|
-
o &&
|
|
35
|
-
},
|
|
36
|
-
const { setZoom:
|
|
37
|
-
if (!
|
|
34
|
+
o && c(o + 1);
|
|
35
|
+
}, s = () => {
|
|
36
|
+
const { setZoom: c, getZoom: t, getInstall: L } = l.mapInstance.methods;
|
|
37
|
+
if (!L()) return;
|
|
38
38
|
const o = t();
|
|
39
|
-
o &&
|
|
39
|
+
o && c(o - 1);
|
|
40
40
|
};
|
|
41
|
-
return (
|
|
41
|
+
return (c, t) => (openBlock(), createElementBlock("div", _hoisted_1$1, [
|
|
42
42
|
createElementVNode("div", {
|
|
43
43
|
class: "button big-button",
|
|
44
|
-
onClick:
|
|
44
|
+
onClick: n
|
|
45
45
|
}, " + "),
|
|
46
46
|
createElementVNode("div", {
|
|
47
47
|
class: "button small-button",
|
|
48
|
-
onClick:
|
|
48
|
+
onClick: s
|
|
49
49
|
}, " - ")
|
|
50
50
|
]));
|
|
51
51
|
}
|
|
@@ -72,27 +72,27 @@ const _hoisted_1$2 = { id: "scale-line-container" }, _sfc_main$2 = /* @__PURE__
|
|
|
72
72
|
}, MAP_DEFAULT_CENTER = [114.84, 30.52], CDN_URL = "https://static.zhihaoscm.cn/", equatorialCircumference = 2003750834e-2;
|
|
73
73
|
var BASE_MAP_LINK = ((e) => (e.vectorTile = `https://t0.tianditu.gov.cn/vec_w/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=vec&TILEMATRIXSET=w&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}&tk=${TIAN_DI_TU_KEY}`, e.vectorTileMark = `https://t0.tianditu.gov.cn/cva_w/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=cva&TILEMATRIXSET=w&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}&tk=${TIAN_DI_TU_KEY}`, e.satelliteImgTile = `https://t0.tianditu.gov.cn/img_w/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=img&TILEMATRIXSET=w&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}&tk=${TIAN_DI_TU_KEY}`, e.satelliteImgTileMark = `https://t0.tianditu.gov.cn/cia_w/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=cia&TILEMATRIXSET=w&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}&tk=${TIAN_DI_TU_KEY}`, e.greenTile = `${CDN_URL}/map/tile/{z}/{x}/{y}.png`, e))(BASE_MAP_LINK || {}), LENGTH_UNIT = /* @__PURE__ */ ((e) => (e[e.M = 1] = "M", e[e.KM = 2] = "KM", e[e.NM = 3] = "NM", e))(LENGTH_UNIT || {});
|
|
74
74
|
function useMapInitializer() {
|
|
75
|
-
const e = ref(),
|
|
75
|
+
const e = ref(), l = () => e.value, n = () => l().getView(), s = () => {
|
|
76
76
|
var y;
|
|
77
|
-
return (y =
|
|
78
|
-
},
|
|
79
|
-
var
|
|
80
|
-
(
|
|
81
|
-
}, t = (y,
|
|
82
|
-
var
|
|
83
|
-
(
|
|
84
|
-
},
|
|
85
|
-
var
|
|
86
|
-
const y = (
|
|
77
|
+
return (y = n()) == null ? void 0 : y.getZoom();
|
|
78
|
+
}, c = (y) => {
|
|
79
|
+
var N;
|
|
80
|
+
(N = n()) == null || N.setZoom(y);
|
|
81
|
+
}, t = (y, N) => {
|
|
82
|
+
var $;
|
|
83
|
+
($ = n()) == null || $.setCenter(fromLonLat([y, N]));
|
|
84
|
+
}, L = () => {
|
|
85
|
+
var N;
|
|
86
|
+
const y = (N = n()) == null ? void 0 : N.getCenter();
|
|
87
87
|
return toLonLat(y);
|
|
88
|
-
},
|
|
88
|
+
}, m = () => {
|
|
89
89
|
var y;
|
|
90
|
-
return (y =
|
|
91
|
-
}, o = new Map$2(), r = (y,
|
|
92
|
-
p(
|
|
93
|
-
const
|
|
94
|
-
zoom:
|
|
95
|
-
center: fromLonLat(
|
|
90
|
+
return (y = l()) == null ? void 0 : y.getSize();
|
|
91
|
+
}, o = new Map$2(), r = (y, N) => {
|
|
92
|
+
p(N);
|
|
93
|
+
const $ = {
|
|
94
|
+
zoom: N.zoom,
|
|
95
|
+
center: fromLonLat(N.center),
|
|
96
96
|
minZoom: MAP_ZOOM.min,
|
|
97
97
|
maxZoom: MAP_ZOOM.max,
|
|
98
98
|
constrainResolution: !0,
|
|
@@ -109,7 +109,7 @@ function useMapInitializer() {
|
|
|
109
109
|
o.get("satelliteImgTile"),
|
|
110
110
|
o.get("satelliteImgTileMark")
|
|
111
111
|
],
|
|
112
|
-
view: new View(
|
|
112
|
+
view: new View($)
|
|
113
113
|
});
|
|
114
114
|
e.value = f;
|
|
115
115
|
}, p = (y) => {
|
|
@@ -145,279 +145,279 @@ function useMapInitializer() {
|
|
|
145
145
|
}));
|
|
146
146
|
};
|
|
147
147
|
return {
|
|
148
|
-
getInstall:
|
|
149
|
-
getView:
|
|
150
|
-
getZoom:
|
|
151
|
-
setZoom:
|
|
148
|
+
getInstall: l,
|
|
149
|
+
getView: n,
|
|
150
|
+
getZoom: s,
|
|
151
|
+
setZoom: c,
|
|
152
152
|
setCenter: t,
|
|
153
|
-
getCenter:
|
|
154
|
-
getSize:
|
|
153
|
+
getCenter: L,
|
|
154
|
+
getSize: m,
|
|
155
155
|
initMap: r,
|
|
156
156
|
setBaseLayerMap: p
|
|
157
157
|
};
|
|
158
158
|
}
|
|
159
|
-
const convertSixHundredThousandToLatLng = function(e,
|
|
160
|
-
const
|
|
161
|
-
return [Number(e) / 6e5,
|
|
162
|
-
}, calculateCirclePoints = (e,
|
|
163
|
-
const
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
], t = transformExtent(
|
|
159
|
+
const convertSixHundredThousandToLatLng = function(e, l) {
|
|
160
|
+
const n = Number(l) / 6e5;
|
|
161
|
+
return [Number(e) / 6e5, n];
|
|
162
|
+
}, calculateCirclePoints = (e, l) => {
|
|
163
|
+
const n = fromLonLat(e), s = l * 1e3, c = [
|
|
164
|
+
n[0] - s,
|
|
165
|
+
n[1] - s,
|
|
166
|
+
n[0] + s,
|
|
167
|
+
n[1] + s
|
|
168
|
+
], t = transformExtent(c, projection.mercator, projection.data);
|
|
169
169
|
return {
|
|
170
170
|
leftTopPoint: { lng: t[0], lat: t[3] },
|
|
171
171
|
rightTopPoint: { lng: t[2], lat: t[3] },
|
|
172
172
|
rightBottomPoint: { lng: t[2], lat: t[1] },
|
|
173
173
|
leftBottomPoint: { lng: t[0], lat: t[1] }
|
|
174
174
|
};
|
|
175
|
-
}, formatLength = function(e,
|
|
176
|
-
const
|
|
177
|
-
let
|
|
178
|
-
switch (console.log(
|
|
175
|
+
}, formatLength = function(e, l) {
|
|
176
|
+
const s = getLength(e);
|
|
177
|
+
let c = "";
|
|
178
|
+
switch (console.log(l, LENGTH_UNIT), l) {
|
|
179
179
|
case LENGTH_UNIT.M:
|
|
180
|
-
|
|
180
|
+
c = Math.round(s * 100) / 100 + " m";
|
|
181
181
|
break;
|
|
182
182
|
case LENGTH_UNIT.KM:
|
|
183
|
-
|
|
183
|
+
c = Math.round(s / 1e3 * 100) / 100 + " km";
|
|
184
184
|
break;
|
|
185
185
|
case LENGTH_UNIT.NM:
|
|
186
|
-
|
|
186
|
+
c = (Math.round(s / 1e3 * 100) / 100 / 1.852).toFixed(2) + " nm";
|
|
187
187
|
break;
|
|
188
188
|
}
|
|
189
|
-
return
|
|
189
|
+
return c;
|
|
190
190
|
};
|
|
191
191
|
function lonLatToMercator(e) {
|
|
192
|
-
const
|
|
193
|
-
let
|
|
194
|
-
return
|
|
192
|
+
const l = e[0] * equatorialCircumference / 180;
|
|
193
|
+
let n = Math.log(Math.tan((90 + e[1]) * Math.PI / 360)) / (Math.PI / 180);
|
|
194
|
+
return n = n * equatorialCircumference / 180, [l, n];
|
|
195
195
|
}
|
|
196
196
|
function getIconFont(unicode = "") {
|
|
197
197
|
return unicode.indexOf("&") !== -1 && (unicode = unicode.replace("&", "&")), unicode.indexOf("&") !== -1 && (unicode = unicode.replace("&", "&")), eval('("' + unicode.replace("&#x", "\\u").replace(";", "") + '")');
|
|
198
198
|
}
|
|
199
199
|
const getIconStyle = (e) => {
|
|
200
|
-
const
|
|
200
|
+
const l = new Text({
|
|
201
201
|
font: "Normal 14px map-iconfont",
|
|
202
202
|
text: getIconFont(e),
|
|
203
203
|
fill: new Fill({ color: "#fff" }),
|
|
204
204
|
offsetY: -14
|
|
205
205
|
});
|
|
206
206
|
return new Style({
|
|
207
|
-
text:
|
|
207
|
+
text: l,
|
|
208
208
|
zIndex: 100
|
|
209
209
|
});
|
|
210
|
-
}, mercatorToLonLat = (e,
|
|
211
|
-
const
|
|
212
|
-
let
|
|
213
|
-
return
|
|
210
|
+
}, mercatorToLonLat = (e, l = "lonlat") => {
|
|
211
|
+
const n = { lon: 0, lat: 0 }, s = e[0] / equatorialCircumference * 180;
|
|
212
|
+
let c = e[1] / equatorialCircumference * 180;
|
|
213
|
+
return c = 180 / Math.PI * (2 * Math.atan(Math.exp(c * Math.PI / 180)) - Math.PI / 2), n.lon = s, n.lat = c, l === "lonlat" ? n : [s, c];
|
|
214
214
|
}, formatMinutesToDDHHMM = (e) => {
|
|
215
|
-
const
|
|
216
|
-
let t = `${String(
|
|
217
|
-
return
|
|
218
|
-
}, useCarTrackManager = (e,
|
|
219
|
-
let
|
|
220
|
-
const
|
|
215
|
+
const l = hooks.duration(e, "minutes"), n = Math.floor(l.asDays()), s = l.hours(), c = l.minutes();
|
|
216
|
+
let t = `${String(c).padStart(2, "0")}分`;
|
|
217
|
+
return s !== 0 && (t = `${String(s).padStart(2, "0")}时${t}`), n !== 0 && (t = `${String(n).padStart(2, "0")}天${t}`), t;
|
|
218
|
+
}, useCarTrackManager = (e, l) => {
|
|
219
|
+
let n = null;
|
|
220
|
+
const s = async (p) => {
|
|
221
221
|
if (!e || (console.log("vehicleInfo", p), !(p != null && p.lon && (p != null && p.lat)))) return;
|
|
222
222
|
const y = Math.abs(Number(p.lon)) > 180 ? convertSixHundredThousandToLatLng(p.lon, p.lat) : [p.lon, p.lat];
|
|
223
|
-
|
|
224
|
-
const
|
|
225
|
-
|
|
226
|
-
},
|
|
227
|
-
const
|
|
228
|
-
|
|
223
|
+
c(p, fromLonLat(y));
|
|
224
|
+
const N = e == null ? void 0 : e.getView(), $ = new Point(y);
|
|
225
|
+
N.setCenter(transform($.getCoordinates(), projection.data, projection.mercator));
|
|
226
|
+
}, c = (p, y) => {
|
|
227
|
+
const N = `${CDN_URL}map/car-icon.gif`;
|
|
228
|
+
n || (n = new Overlay({
|
|
229
229
|
element: document.createElement("div"),
|
|
230
230
|
positioning: "center-center",
|
|
231
231
|
stopEvent: !1
|
|
232
232
|
// 允许交互事件穿透
|
|
233
|
-
}), e.addOverlay(
|
|
234
|
-
const
|
|
235
|
-
|
|
233
|
+
}), e.addOverlay(n));
|
|
234
|
+
const $ = n.getElement();
|
|
235
|
+
$.style.backgroundImage = `url(${N})`, $.style.width = "80px", $.style.height = "80px";
|
|
236
236
|
const f = (p == null ? void 0 : p.drc) || "";
|
|
237
|
-
|
|
237
|
+
$.style.transform = `rotate(${f}deg)`, $.style.backgroundSize = "cover", n == null || n.setPosition(y);
|
|
238
238
|
};
|
|
239
239
|
return {
|
|
240
|
-
location:
|
|
240
|
+
location: s,
|
|
241
241
|
remove: () => {
|
|
242
|
-
const p =
|
|
242
|
+
const p = n == null ? void 0 : n.getElement();
|
|
243
243
|
p && (p.innerHTML = "");
|
|
244
244
|
},
|
|
245
|
-
renderTrack: (p, y,
|
|
246
|
-
|
|
245
|
+
renderTrack: (p, y, N) => {
|
|
246
|
+
l.render(p, y, N, "truck", 1e3);
|
|
247
247
|
},
|
|
248
248
|
setCenter: (p) => {
|
|
249
|
-
|
|
249
|
+
l.setCenter(p);
|
|
250
250
|
},
|
|
251
251
|
closeTrack: () => {
|
|
252
|
-
|
|
252
|
+
l.close();
|
|
253
253
|
},
|
|
254
254
|
playTrack: (p, y) => {
|
|
255
|
-
|
|
255
|
+
l.play(p, y);
|
|
256
256
|
}
|
|
257
257
|
};
|
|
258
258
|
};
|
|
259
259
|
var 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 || {}), SHIP_DIRECT = /* @__PURE__ */ ((e) => (e.left = "left", e.right = "right", e.front = "front", e.up = "up", e.down = "down", e.back = "back", e))(SHIP_DIRECT || {});
|
|
260
260
|
const useTrackManager = (e) => {
|
|
261
|
-
const
|
|
262
|
-
let
|
|
263
|
-
const
|
|
261
|
+
const l = /* @__PURE__ */ new Map(), n = {};
|
|
262
|
+
let s = null;
|
|
263
|
+
const c = "--";
|
|
264
264
|
let t = null;
|
|
265
|
-
const
|
|
266
|
-
element:
|
|
265
|
+
const L = document.createElement("div"), m = new Overlay({
|
|
266
|
+
element: L,
|
|
267
267
|
positioning: "top-left",
|
|
268
268
|
stopEvent: !1,
|
|
269
269
|
className: "track-label-popup"
|
|
270
270
|
});
|
|
271
|
-
let o, r, p, y,
|
|
272
|
-
const H = 5, B = [], W = (
|
|
273
|
-
var
|
|
274
|
-
for (B.unshift(
|
|
275
|
-
const g = B.pop(), b =
|
|
276
|
-
b && ((
|
|
271
|
+
let o, r, p, y, N, $ = !1, f = Date.now(), v, k = 0, x = null, C = 20, A = !1;
|
|
272
|
+
const H = 5, B = [], W = (i) => {
|
|
273
|
+
var u;
|
|
274
|
+
for (B.unshift(i); B.length > H; ) {
|
|
275
|
+
const g = B.pop(), b = l.get(g);
|
|
276
|
+
b && ((u = b.getSource()) == null || u.clear(), e == null || e.removeLayer(b), l.delete(g), delete n[g]);
|
|
277
277
|
}
|
|
278
278
|
};
|
|
279
|
-
let
|
|
280
|
-
const
|
|
281
|
-
if (
|
|
279
|
+
let d = "";
|
|
280
|
+
const w = ["#ff0000", "#00ff00", "#0079ff", "#ffa500", "#800080", "#008080", "#ffc0cb", "#800000", "#000080", "#808000"], a = debounce(() => {
|
|
281
|
+
if (s && n[s] && l.get(s).getVisible() && A) {
|
|
282
282
|
console.log("reRenderTrackLine------------");
|
|
283
|
-
const
|
|
284
|
-
|
|
283
|
+
const i = cloneDeep(M(s, n[s]));
|
|
284
|
+
ae(s, i);
|
|
285
285
|
}
|
|
286
|
-
}, 300), M = (
|
|
286
|
+
}, 300), M = (i, u) => {
|
|
287
287
|
let g = [];
|
|
288
|
-
const b = Math.max(1, Math.floor(
|
|
289
|
-
return g =
|
|
288
|
+
const b = Math.max(1, Math.floor(u.length / C));
|
|
289
|
+
return g = u.filter((T, _) => _ % b === 0).map((T, _) => {
|
|
290
290
|
if (Number(T.lon) > 180 || Number(T.lat) > 180) {
|
|
291
|
-
const [
|
|
292
|
-
T.lon =
|
|
291
|
+
const [D, z] = convertSixHundredThousandToLatLng(T.lon, T.lat);
|
|
292
|
+
T.lon = D, T.lat = z;
|
|
293
293
|
}
|
|
294
|
-
return T.center = [T.lon, T.lat], T.centerPoint = lonLatToMercator(T.center), T.time = hooks(T.createdAt).format("YYYY-MM-DD HH:mm:ss"), T.id =
|
|
294
|
+
return T.center = [T.lon, T.lat], T.centerPoint = lonLatToMercator(T.center), T.time = hooks(T.createdAt).format("YYYY-MM-DD HH:mm:ss"), T.id = i, T.index = _, T;
|
|
295
295
|
}), g;
|
|
296
|
-
},
|
|
297
|
-
if (!e || (
|
|
296
|
+
}, F = async (i, u, g, b = "ship", E = 200) => {
|
|
297
|
+
if (!e || (u = u == null ? void 0 : u.reverse(), m && b === "ship" && (e != null && e.getOverlays().getArray().includes(m) || e.addOverlay(m)), (u == null ? void 0 : u.length) < 2))
|
|
298
298
|
return;
|
|
299
|
-
W(
|
|
300
|
-
const T = Object.keys(
|
|
301
|
-
|
|
302
|
-
},
|
|
303
|
-
const
|
|
299
|
+
W(i), s = i, n[i] = u, C = E;
|
|
300
|
+
const T = Object.keys(n).findIndex((_) => _ === i) || 0;
|
|
301
|
+
d = g || w[T > 10 ? 10 : T], A = !0, await R(), await se(s);
|
|
302
|
+
}, V = (i) => {
|
|
303
|
+
const u = new VectorSource();
|
|
304
304
|
return new VectorLayer({
|
|
305
|
-
source:
|
|
305
|
+
source: u,
|
|
306
306
|
visible: !1,
|
|
307
307
|
// 默认隐藏
|
|
308
|
-
className: `track-layer-${
|
|
308
|
+
className: `track-layer-${i}`,
|
|
309
309
|
renderBuffer: 1024
|
|
310
310
|
// 增大渲染缓冲区
|
|
311
311
|
});
|
|
312
|
-
}, O = (
|
|
313
|
-
|
|
314
|
-
var
|
|
315
|
-
const b = g ===
|
|
316
|
-
|
|
317
|
-
}),
|
|
318
|
-
},
|
|
319
|
-
const
|
|
320
|
-
if (!
|
|
321
|
-
const T =
|
|
322
|
-
|
|
312
|
+
}, O = (i) => {
|
|
313
|
+
l.forEach((u, g) => {
|
|
314
|
+
var E;
|
|
315
|
+
const b = g === i;
|
|
316
|
+
u.getVisible() !== b && (u.setVisible(b), e.getLayers().getArray().includes(u) || e.addLayer(u), b || (E = u.getSource()) == null || E.clear());
|
|
317
|
+
}), s = i;
|
|
318
|
+
}, R = async () => {
|
|
319
|
+
const i = s;
|
|
320
|
+
if (!l.has(i)) {
|
|
321
|
+
const T = V(i);
|
|
322
|
+
l.set(i, T);
|
|
323
323
|
}
|
|
324
|
-
await O(
|
|
325
|
-
const
|
|
324
|
+
await O(i);
|
|
325
|
+
const u = d || "", g = n[i] || [];
|
|
326
326
|
if (!(g && g.length > 1)) return [];
|
|
327
327
|
let b = [];
|
|
328
|
-
b = M(
|
|
329
|
-
const
|
|
330
|
-
b.length >= 2 && await
|
|
331
|
-
},
|
|
332
|
-
const b = new LineString(
|
|
328
|
+
b = M(i, g);
|
|
329
|
+
const E = b.map((T) => T.centerPoint);
|
|
330
|
+
b.length >= 2 && await P(i, E, u);
|
|
331
|
+
}, P = (i, u, g) => {
|
|
332
|
+
const b = new LineString(u), E = l.get(i).getSource(), T = E.getFeatureById(i);
|
|
333
333
|
if (T)
|
|
334
|
-
T.setGeometry(b), T.setId(
|
|
334
|
+
T.setGeometry(b), T.setId(i), T.setStyle(Z(g)), x = T;
|
|
335
335
|
else {
|
|
336
|
-
const
|
|
337
|
-
|
|
336
|
+
const _ = new Feature({ geometry: b });
|
|
337
|
+
_.setId(i), _.set("type", "line"), _.setStyle(Z(g)), E.addFeature(_), x = _;
|
|
338
338
|
}
|
|
339
|
-
return
|
|
340
|
-
}, Z = (
|
|
339
|
+
return x;
|
|
340
|
+
}, Z = (i) => new Style({
|
|
341
341
|
stroke: new Stroke({
|
|
342
|
-
color:
|
|
342
|
+
color: i,
|
|
343
343
|
width: 2
|
|
344
344
|
})
|
|
345
|
-
}), K = (
|
|
346
|
-
const b =
|
|
347
|
-
if (
|
|
345
|
+
}), K = (i, u, g) => {
|
|
346
|
+
const b = i == null ? void 0 : i.get("trackId");
|
|
347
|
+
if (i && b && u === "hover") {
|
|
348
348
|
e.getTargetElement().style.cursor = b ? "pointer" : "";
|
|
349
|
-
const
|
|
350
|
-
|
|
349
|
+
const E = i.get("data"), T = Q(E), _ = g == null ? void 0 : g.coordinate;
|
|
350
|
+
_ && (L.querySelector(".popup-content"), L.innerHTML = T, m == null || m.setPosition(_));
|
|
351
351
|
} else
|
|
352
|
-
|
|
353
|
-
}, Q = (
|
|
354
|
-
if (!(
|
|
355
|
-
let
|
|
356
|
-
return
|
|
352
|
+
m && m.setPosition(void 0);
|
|
353
|
+
}, Q = (i) => {
|
|
354
|
+
if (!(i != null && i.time)) return;
|
|
355
|
+
let u = "";
|
|
356
|
+
return i != null && i.stayTime && (u = `
|
|
357
357
|
<div class="item w-100">
|
|
358
358
|
<div class="item-label">停泊时间约</div>
|
|
359
|
-
<div class="item-item">${formatMinutesToDDHHMM(Number(
|
|
359
|
+
<div class="item-item">${formatMinutesToDDHHMM(Number(i.stayTime))}</div>
|
|
360
360
|
</div>
|
|
361
361
|
`), `
|
|
362
362
|
<div class="track-point-popup">
|
|
363
363
|
<div class="item">
|
|
364
364
|
<div class="item-label">状态</div>
|
|
365
|
-
<div class="item-item">${
|
|
365
|
+
<div class="item-item">${i != null && i.sailStatus ? SHIP_SAIL_STATUS[i.sailStatus] : c}</div>
|
|
366
366
|
</div>
|
|
367
367
|
<div class="item">
|
|
368
368
|
<div class="item-label">航速</div>
|
|
369
|
-
<div class="item-item">${
|
|
369
|
+
<div class="item-item">${i.speed || c}</div>
|
|
370
370
|
</div>
|
|
371
371
|
<div class="item">
|
|
372
372
|
<div class="item-label">艏向</div>
|
|
373
|
-
<div class="item-item">${
|
|
373
|
+
<div class="item-item">${i.hdg || c}</div>
|
|
374
374
|
</div>
|
|
375
375
|
<div class="item">
|
|
376
376
|
<div class="item-label">航向</div>
|
|
377
|
-
<div class="item-item">${
|
|
377
|
+
<div class="item-item">${i.cog || c}</div>
|
|
378
378
|
</div>
|
|
379
379
|
<div class="item">
|
|
380
380
|
<div class="item-label">经度</div>
|
|
381
|
-
<div class="item-item">${
|
|
381
|
+
<div class="item-item">${i.lon || c}</div>
|
|
382
382
|
</div>
|
|
383
383
|
<div class="item">
|
|
384
384
|
<div class="item-label">纬度</div>
|
|
385
|
-
<div class="item-item">${
|
|
385
|
+
<div class="item-item">${i.lat || c}</div>
|
|
386
386
|
</div>
|
|
387
387
|
<div class="item w-100">
|
|
388
388
|
<div class="item-label">时间</div>
|
|
389
|
-
<div class="item-item">${
|
|
389
|
+
<div class="item-item">${i.time}</div>
|
|
390
390
|
</div>
|
|
391
|
-
${
|
|
391
|
+
${u ?? u}
|
|
392
392
|
</div>`;
|
|
393
|
-
},
|
|
394
|
-
const g =
|
|
395
|
-
const
|
|
393
|
+
}, U = (i) => {
|
|
394
|
+
const g = i.map((D) => {
|
|
395
|
+
const z = e.getPixelFromCoordinate(fromLonLat(D.center));
|
|
396
396
|
return {
|
|
397
|
-
|
|
398
|
-
original:
|
|
399
|
-
pixel:
|
|
397
|
+
...D,
|
|
398
|
+
original: D,
|
|
399
|
+
pixel: z,
|
|
400
400
|
distance: 0
|
|
401
401
|
// 先初始化,后续计算
|
|
402
402
|
};
|
|
403
403
|
});
|
|
404
404
|
let b = 0;
|
|
405
405
|
g[0].distance = 0;
|
|
406
|
-
for (let
|
|
407
|
-
const
|
|
408
|
-
b += Math.sqrt(X * X +
|
|
406
|
+
for (let D = 1; D < g.length; D++) {
|
|
407
|
+
const z = g[D - 1].pixel, Y = g[D].pixel, X = Y[0] - z[0], S = Y[1] - z[1];
|
|
408
|
+
b += Math.sqrt(X * X + S * S), g[D].distance = b;
|
|
409
409
|
}
|
|
410
|
-
const
|
|
411
|
-
(
|
|
410
|
+
const E = g.filter(
|
|
411
|
+
(D, z) => z === 0 || z === g.length - 1
|
|
412
412
|
), T = [];
|
|
413
|
-
for (let
|
|
414
|
-
const
|
|
415
|
-
if (T.push(
|
|
416
|
-
const Y =
|
|
417
|
-
for (let G = 1; G <=
|
|
418
|
-
const j =
|
|
413
|
+
for (let D = 0; D < E.length; D++) {
|
|
414
|
+
const z = E[D];
|
|
415
|
+
if (T.push(z), D < E.length - 1) {
|
|
416
|
+
const Y = E[D + 1], X = Y.distance - z.distance, S = Math.floor(X / 100);
|
|
417
|
+
for (let G = 1; G <= S; G++) {
|
|
418
|
+
const j = z.distance + G * 100;
|
|
419
419
|
if (j >= Y.distance) break;
|
|
420
|
-
const q =
|
|
420
|
+
const q = J(
|
|
421
421
|
g,
|
|
422
422
|
j
|
|
423
423
|
);
|
|
@@ -426,29 +426,29 @@ const useTrackManager = (e) => {
|
|
|
426
426
|
}
|
|
427
427
|
}
|
|
428
428
|
return Array.from(
|
|
429
|
-
new Map(T.map((
|
|
430
|
-
).map((
|
|
431
|
-
|
|
429
|
+
new Map(T.map((D) => [D.distance.toFixed(2), D])).values()
|
|
430
|
+
).map((D) => ({
|
|
431
|
+
...D.original,
|
|
432
432
|
// 优先保留原始数据
|
|
433
|
-
|
|
433
|
+
...D,
|
|
434
434
|
// 覆盖坐标等计算属性
|
|
435
|
-
coord:
|
|
435
|
+
coord: D.coord,
|
|
436
436
|
// 确保使用插值后的坐标
|
|
437
|
-
pixel:
|
|
438
|
-
distance:
|
|
437
|
+
pixel: D.pixel,
|
|
438
|
+
distance: D.distance
|
|
439
439
|
}));
|
|
440
440
|
};
|
|
441
|
-
function
|
|
442
|
-
for (let g = 1; g <
|
|
443
|
-
const b =
|
|
444
|
-
if (
|
|
445
|
-
const T = (
|
|
441
|
+
function J(i, u) {
|
|
442
|
+
for (let g = 1; g < i.length; g++) {
|
|
443
|
+
const b = i[g - 1], E = i[g];
|
|
444
|
+
if (u >= b.distance && u <= E.distance) {
|
|
445
|
+
const T = (u - b.distance) / (E.distance - b.distance), _ = b.pixel[0] + T * (E.pixel[0] - b.pixel[0]), D = b.pixel[1] + T * (E.pixel[1] - b.pixel[1]), z = e == null ? void 0 : e.getCoordinateFromPixel([_, D]);
|
|
446
446
|
return {
|
|
447
447
|
...b,
|
|
448
448
|
// 继承前一个点的属性(可调整)
|
|
449
|
-
coord:
|
|
450
|
-
pixel: [
|
|
451
|
-
distance:
|
|
449
|
+
coord: z,
|
|
450
|
+
pixel: [_, D],
|
|
451
|
+
distance: u,
|
|
452
452
|
original: void 0
|
|
453
453
|
// 明确标记为插值生成点
|
|
454
454
|
};
|
|
@@ -456,26 +456,26 @@ const useTrackManager = (e) => {
|
|
|
456
456
|
}
|
|
457
457
|
return null;
|
|
458
458
|
}
|
|
459
|
-
const
|
|
460
|
-
await
|
|
461
|
-
const g =
|
|
462
|
-
|
|
463
|
-
const
|
|
464
|
-
e.addOverlay(
|
|
459
|
+
const ae = async (i, u) => {
|
|
460
|
+
await le(), await ge(i);
|
|
461
|
+
const g = U(u), b = g.map((T) => de(T));
|
|
462
|
+
l.get(i).getSource().addFeatures(b), me(i, g, u, d), g.forEach((T) => {
|
|
463
|
+
const _ = ue(i, d, T);
|
|
464
|
+
e.addOverlay(_);
|
|
465
465
|
});
|
|
466
|
-
}, de = (
|
|
467
|
-
const
|
|
468
|
-
geometry: new Point(
|
|
469
|
-
data:
|
|
466
|
+
}, de = (i) => {
|
|
467
|
+
const u = new Feature({
|
|
468
|
+
geometry: new Point(i.centerPoint),
|
|
469
|
+
data: i
|
|
470
470
|
});
|
|
471
|
-
|
|
471
|
+
u.set("type", "track_point"), u.set("trackId", i.id), u.set("data", i);
|
|
472
472
|
let g = [
|
|
473
|
-
...fe(
|
|
473
|
+
...fe(i, d)
|
|
474
474
|
];
|
|
475
|
-
return (
|
|
476
|
-
}, ue = (
|
|
475
|
+
return (i.index === 0 || i.index === n[i.id].length - 1) && (g = [...ve(i)], u.set("type", "track_begin")), i.state !== void 0 && i.state !== null && (g = [...ye(i)], u.set("type", "track_icon")), u.setStyle(g), u;
|
|
476
|
+
}, ue = (i, u, g) => {
|
|
477
477
|
const b = document.createElement("div");
|
|
478
|
-
b.className = "track-overlay-label", b.style.position = "relative", b.style.backgroundColor = "rgba(255,255,255,0.8)", b.style.border = `1px solid ${
|
|
478
|
+
b.className = "track-overlay-label", b.style.position = "relative", b.style.backgroundColor = "rgba(255,255,255,0.8)", b.style.border = `1px solid ${u}`, b.style.fontSize = "12px", b.innerHTML = `
|
|
479
479
|
<span>${g.time}</span>
|
|
480
480
|
<svg
|
|
481
481
|
style="position: absolute;left: -20px;top: 0;"
|
|
@@ -485,10 +485,10 @@ const useTrackManager = (e) => {
|
|
|
485
485
|
height="20">
|
|
486
486
|
<line x1="0" y1="20"
|
|
487
487
|
x2="20" y2="0"
|
|
488
|
-
stroke="${
|
|
488
|
+
stroke="${u}"
|
|
489
489
|
stroke-width="1" />
|
|
490
490
|
`;
|
|
491
|
-
const
|
|
491
|
+
const E = new Overlay({
|
|
492
492
|
element: b,
|
|
493
493
|
position: fromLonLat(g.center),
|
|
494
494
|
positioning: "top-left",
|
|
@@ -496,18 +496,18 @@ const useTrackManager = (e) => {
|
|
|
496
496
|
stopEvent: !1,
|
|
497
497
|
className: "track-label-time-overlay"
|
|
498
498
|
});
|
|
499
|
-
return
|
|
500
|
-
},
|
|
501
|
-
const
|
|
502
|
-
|
|
499
|
+
return E.set("class", "track-label-overlay"), E.set("trackId", i), E;
|
|
500
|
+
}, le = () => {
|
|
501
|
+
const i = e == null ? void 0 : e.getOverlays().getArray(), u = i == null ? void 0 : i.filter((g) => g.get("class") === "track-label-overlay");
|
|
502
|
+
u && u.length > 0 && u.forEach((g) => {
|
|
503
503
|
g.setPosition(void 0), g.dispose();
|
|
504
504
|
});
|
|
505
|
-
}, ge = (
|
|
506
|
-
const
|
|
507
|
-
|
|
508
|
-
g.get("type") !== "line" &&
|
|
505
|
+
}, ge = (i) => {
|
|
506
|
+
const u = l.get(i).getSource();
|
|
507
|
+
u.forEachFeature((g) => {
|
|
508
|
+
g.get("type") !== "line" && u.removeFeature(g);
|
|
509
509
|
});
|
|
510
|
-
}, fe = (
|
|
510
|
+
}, fe = (i, u) => (`${i.time}`, [
|
|
511
511
|
new Style({
|
|
512
512
|
// 扩大交互热区
|
|
513
513
|
image: new CircleStyle({
|
|
@@ -518,39 +518,39 @@ const useTrackManager = (e) => {
|
|
|
518
518
|
// 轨迹点样式
|
|
519
519
|
new Style({
|
|
520
520
|
image: new CircleStyle({
|
|
521
|
-
fill: new Fill({ color:
|
|
521
|
+
fill: new Fill({ color: u }),
|
|
522
522
|
stroke: new Stroke({ color: "#fff", width: 2 }),
|
|
523
523
|
radius: 3
|
|
524
524
|
})
|
|
525
525
|
})
|
|
526
526
|
// textStyle,
|
|
527
|
-
]), ye = (
|
|
528
|
-
const
|
|
527
|
+
]), ye = (i) => {
|
|
528
|
+
const u = "#E31818", g = "#1890FF", b = "", E = new Style({
|
|
529
529
|
text: new Text({
|
|
530
530
|
font: "Normal 22px map-iconfont",
|
|
531
531
|
text: getIconFont(b),
|
|
532
532
|
offsetY: -10,
|
|
533
533
|
fill: new Fill({
|
|
534
|
-
color: Number(
|
|
534
|
+
color: Number(i.state) === 0 ? u : Number(i.state) === 1 ? g : ""
|
|
535
535
|
})
|
|
536
536
|
}),
|
|
537
537
|
zIndex: 99
|
|
538
|
-
}),
|
|
539
|
-
return Number(
|
|
540
|
-
},
|
|
541
|
-
const
|
|
542
|
-
T || (
|
|
543
|
-
const
|
|
544
|
-
for (let
|
|
538
|
+
}), _ = getIconStyle(""), z = getIconStyle(""), Y = [];
|
|
539
|
+
return Number(i.state) === 0 ? Y.push(_) : Number(i.state) === 1 && Y.push(z), Y.push(E), Y;
|
|
540
|
+
}, me = (i, u, g, b) => {
|
|
541
|
+
const E = u || [], T = u.length;
|
|
542
|
+
T || (E.push(g[0]), E.push(g[g.length - 1]));
|
|
543
|
+
const _ = [];
|
|
544
|
+
for (let z = 0; z < T - 1; z++) {
|
|
545
545
|
let Y;
|
|
546
|
-
const X =
|
|
547
|
-
if (
|
|
548
|
-
Y = g[
|
|
546
|
+
const X = u[z], S = (u[z + 1].index + X.index) / 2;
|
|
547
|
+
if (S % 2 === 0)
|
|
548
|
+
Y = g[S].centerPoint;
|
|
549
549
|
else {
|
|
550
|
-
const G = g[Math.floor(
|
|
550
|
+
const G = g[Math.floor(S)], j = g[Math.ceil(S)];
|
|
551
551
|
if (G && j) {
|
|
552
|
-
const [q,
|
|
553
|
-
Y = [(q +
|
|
552
|
+
const [q, ee] = G.centerPoint, [te, oe] = j.centerPoint;
|
|
553
|
+
Y = [(q + te) / 2, (ee + oe) / 2];
|
|
554
554
|
}
|
|
555
555
|
}
|
|
556
556
|
if (Y) {
|
|
@@ -564,69 +564,69 @@ const useTrackManager = (e) => {
|
|
|
564
564
|
text: getIconFont(""),
|
|
565
565
|
fill: new Fill({ color: b }),
|
|
566
566
|
// 设置箭头旋转 角度转为弧度
|
|
567
|
-
rotation:
|
|
568
|
-
|
|
569
|
-
|
|
567
|
+
rotation: ie(
|
|
568
|
+
u[z].center,
|
|
569
|
+
u[z + 1].center
|
|
570
570
|
) * (Math.PI / 180)
|
|
571
571
|
})
|
|
572
572
|
})
|
|
573
|
-
),
|
|
573
|
+
), _.push(G);
|
|
574
574
|
}
|
|
575
575
|
}
|
|
576
|
-
const
|
|
577
|
-
|
|
578
|
-
},
|
|
579
|
-
var T,
|
|
580
|
-
const
|
|
576
|
+
const D = l.get(i).getSource();
|
|
577
|
+
D == null || D.addFeatures(_);
|
|
578
|
+
}, se = (i) => {
|
|
579
|
+
var T, _;
|
|
580
|
+
const u = e.getView(), g = (T = l == null ? void 0 : l.get(i)) == null ? void 0 : T.getSource(), b = x || (i ? g == null ? void 0 : g.getFeatureById(i) : null);
|
|
581
581
|
if (!b) return;
|
|
582
|
-
const
|
|
583
|
-
if (
|
|
582
|
+
const E = (_ = b == null ? void 0 : b.getGeometry()) == null ? void 0 : _.getExtent();
|
|
583
|
+
if (E != null && E.length)
|
|
584
584
|
try {
|
|
585
|
-
const
|
|
586
|
-
|
|
587
|
-
} catch (
|
|
588
|
-
console.log(
|
|
585
|
+
const D = buffer(E, Math.max(E[2] - E[0], E[3] - E[1]) * 0.02);
|
|
586
|
+
u.fit(D);
|
|
587
|
+
} catch (D) {
|
|
588
|
+
console.log(D);
|
|
589
589
|
}
|
|
590
|
-
},
|
|
591
|
-
const
|
|
590
|
+
}, ve = (i) => {
|
|
591
|
+
const u = "", E = i.index === 0 ? "#fcdc3f" : "#ff0000";
|
|
592
592
|
return [new Style({
|
|
593
593
|
text: new Text({
|
|
594
594
|
font: "Normal 14px map-iconfont",
|
|
595
|
-
text: getIconFont(
|
|
596
|
-
fill: new Fill({ color:
|
|
595
|
+
text: getIconFont(u),
|
|
596
|
+
fill: new Fill({ color: E })
|
|
597
597
|
}),
|
|
598
598
|
zIndex: 101
|
|
599
599
|
})];
|
|
600
|
-
},
|
|
601
|
-
console.log("清除所有的轨迹-----"),
|
|
600
|
+
}, he = () => {
|
|
601
|
+
console.log("清除所有的轨迹-----"), I(), l.forEach((u) => {
|
|
602
602
|
var g;
|
|
603
|
-
(g =
|
|
604
|
-
}), Object.keys(
|
|
605
|
-
|
|
606
|
-
}),
|
|
607
|
-
}, we = (
|
|
608
|
-
const
|
|
609
|
-
|
|
603
|
+
(g = u.getSource()) == null || g.clear(), e == null || e.removeLayer(u);
|
|
604
|
+
}), Object.keys(n).forEach((u) => {
|
|
605
|
+
l.delete(u), delete n[u];
|
|
606
|
+
}), A = !1, le();
|
|
607
|
+
}, we = (i) => {
|
|
608
|
+
const u = l.get(i || s);
|
|
609
|
+
u == null || u.setVisible(!1);
|
|
610
610
|
const g = e.getOverlays().getArray();
|
|
611
611
|
for (let b = 0; b < g.length; ) {
|
|
612
|
-
const
|
|
613
|
-
|
|
612
|
+
const E = g[b];
|
|
613
|
+
E.get("class") === "track-label-overlay" ? (E.setPosition(void 0), e.removeOverlay(E)) : b++;
|
|
614
614
|
}
|
|
615
|
-
|
|
616
|
-
},
|
|
615
|
+
I();
|
|
616
|
+
}, Le = (i, u = LENGTH_UNIT.NM) => {
|
|
617
617
|
const g = {
|
|
618
|
-
id:
|
|
618
|
+
id: i,
|
|
619
619
|
length: "--"
|
|
620
|
-
},
|
|
621
|
-
(
|
|
622
|
-
), T = new LineString(
|
|
623
|
-
return g.length = formatLength(T,
|
|
624
|
-
},
|
|
625
|
-
xe(String(
|
|
626
|
-
}, xe = (
|
|
627
|
-
const g =
|
|
628
|
-
b && ke(b,
|
|
629
|
-
},
|
|
620
|
+
}, E = (n[i] || []).map(
|
|
621
|
+
(_) => transform([_.lon, _.lat], projection.data, projection.mercator)
|
|
622
|
+
), T = new LineString(E);
|
|
623
|
+
return g.length = formatLength(T, u) || "--", g;
|
|
624
|
+
}, pe = (i, u) => {
|
|
625
|
+
xe(String(i), u);
|
|
626
|
+
}, xe = (i, u) => {
|
|
627
|
+
const g = n[String(i)], b = g == null ? void 0 : g.map((E) => [E.lon, E.lat]);
|
|
628
|
+
b && ke(b, u);
|
|
629
|
+
}, re = new Style({
|
|
630
630
|
text: new Text({
|
|
631
631
|
font: "700 20px map-iconfont",
|
|
632
632
|
text: getIconFont(""),
|
|
@@ -634,35 +634,35 @@ const useTrackManager = (e) => {
|
|
|
634
634
|
rotation: 0
|
|
635
635
|
// 初始旋转角度
|
|
636
636
|
})
|
|
637
|
-
}), be = (
|
|
638
|
-
var
|
|
639
|
-
const g = Number(50 *
|
|
640
|
-
if (k = (k + g *
|
|
641
|
-
|
|
637
|
+
}), be = (i, u) => {
|
|
638
|
+
var S, G;
|
|
639
|
+
const g = Number(50 * u), b = ((S = i.frameState) == null ? void 0 : S.time) ?? Date.now(), E = b - f;
|
|
640
|
+
if (k = (k + g * E / 1e6) % 2, f = b, k >= 1) {
|
|
641
|
+
I();
|
|
642
642
|
return;
|
|
643
643
|
}
|
|
644
644
|
const T = r.getCoordinateAt(
|
|
645
645
|
k > 1 ? 2 - k : k
|
|
646
|
-
),
|
|
646
|
+
), _ = r.getCoordinateAt(
|
|
647
647
|
k > 1 ? k - 0.01 : k
|
|
648
|
-
),
|
|
648
|
+
), D = r.getCoordinateAt(
|
|
649
649
|
k > 1 ? 2 - k : k + 0.01
|
|
650
|
-
), Y =
|
|
651
|
-
mercatorToLonLat(
|
|
652
|
-
mercatorToLonLat(
|
|
650
|
+
), Y = ie(
|
|
651
|
+
mercatorToLonLat(_, "array"),
|
|
652
|
+
mercatorToLonLat(D, "array")
|
|
653
653
|
) * Math.PI / 180;
|
|
654
|
-
(G =
|
|
655
|
-
const X = getVectorContext(
|
|
656
|
-
X.setStyle(
|
|
654
|
+
(G = re.getText()) == null || G.setRotation(Y), y.setCoordinates(T);
|
|
655
|
+
const X = getVectorContext(i);
|
|
656
|
+
X.setStyle(re), X.drawGeometry(y), e == null || e.render();
|
|
657
657
|
}, Me = () => {
|
|
658
|
-
var
|
|
659
|
-
|
|
660
|
-
},
|
|
661
|
-
|
|
662
|
-
}, ke = (
|
|
663
|
-
|
|
658
|
+
var i;
|
|
659
|
+
$ = !0, f = Date.now(), k = 0, y = ((i = p.getGeometry()) == null ? void 0 : i.clone()) || new Point([0, 0]), t && (v == null || v.on("postrender", t)), N == null || N.setGeometry(void 0);
|
|
660
|
+
}, I = () => {
|
|
661
|
+
$ && ($ = !1, N == null || N.setGeometry(void 0), t && v && v.un("postrender", t), v && (e == null || e.removeLayer(v)), v = null, N = null);
|
|
662
|
+
}, ke = (i, u) => {
|
|
663
|
+
$ && I(), o = new Polyline({
|
|
664
664
|
factor: 1e6
|
|
665
|
-
}).writeGeometry(new LineString(
|
|
665
|
+
}).writeGeometry(new LineString(i)), r = new Polyline({
|
|
666
666
|
factor: 1e6
|
|
667
667
|
}).readGeometry(o, {
|
|
668
668
|
dataProjection: projection.data,
|
|
@@ -672,51 +672,51 @@ const useTrackManager = (e) => {
|
|
|
672
672
|
geometry: new Point(r.getFirstCoordinate())
|
|
673
673
|
});
|
|
674
674
|
const g = p.getGeometry();
|
|
675
|
-
y = g ? g.clone() : new Point([0, 0]),
|
|
675
|
+
y = g ? g.clone() : new Point([0, 0]), N = new Feature({
|
|
676
676
|
type: "geoMarker",
|
|
677
|
-
style:
|
|
677
|
+
style: re,
|
|
678
678
|
geometry: y
|
|
679
|
-
}),
|
|
679
|
+
}), v = new VectorLayer({
|
|
680
680
|
source: new VectorSource({
|
|
681
|
-
features: [
|
|
681
|
+
features: [N]
|
|
682
682
|
})
|
|
683
|
-
}), e == null || e.addLayer(
|
|
684
|
-
},
|
|
685
|
-
function b(
|
|
686
|
-
return 180 * (
|
|
683
|
+
}), e == null || e.addLayer(v), t = (b) => be(b, u), Me();
|
|
684
|
+
}, ie = (i, u, g) => {
|
|
685
|
+
function b(S) {
|
|
686
|
+
return 180 * (S % (2 * Math.PI)) / Math.PI;
|
|
687
687
|
}
|
|
688
|
-
function
|
|
689
|
-
return
|
|
688
|
+
function E(S) {
|
|
689
|
+
return S % 360 * Math.PI / 180;
|
|
690
690
|
}
|
|
691
|
-
function T(
|
|
691
|
+
function T(S) {
|
|
692
692
|
var G;
|
|
693
|
-
if (!
|
|
694
|
-
if (!Array.isArray(
|
|
695
|
-
if ((
|
|
696
|
-
return
|
|
697
|
-
if (
|
|
693
|
+
if (!S) throw new Error("Coordinate is required");
|
|
694
|
+
if (!Array.isArray(S)) {
|
|
695
|
+
if ((S == null ? void 0 : S.type) === "Feature" && (S == null ? void 0 : S.geometry) !== null && ((G = S == null ? void 0 : S.geometry) == null ? void 0 : G.type) === "Point")
|
|
696
|
+
return S == null ? void 0 : S.geometry.coordinates;
|
|
697
|
+
if (S.type === "Point") return (S == null ? void 0 : S.coordinates) || [];
|
|
698
698
|
}
|
|
699
|
-
if (Array.isArray(
|
|
700
|
-
return
|
|
699
|
+
if (Array.isArray(S) && S.length >= 2 && !Array.isArray(S[0]) && !Array.isArray(S[1]))
|
|
700
|
+
return S;
|
|
701
701
|
throw new Error(
|
|
702
702
|
"Coordinate must be GeoJSON Point or an Array of numbers"
|
|
703
703
|
);
|
|
704
704
|
}
|
|
705
|
-
function
|
|
705
|
+
function _(S, G, j = {}) {
|
|
706
706
|
if (j.final)
|
|
707
|
-
return function(
|
|
708
|
-
return (
|
|
709
|
-
}(
|
|
710
|
-
const q = T(
|
|
711
|
-
return b(Math.atan2(Ce,
|
|
707
|
+
return function(Te, Se) {
|
|
708
|
+
return (_(Se, Te) + 180) % 360;
|
|
709
|
+
}(S, G);
|
|
710
|
+
const q = T(S), ee = T(G), te = E(q[0]), oe = E(ee[0]), ce = E(q[1]), ne = E(ee[1]), Ce = Math.sin(oe - te) * Math.cos(ne), Ee = Math.cos(ce) * Math.sin(ne) - Math.sin(ce) * Math.cos(ne) * Math.cos(oe - te);
|
|
711
|
+
return b(Math.atan2(Ce, Ee));
|
|
712
712
|
}
|
|
713
|
-
function
|
|
714
|
-
return !isNaN(
|
|
713
|
+
function D(S) {
|
|
714
|
+
return !isNaN(S) && S !== null && !Array.isArray(S);
|
|
715
715
|
}
|
|
716
|
-
function
|
|
717
|
-
return
|
|
716
|
+
function z(S, G = {}, j = {}) {
|
|
717
|
+
return S || console.log("Coordinates are required"), Array.isArray(S) || console.log("Coordinates must be an Array"), S.length < 2 && console.log("Coordinates must be at least 2 numbers long"), (!D(S[0]) || !D(S[1])) && console.log("Coordinates must contain numbers"), Y({ type: "Point", coordinates: S }, G, j);
|
|
718
718
|
}
|
|
719
|
-
function Y(
|
|
719
|
+
function Y(S, G = {}, j = {}) {
|
|
720
720
|
const q = {
|
|
721
721
|
type: "Feature",
|
|
722
722
|
id: "",
|
|
@@ -724,34 +724,36 @@ const useTrackManager = (e) => {
|
|
|
724
724
|
bbox: {},
|
|
725
725
|
geometry: {}
|
|
726
726
|
};
|
|
727
|
-
return j.id !== void 0 && (q.id = j.id), j.bbox && (q.bbox = j.bbox), q.properties = G, q.geometry =
|
|
727
|
+
return j.id !== void 0 && (q.id = j.id), j.bbox && (q.bbox = j.bbox), q.properties = G, q.geometry = S, q;
|
|
728
728
|
}
|
|
729
|
-
const X =
|
|
729
|
+
const X = _(z(i), z(u), g);
|
|
730
730
|
return X < 0 ? 360 + X : X;
|
|
731
731
|
};
|
|
732
732
|
return {
|
|
733
|
-
render:
|
|
734
|
-
remove:
|
|
735
|
-
play:
|
|
736
|
-
setCenter:
|
|
733
|
+
render: F,
|
|
734
|
+
remove: he,
|
|
735
|
+
play: pe,
|
|
736
|
+
setCenter: se,
|
|
737
737
|
close: we,
|
|
738
|
-
getLength:
|
|
738
|
+
getLength: Le,
|
|
739
739
|
handleTrackMapEvent: K,
|
|
740
|
-
reRenderTrackLine:
|
|
740
|
+
reRenderTrackLine: a
|
|
741
741
|
};
|
|
742
742
|
};
|
|
743
743
|
function useShipOverlay(e) {
|
|
744
|
-
|
|
745
|
-
ref(null)
|
|
746
|
-
|
|
747
|
-
"--
|
|
748
|
-
|
|
744
|
+
console.log("useShipOverlay", e);
|
|
745
|
+
const l = ref(null), n = computed(() => ({
|
|
746
|
+
"--overlay-color": "#FFF",
|
|
747
|
+
"--bg-color1": e.colors && e.colors[0] ? e.colors[0] : "#ffffff",
|
|
748
|
+
// 默认第一个颜色
|
|
749
|
+
"--bg-color2": e.colors && e.colors[1] ? e.colors[1] : "#ffffff",
|
|
750
|
+
"--bg-color": "#ffffff",
|
|
749
751
|
position: "relative",
|
|
750
752
|
"pointer-events": "none"
|
|
751
|
-
})),
|
|
753
|
+
})), s = computed(() => ({
|
|
752
754
|
position: "relative",
|
|
753
755
|
"border-radius": "1px",
|
|
754
|
-
"background-color": "var(--bg
|
|
756
|
+
"background-color": "var(--content-bg)",
|
|
755
757
|
color: "#000",
|
|
756
758
|
padding: "2px 5px 2px 0px",
|
|
757
759
|
font: "500 Normal 12px",
|
|
@@ -760,17 +762,17 @@ function useShipOverlay(e) {
|
|
|
760
762
|
"white-space": "nowrap",
|
|
761
763
|
border: "1px solid #FFF",
|
|
762
764
|
"pointer-events": "auto",
|
|
763
|
-
transition:
|
|
765
|
+
// 'transition': 'background-color 0.5s ease, border 0.5s ease',
|
|
764
766
|
"z-index": "1",
|
|
765
767
|
display: "flex",
|
|
766
768
|
"align-items": "center",
|
|
767
|
-
animation: e.selected ? "blink 1.5s ease-in-out infinite" : "none"
|
|
768
|
-
// 动画开关
|
|
769
|
-
})),
|
|
769
|
+
animation: e.selected ? e.colors && e.colors.length >= 2 ? "blink-dual 2s ease-in-out infinite" : "blink-single 1.5s ease-in-out infinite" : "none"
|
|
770
|
+
// "animation": props.selected ? 'blink 1.5s ease-in-out infinite' : 'none', // 动画开关
|
|
771
|
+
})), c = computed(() => ({
|
|
770
772
|
width: "14px",
|
|
771
773
|
height: "14px",
|
|
772
774
|
margin: "1px 5px 1px 1px",
|
|
773
|
-
"background-color": "var(--bg
|
|
775
|
+
"background-color": "var(--attention-bg)"
|
|
774
776
|
})), t = computed(() => ({
|
|
775
777
|
position: "absolute",
|
|
776
778
|
top: "0px",
|
|
@@ -784,19 +786,19 @@ function useShipOverlay(e) {
|
|
|
784
786
|
left: "-20px"
|
|
785
787
|
}));
|
|
786
788
|
return () => h("div", {
|
|
787
|
-
ref:
|
|
789
|
+
ref: l,
|
|
788
790
|
class: "ship-overlay-container",
|
|
789
|
-
style:
|
|
791
|
+
style: n.value
|
|
790
792
|
}, [
|
|
791
793
|
h(
|
|
792
794
|
"div",
|
|
793
795
|
{
|
|
794
796
|
class: "ship-overlay-content",
|
|
795
|
-
style:
|
|
797
|
+
style: s.value
|
|
796
798
|
},
|
|
797
799
|
[
|
|
798
800
|
h("div", {
|
|
799
|
-
style: e.selected ?
|
|
801
|
+
style: e.selected ? c.value : {}
|
|
800
802
|
}, ""),
|
|
801
803
|
h("div", {
|
|
802
804
|
class: "text",
|
|
@@ -851,43 +853,43 @@ function useShipOverlay(e) {
|
|
|
851
853
|
]);
|
|
852
854
|
}
|
|
853
855
|
ref([]);
|
|
854
|
-
function addOverlay(e,
|
|
855
|
-
if (
|
|
856
|
-
const
|
|
857
|
-
element:
|
|
856
|
+
function addOverlay(e, l, n, s) {
|
|
857
|
+
if (l) {
|
|
858
|
+
const c = new Overlay({
|
|
859
|
+
element: n,
|
|
858
860
|
positioning: "top-left",
|
|
859
|
-
id: "label-" + (
|
|
861
|
+
id: "label-" + (s == null ? void 0 : s.id),
|
|
860
862
|
offset: [20, -20],
|
|
861
863
|
autoPan: !1,
|
|
862
|
-
position:
|
|
863
|
-
className:
|
|
864
|
+
position: l,
|
|
865
|
+
className: s.blinking ? "ship-label-overlay-blinking" : "ship-label-overlay"
|
|
864
866
|
});
|
|
865
|
-
|
|
867
|
+
c.set("class", "zh-map-ship-overlay"), e.addOverlay(c);
|
|
866
868
|
}
|
|
867
869
|
}
|
|
868
870
|
const getShipDirectPath = (e) => {
|
|
869
|
-
const { spd:
|
|
870
|
-
return
|
|
871
|
-
}, createShipStyle = (e,
|
|
872
|
-
const { shipData:
|
|
873
|
-
return initShipStyle(
|
|
871
|
+
const { spd: l, hdg: n, cog: s } = e;
|
|
872
|
+
return l ? n !== null && +n != 511 && s !== null ? s - +n >= 3 ? SHIP_DIRECT.right : s - +n <= -3 ? SHIP_DIRECT.left : SHIP_DIRECT.front : SHIP_DIRECT.front : "";
|
|
873
|
+
}, createShipStyle = (e, l) => {
|
|
874
|
+
const { shipData: n } = l.getProperties(), s = getShipType(e), c = getShipScale(e, n, s);
|
|
875
|
+
return initShipStyle(l, c, s);
|
|
874
876
|
}, getShipType = (e) => {
|
|
875
|
-
const
|
|
876
|
-
return
|
|
877
|
-
}, getShipScale = (e,
|
|
878
|
-
if (
|
|
879
|
-
const { len:
|
|
877
|
+
const l = e == null ? void 0 : e.getView().getZoom();
|
|
878
|
+
return l <= MAP_ZOOM.shipModelMax && l >= MAP_ZOOM.shipTriggleMin ? "ship" : "triangle";
|
|
879
|
+
}, getShipScale = (e, l, n) => {
|
|
880
|
+
if (n === "ship") {
|
|
881
|
+
const { len: s, wid: c } = l, t = 97, L = 20, o = 1 / (e == null ? void 0 : e.getView().getResolution()), r = s * o / t, p = c * o / L, y = Math.min(r, p);
|
|
880
882
|
return y < 0.2 ? 0.2 : y > 2 ? 2 : y;
|
|
881
883
|
}
|
|
882
884
|
return MAP_ZOOM.scaleNum;
|
|
883
|
-
}, initShipStyle = (e,
|
|
884
|
-
const { color:
|
|
885
|
+
}, initShipStyle = (e, l, n) => {
|
|
886
|
+
const { color: s, direct: c, isHighlight: t, shipData: L } = e.getProperties(), m = ((L == null ? void 0 : L.cog) - 90 + 360) % 360;
|
|
885
887
|
return new Style({
|
|
886
888
|
image: new Icon({
|
|
887
889
|
src: o(),
|
|
888
|
-
scale:
|
|
890
|
+
scale: l || MAP_ZOOM.scaleNum,
|
|
889
891
|
anchor: [0.5, 0.5],
|
|
890
|
-
rotation:
|
|
892
|
+
rotation: m * Math.PI / 180,
|
|
891
893
|
rotateWithView: !1
|
|
892
894
|
})
|
|
893
895
|
});
|
|
@@ -895,72 +897,73 @@ const getShipDirectPath = (e) => {
|
|
|
895
897
|
return `data:image/svg+xml;utf8,${encodeURIComponent(r())}`;
|
|
896
898
|
}
|
|
897
899
|
function r() {
|
|
898
|
-
switch (
|
|
900
|
+
switch (n) {
|
|
899
901
|
case "triangle":
|
|
900
902
|
return `<svg width="41" height="24" viewBox="0 0 41 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
901
903
|
<path d="M30.8843 12.6777L2.21343 21.7067C1.75559 21.8509 1.28947 21.509 1.28947 21.029L1.28947 2.97103C1.28947 2.49102 1.75558 2.14913 2.21342 2.29331L30.8843 11.3223C31.5471 11.531 31.5471 12.469 30.8843 12.6777Z"
|
|
902
|
-
fill="${
|
|
904
|
+
fill="${s}" stroke="${t ? "#FF2424" : "black"}" stroke-width="${t ? "2" : "0.578947"}" />
|
|
903
905
|
<!--path船航向左边或者向前-->
|
|
904
|
-
${
|
|
906
|
+
${c === SHIP_DIRECT.left && `<path d="M30 12L40 12L40 8" stroke="${t ? "#FF2424" : "black"}" stroke-width="2"/>`}
|
|
905
907
|
<!--path船航向右边-->
|
|
906
|
-
${
|
|
908
|
+
${c === SHIP_DIRECT.right && `<path d="M30 12L40 12L40 16" stroke="${t ? "#FF2424" : "black"}" stroke-width="2"/>`}
|
|
907
909
|
<!--path黑线无左右-->
|
|
908
|
-
${
|
|
910
|
+
${c === SHIP_DIRECT.front && `<path d="M30 12L40 12" stroke="${t ? "#FF2424" : "black"}" stroke-width="1.5"/>`}
|
|
909
911
|
</svg>
|
|
910
912
|
`;
|
|
911
913
|
case "ship":
|
|
912
914
|
return `<svg width="97" height="20" viewBox="0 0 97 20" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
913
915
|
<path d="M0.289474 17.3433L0.289474 2.65655C0.289474 2.28572 0.574654 1.97725 0.944343 1.9482L22.0544 0.289473L67.5204 0.289473C67.6295 0.289473 67.7372 0.314613 67.835 0.362943L86.0565 9.3629C86.5844 9.6236 86.5844 10.3763 86.0565 10.637L67.835 19.6371C67.7372 19.6854 67.6295 19.7105 67.5203 19.7105L22.0544 19.7105L0.944343 18.0517C0.574653 18.0226 0.289474 17.7142 0.289474 17.3433Z"
|
|
914
|
-
fill="${
|
|
915
|
-
${
|
|
916
|
-
${
|
|
917
|
-
${
|
|
916
|
+
fill="${s}" stroke="${t ? "#FF2424" : "black"}" stroke-width="${t ? "4" : "0.578947"}"/>
|
|
917
|
+
${c === SHIP_DIRECT.left && `<path d="M86 10L96 10L96 6" stroke="${t ? "#FF2424" : "black"}" stroke-width="1.5"/>`}
|
|
918
|
+
${c === SHIP_DIRECT.right && `<path d="M86 10L96 10L96 14" stroke="${t ? "#FF2424" : "black"}" stroke-width="1.5"/>`}
|
|
919
|
+
${c === SHIP_DIRECT.front && `<path d="M86 10L96 10" stroke="${t ? "#FF2424" : "black"}" stroke-width="1.5"/>`}
|
|
918
920
|
</svg>
|
|
919
921
|
`;
|
|
920
922
|
default:
|
|
921
923
|
return "";
|
|
922
924
|
}
|
|
923
925
|
}
|
|
924
|
-
}, selectedShipStyle = (e,
|
|
925
|
-
const
|
|
926
|
-
element:
|
|
927
|
-
position: fromLonLat([
|
|
928
|
-
id: "selected-" +
|
|
926
|
+
}, selectedShipStyle = (e, l) => {
|
|
927
|
+
const n = selectedShipElement(e, l), s = l.id, { lon: c, lat: t } = l, L = new Overlay({
|
|
928
|
+
element: n,
|
|
929
|
+
position: fromLonLat([c, t]),
|
|
930
|
+
id: "selected-" + s,
|
|
929
931
|
positioning: "center-center",
|
|
930
932
|
offset: [0, 5],
|
|
931
933
|
className: "ship-selected-overlay"
|
|
932
934
|
});
|
|
933
|
-
return
|
|
934
|
-
}, selectedShipElement = (e,
|
|
935
|
-
const
|
|
936
|
-
<svg style="transform:scale(${
|
|
935
|
+
return L.set("class", "ship-overlay-selected"), L;
|
|
936
|
+
}, selectedShipElement = (e, l) => {
|
|
937
|
+
const n = getShipType(e), s = getShipScale(e, l, n), c = n === "ship" ? 109 : 49, t = `
|
|
938
|
+
<svg style="transform:scale(${s});" xmlns="http://www.w3.org/2000/svg" width="${c}" height="${c}" viewBox="0 0 49 49" fill="none">
|
|
937
939
|
<path d="M1.99982 46.9998L1.99982 1.99982L46.9998 1.99982L46.9998 46.9998L1.99982 46.9998Z" fill="#FF2424" fill-opacity="0.2"/>
|
|
938
940
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M19.9998 0.5V3.5L3.49976 3.5V20H0.499756V0.500002L19.9998 0.5ZM45.4998 3.5H28.9998V0.5H48.4998V20H45.4998V3.5ZM48.4998 29L48.4998 48.5H28.9998V45.5H45.4998L45.4998 29H48.4998ZM3.49976 45.5L3.49976 29H0.499756L0.499758 48.5L19.9998 48.5V45.5L3.49976 45.5Z" fill="#FF2424"/>
|
|
939
941
|
</svg>
|
|
940
|
-
`,
|
|
941
|
-
return
|
|
942
|
-
}, createLabelStyle = (e,
|
|
943
|
-
const {
|
|
944
|
-
|
|
942
|
+
`, L = document.createElement("div");
|
|
943
|
+
return L.className = "ship-overlay-selected", L.innerHTML = t, L;
|
|
944
|
+
}, createLabelStyle = (e, l) => {
|
|
945
|
+
const { lon: n, lat: s, blinking: c } = l, t = createLabelElement(l);
|
|
946
|
+
n && s && addOverlay(e, fromLonLat([n, s]), t, { ...l, blinking: c });
|
|
945
947
|
}, createLabelElement = (e) => {
|
|
946
|
-
const
|
|
947
|
-
|
|
948
|
-
const
|
|
948
|
+
const l = document.createElement("div");
|
|
949
|
+
l.className = "ship-overlay-box", l.style.position = "relative";
|
|
950
|
+
const { lon: n, lat: s, blinking: c, blinkingColors: t, name: L } = e, m = createVNode({
|
|
949
951
|
setup() {
|
|
950
952
|
return useShipOverlay({
|
|
951
|
-
|
|
952
|
-
|
|
953
|
-
|
|
954
|
-
|
|
955
|
-
|
|
956
|
-
|
|
953
|
+
position: [n + 2e-3, s + 2e-3],
|
|
954
|
+
selected: c,
|
|
955
|
+
name: L,
|
|
956
|
+
colors: t || [],
|
|
957
|
+
existDevice: e == null ? void 0 : e.existDevice,
|
|
958
|
+
existMobile: e == null ? void 0 : e.existMobile,
|
|
959
|
+
existWaterGauge: e == null ? void 0 : e.existWaterGauge
|
|
957
960
|
});
|
|
958
961
|
}
|
|
959
962
|
});
|
|
960
|
-
return render(
|
|
963
|
+
return render(m, l), l;
|
|
961
964
|
}, getRightIcons = (e) => {
|
|
962
|
-
const
|
|
963
|
-
return e.existDevice &&
|
|
965
|
+
const l = [];
|
|
966
|
+
return e.existDevice && l.push(""), e.existMobile && l.push(""), e.existWaterGauge && l.push(""), l;
|
|
964
967
|
};
|
|
965
968
|
function getRandomLineDirection() {
|
|
966
969
|
const e = [
|
|
@@ -974,48 +977,48 @@ function getRandomLineDirection() {
|
|
|
974
977
|
return e[Math.floor(Math.random() * e.length)];
|
|
975
978
|
}
|
|
976
979
|
const devicePixelRatio = window.devicePixelRatio || 1;
|
|
977
|
-
function generateBase64Icon(e,
|
|
978
|
-
const
|
|
980
|
+
function generateBase64Icon(e, l, n = "left-bottom", s = 2) {
|
|
981
|
+
const c = document.createElement("canvas"), t = c.getContext("2d");
|
|
979
982
|
if (!t) return "";
|
|
980
|
-
const
|
|
983
|
+
const L = 2, m = 16, o = window.devicePixelRatio || 1, r = "500 12px Arial", p = "14px map-iconfont";
|
|
981
984
|
t.font = r;
|
|
982
|
-
const
|
|
985
|
+
const N = t.measureText(e).width;
|
|
983
986
|
t.font = p;
|
|
984
|
-
const
|
|
985
|
-
let
|
|
986
|
-
switch (
|
|
987
|
+
const $ = l.map((V) => ({ width: t.measureText(getIconFont(V)).width, height: 14 })), f = $.reduce((V, O) => V + O.width, 0), v = (l.length - 1) * s, k = L + N + f + v + L * 2, x = L + 16 + L;
|
|
988
|
+
let C, A, H = 0, B = 0, W = 0, d = 0, w = 0, a = 0;
|
|
989
|
+
switch (C = m + k, n) {
|
|
987
990
|
case "right-top":
|
|
988
|
-
|
|
991
|
+
A = m + x, H = 0, B = m + x, W = m, d = 0, w = m, a = 0;
|
|
989
992
|
break;
|
|
990
993
|
case "right-middle":
|
|
991
|
-
|
|
994
|
+
A = x, H = 0, B = x / 2, W = m, d = x / 2, w = m, a = 0;
|
|
992
995
|
break;
|
|
993
996
|
case "right-bottom":
|
|
994
|
-
|
|
997
|
+
A = m + x, H = 0, B = 0, W = m, d = m, w = m, a = m;
|
|
995
998
|
break;
|
|
996
999
|
case "left-top":
|
|
997
|
-
|
|
1000
|
+
A = m + x, H = k, B = m, W = k + m, d = x + m, w = 0, a = 0;
|
|
998
1001
|
break;
|
|
999
1002
|
case "left-middle":
|
|
1000
|
-
|
|
1003
|
+
A = x, H = k, B = x / 2, W = k + m, d = x / 2, w = 0, a = 0;
|
|
1001
1004
|
break;
|
|
1002
1005
|
case "left-bottom":
|
|
1003
|
-
|
|
1006
|
+
A = m + x, H = k, B = x, W = k + m, d = 0, w = 0, a = m;
|
|
1004
1007
|
break;
|
|
1005
1008
|
}
|
|
1006
|
-
|
|
1007
|
-
const M =
|
|
1008
|
-
t.strokeStyle = "#ffffff", t.lineWidth = 1, t.strokeText(e,
|
|
1009
|
-
let
|
|
1010
|
-
return
|
|
1011
|
-
const
|
|
1012
|
-
t.fillText(getIconFont(
|
|
1013
|
-
}),
|
|
1009
|
+
c.width = Math.round(C * o), c.height = Math.round(A * o), c.style.width = `${C}px`, c.style.height = `${A}px`, t.scale(o, o), t.clearRect(0, 0, C, A), t.beginPath(), t.moveTo(H, B), t.lineTo(W, d), t.strokeStyle = "#FFF", t.lineWidth = 1, t.stroke(), t.fillStyle = "#FFF", t.fillRect(w, a, k, x), t.font = r, t.textBaseline = "middle";
|
|
1010
|
+
const M = a + L + x / 2;
|
|
1011
|
+
t.strokeStyle = "#ffffff", t.lineWidth = 1, t.strokeText(e, w + L, M), t.fillStyle = "#000000", t.fillText(e, w + L, M), t.font = p, t.fillStyle = "#3370ff";
|
|
1012
|
+
let F = w + L + N + s;
|
|
1013
|
+
return l.forEach((V, O) => {
|
|
1014
|
+
const R = a + L + x / 2;
|
|
1015
|
+
t.fillText(getIconFont(V), F, R), F += $[O].width + s;
|
|
1016
|
+
}), c.toDataURL("image/png");
|
|
1014
1017
|
}
|
|
1015
1018
|
const createLabelFeatureStyle = (e) => {
|
|
1016
|
-
const { name:
|
|
1019
|
+
const { name: l, rightIcons: n } = e.getProperties(), s = getRandomLineDirection(), c = generateBase64Icon(l, n, s);
|
|
1017
1020
|
let t = [0, 0];
|
|
1018
|
-
switch (
|
|
1021
|
+
switch (s) {
|
|
1019
1022
|
case "right-top":
|
|
1020
1023
|
t = [0, 1];
|
|
1021
1024
|
break;
|
|
@@ -1037,7 +1040,7 @@ const createLabelFeatureStyle = (e) => {
|
|
|
1037
1040
|
}
|
|
1038
1041
|
return new Style({
|
|
1039
1042
|
image: new Icon({
|
|
1040
|
-
src:
|
|
1043
|
+
src: c,
|
|
1041
1044
|
anchor: t,
|
|
1042
1045
|
displacement: [0, 0],
|
|
1043
1046
|
scale: 1 / devicePixelRatio,
|
|
@@ -1046,191 +1049,210 @@ const createLabelFeatureStyle = (e) => {
|
|
|
1046
1049
|
})
|
|
1047
1050
|
});
|
|
1048
1051
|
}, useShipManager = (e) => {
|
|
1049
|
-
let
|
|
1050
|
-
const
|
|
1051
|
-
source:
|
|
1052
|
+
let l = null, n = null;
|
|
1053
|
+
const s = new VectorSource(), c = new VectorImageLayer({
|
|
1054
|
+
source: s,
|
|
1052
1055
|
className: "zh-map--ship-layer",
|
|
1053
1056
|
renderBuffer: 300,
|
|
1054
1057
|
zIndex: 101
|
|
1055
|
-
}), t = new VectorSource(),
|
|
1058
|
+
}), t = new VectorSource(), L = new VectorLayer({
|
|
1056
1059
|
source: t,
|
|
1057
1060
|
className: "zh-map--ship-label-layer",
|
|
1058
1061
|
zIndex: 102,
|
|
1059
1062
|
updateWhileInteracting: !1,
|
|
1060
1063
|
updateWhileAnimating: !1,
|
|
1061
|
-
declutter: function(
|
|
1062
|
-
|
|
1064
|
+
declutter: function(d, w) {
|
|
1065
|
+
try {
|
|
1066
|
+
return !(w && (w != null && w.get("selected")));
|
|
1067
|
+
} catch (a) {
|
|
1068
|
+
return console.log(a), !0;
|
|
1069
|
+
}
|
|
1063
1070
|
}
|
|
1064
1071
|
});
|
|
1065
|
-
e == null || e.addLayer(
|
|
1066
|
-
let
|
|
1067
|
-
const p = (
|
|
1068
|
-
if (!
|
|
1069
|
-
const
|
|
1070
|
-
if (
|
|
1071
|
-
const
|
|
1072
|
-
|
|
1072
|
+
e == null || e.addLayer(c), e == null || e.addLayer(L);
|
|
1073
|
+
let m = "", o = {}, r = {};
|
|
1074
|
+
const p = (d) => {
|
|
1075
|
+
if (!d || !e) return;
|
|
1076
|
+
const w = (n == null ? void 0 : n.id) || (l == null ? void 0 : l.get("id"));
|
|
1077
|
+
if (n) {
|
|
1078
|
+
const a = d.filter((M) => M.id === w);
|
|
1079
|
+
a.length === 0 ? d.push(n) : n = a[0];
|
|
1073
1080
|
}
|
|
1074
|
-
|
|
1075
|
-
}, y = (
|
|
1076
|
-
|
|
1077
|
-
|
|
1081
|
+
$(), f(!0), W(d), N();
|
|
1082
|
+
}, y = (d) => {
|
|
1083
|
+
var P;
|
|
1084
|
+
const w = (n == null ? void 0 : n.id) || (l == null ? void 0 : l.get("id")), a = fromLonLat([d == null ? void 0 : d.lon, d == null ? void 0 : d.lat]), M = ((P = r[d.id]) == null ? void 0 : P.blinkColors) || [], V = M[M.length - 1] || d.fill || "#04C900", O = getShipDirectPath(d), R = new Feature({
|
|
1085
|
+
geometry: new Point(a),
|
|
1078
1086
|
// 船舶数据
|
|
1079
|
-
shipData:
|
|
1080
|
-
id:
|
|
1081
|
-
name:
|
|
1082
|
-
selected:
|
|
1087
|
+
shipData: d,
|
|
1088
|
+
id: d.id,
|
|
1089
|
+
name: d.cnname || d.enname || d.id || "未命名船舶",
|
|
1090
|
+
selected: d.id === w,
|
|
1083
1091
|
// 图标
|
|
1084
|
-
rightIcons: getRightIcons(
|
|
1092
|
+
rightIcons: getRightIcons(d),
|
|
1085
1093
|
// 是否闪烁
|
|
1086
|
-
blinking:
|
|
1087
|
-
// 闪烁颜色
|
|
1088
|
-
blinkingColor:
|
|
1094
|
+
// blinking: attentionShips[ship.id] || false,
|
|
1095
|
+
// // 闪烁颜色
|
|
1096
|
+
// blinkingColor: attentionShipsColor[ship.id].blinkColors || '',
|
|
1089
1097
|
// 船舶颜色
|
|
1090
|
-
color:
|
|
1098
|
+
color: V,
|
|
1091
1099
|
// 船艏向的方向
|
|
1092
|
-
direct:
|
|
1093
|
-
// shipType,
|
|
1094
|
-
// scale:scaleNum,
|
|
1095
|
-
// rotation,
|
|
1100
|
+
direct: O,
|
|
1096
1101
|
// 高亮
|
|
1097
1102
|
isHighlight: !1
|
|
1098
1103
|
});
|
|
1099
|
-
return
|
|
1100
|
-
},
|
|
1101
|
-
if (!
|
|
1102
|
-
let
|
|
1103
|
-
if (console.log("selectedOverlay----------",
|
|
1104
|
-
const
|
|
1105
|
-
await
|
|
1104
|
+
return R.set("clickGeometry", new Circle(a)), R;
|
|
1105
|
+
}, N = async () => {
|
|
1106
|
+
if (!n || !e) return;
|
|
1107
|
+
let w = e.getOverlays().getArray().find((a) => a.get("class") == "ship-overlay-selected");
|
|
1108
|
+
if (console.log("selectedOverlay----------", w), w) {
|
|
1109
|
+
const a = selectedShipElement(e, n);
|
|
1110
|
+
await w.setElement(a), await w.setPosition(fromLonLat([n.lon, n.lat]));
|
|
1106
1111
|
} else
|
|
1107
|
-
|
|
1112
|
+
w = selectedShipStyle(e, n), w && e.addOverlay(w);
|
|
1108
1113
|
setTimeout(() => {
|
|
1109
|
-
var
|
|
1110
|
-
|
|
1114
|
+
var a;
|
|
1115
|
+
w && ((a = w.get("element")) != null && a.parentElement) && (w.get("element").parentElement.style.display = "block");
|
|
1111
1116
|
}, 20);
|
|
1112
|
-
},
|
|
1113
|
-
e &&
|
|
1114
|
-
}, f = (
|
|
1115
|
-
const
|
|
1116
|
-
if (
|
|
1117
|
-
for (let
|
|
1118
|
-
if (!
|
|
1119
|
-
const M =
|
|
1117
|
+
}, $ = () => {
|
|
1118
|
+
e && s && (s.clear(), t.clear(), f());
|
|
1119
|
+
}, f = (d) => {
|
|
1120
|
+
const w = e.getOverlays().getArray().filter((a) => a.get("class") == "zh-map-ship-overlay");
|
|
1121
|
+
if (w && w.length > 0) {
|
|
1122
|
+
for (let a = 0; a < w.length; a++)
|
|
1123
|
+
if (!d && w[a].get("class") !== "ship-overlay-selected") {
|
|
1124
|
+
const M = w[a];
|
|
1120
1125
|
M.setPosition(void 0), e.removeOverlay(M), M.dispose();
|
|
1121
1126
|
}
|
|
1122
1127
|
}
|
|
1123
|
-
},
|
|
1124
|
-
o =
|
|
1125
|
-
const
|
|
1126
|
-
for (const
|
|
1127
|
-
const
|
|
1128
|
-
if (O &&
|
|
1129
|
-
|
|
1130
|
-
|
|
1131
|
-
|
|
1128
|
+
}, v = (d, w) => {
|
|
1129
|
+
o = d, r = w;
|
|
1130
|
+
const a = e.getOverlays().getArray(), M = s.getFeatures();
|
|
1131
|
+
for (const F in o) {
|
|
1132
|
+
const V = o[F], O = a.find((P) => P.getId() === "label-" + F), R = M.find((P) => F === P.get("id"));
|
|
1133
|
+
if (O && R) {
|
|
1134
|
+
const P = w[F].blinkColors, { shipData: Z, name: K } = R == null ? void 0 : R.getProperties();
|
|
1135
|
+
R.set("color", P[P.length - 1] || ""), R.set("blinking", V);
|
|
1136
|
+
const Q = {
|
|
1137
|
+
...Z,
|
|
1138
|
+
blinking: V,
|
|
1139
|
+
blinkingColors: P || [],
|
|
1140
|
+
name: K + "(" + w[F].shipState + ")"
|
|
1141
|
+
}, U = O.getElement(), J = createLabelElement(Q);
|
|
1142
|
+
U && U !== J && O.setElement(J);
|
|
1132
1143
|
}
|
|
1133
1144
|
}
|
|
1134
|
-
}, k = (
|
|
1145
|
+
}, k = (d) => {
|
|
1135
1146
|
if (!e) return;
|
|
1136
|
-
const
|
|
1137
|
-
|
|
1138
|
-
O.set(
|
|
1147
|
+
const w = s.getFeatures(), a = t.getFeatures(), M = l ? l.get("id") : "", F = w.filter((P) => P.get("id") !== M), V = a == null ? void 0 : a.filter((P) => P.get("id") !== M), O = /* @__PURE__ */ new Map();
|
|
1148
|
+
d.forEach((P) => {
|
|
1149
|
+
O.set(P.id, !0);
|
|
1139
1150
|
});
|
|
1140
|
-
const
|
|
1141
|
-
|
|
1142
|
-
const Z =
|
|
1151
|
+
const R = e.getOverlays().getArray();
|
|
1152
|
+
F.forEach((P) => {
|
|
1153
|
+
const Z = P.get("id");
|
|
1143
1154
|
if (!O.has(Z))
|
|
1144
|
-
|
|
1155
|
+
P.setStyle([]);
|
|
1145
1156
|
else {
|
|
1146
|
-
const Q =
|
|
1147
|
-
(Q == null ? void 0 : Q.length) == 0 &&
|
|
1157
|
+
const Q = P.getStyle();
|
|
1158
|
+
(Q == null ? void 0 : Q.length) == 0 && P.setStyle(createShipStyle(e, P));
|
|
1148
1159
|
}
|
|
1149
|
-
const K =
|
|
1160
|
+
const K = R.find((Q) => Q.getId() === "label-" + Z);
|
|
1150
1161
|
K && K.setPosition(void 0);
|
|
1151
|
-
}),
|
|
1152
|
-
const Z =
|
|
1162
|
+
}), V.forEach((P) => {
|
|
1163
|
+
const Z = P.get("id");
|
|
1153
1164
|
if (!O.has(Z))
|
|
1154
|
-
|
|
1165
|
+
P.setStyle([]);
|
|
1155
1166
|
else {
|
|
1156
|
-
const K =
|
|
1157
|
-
(K == null ? void 0 : K.length) == 0 &&
|
|
1167
|
+
const K = P.getStyle();
|
|
1168
|
+
(K == null ? void 0 : K.length) == 0 && P.setStyle(createLabelFeatureStyle(P));
|
|
1158
1169
|
}
|
|
1159
1170
|
});
|
|
1160
|
-
},
|
|
1161
|
-
if (
|
|
1162
|
-
console.log("选中",
|
|
1163
|
-
const
|
|
1164
|
-
|
|
1171
|
+
}, x = (d) => {
|
|
1172
|
+
if (d) {
|
|
1173
|
+
console.log("选中", d);
|
|
1174
|
+
const w = s.getFeatures().find((M) => M.get("id") === d.id), a = t.getFeatures().find((M) => M.get("id") === d.id);
|
|
1175
|
+
w && (l = w), a && a.set("selected", !0), n = d, N();
|
|
1165
1176
|
} else
|
|
1166
|
-
console.log("取消选中"),
|
|
1167
|
-
},
|
|
1168
|
-
if (
|
|
1169
|
-
const M =
|
|
1170
|
-
if (e.getTargetElement().style.cursor =
|
|
1171
|
-
|
|
1172
|
-
const
|
|
1173
|
-
|
|
1177
|
+
console.log("取消选中"), n = null, l = null, H();
|
|
1178
|
+
}, C = debounce((d, w, a) => {
|
|
1179
|
+
if (d) {
|
|
1180
|
+
const M = d.get("shipData"), F = d.get("id");
|
|
1181
|
+
if (e.getTargetElement().style.cursor = F ? "pointer" : "", w === "click" && (x(M), a && a(F)), w === "hover") {
|
|
1182
|
+
m && m !== F && A(), m = F;
|
|
1183
|
+
const V = s.getFeatures().find((O) => O.get("id") === m);
|
|
1184
|
+
V == null || V.set("isHighlight", !0), V == null || V.setStyle(createShipStyle(e, V));
|
|
1174
1185
|
}
|
|
1175
1186
|
} else
|
|
1176
|
-
e.getTargetElement().style.cursor = "",
|
|
1177
|
-
}, 10),
|
|
1178
|
-
const
|
|
1179
|
-
|
|
1187
|
+
e.getTargetElement().style.cursor = "", A();
|
|
1188
|
+
}, 10), A = () => {
|
|
1189
|
+
const d = m ? s.getFeatures().find((w) => w.get("id") === m) : null;
|
|
1190
|
+
m = null, d == null || d.set("isHighlight", !1), d == null || d.setStyle(createShipStyle(e, d));
|
|
1180
1191
|
}, H = () => {
|
|
1181
1192
|
try {
|
|
1182
|
-
const
|
|
1183
|
-
|
|
1184
|
-
} catch (
|
|
1185
|
-
console.log(
|
|
1193
|
+
const w = e.getOverlays().getArray().find((a) => a.get("class") == "ship-overlay-selected");
|
|
1194
|
+
w && w.setPosition(void 0);
|
|
1195
|
+
} catch (d) {
|
|
1196
|
+
console.log(d);
|
|
1186
1197
|
}
|
|
1187
|
-
}, B = (
|
|
1188
|
-
const
|
|
1189
|
-
geometry: new Point(
|
|
1190
|
-
name:
|
|
1198
|
+
}, B = (d) => {
|
|
1199
|
+
const w = fromLonLat([d == null ? void 0 : d.lon, d == null ? void 0 : d.lat]), a = new Feature({
|
|
1200
|
+
geometry: new Point(w),
|
|
1201
|
+
name: d.cnname || d.enname || d.id || "未命名船舶",
|
|
1191
1202
|
// 图标
|
|
1192
|
-
rightIcons: getRightIcons(
|
|
1193
|
-
selected: (
|
|
1203
|
+
rightIcons: getRightIcons(d),
|
|
1204
|
+
selected: (d == null ? void 0 : d.id) === (n == null ? void 0 : n.id),
|
|
1205
|
+
shipData: d
|
|
1194
1206
|
});
|
|
1195
|
-
|
|
1196
|
-
const M = createLabelFeatureStyle(
|
|
1197
|
-
return
|
|
1198
|
-
}, W = (
|
|
1199
|
-
const
|
|
1200
|
-
|
|
1201
|
-
const M = y(
|
|
1202
|
-
if (M.setStyle(createShipStyle(e, M)),
|
|
1203
|
-
if (o[
|
|
1204
|
-
|
|
1205
|
-
|
|
1206
|
-
|
|
1207
|
-
|
|
1207
|
+
a.set("id", d.id);
|
|
1208
|
+
const M = createLabelFeatureStyle(a);
|
|
1209
|
+
return a.setStyle(M), a;
|
|
1210
|
+
}, W = (d) => {
|
|
1211
|
+
const w = e.getView().getZoom();
|
|
1212
|
+
d.forEach((a) => {
|
|
1213
|
+
const M = y(a);
|
|
1214
|
+
if (M.setStyle(createShipStyle(e, M)), s.addFeature(M), (n == null ? void 0 : n.id) == a.id || w >= MAP_ZOOM.shipModelMin)
|
|
1215
|
+
if (o[a.id]) {
|
|
1216
|
+
if (a.id && r[a == null ? void 0 : a.id]) {
|
|
1217
|
+
const F = r[a == null ? void 0 : a.id] || {};
|
|
1218
|
+
console.log(F);
|
|
1219
|
+
const V = (F == null ? void 0 : F.blinkColors) || [], O = (F == null ? void 0 : F.shipState) || "", R = (a.cnname || a.enname || a.id || "未命名船舶") + "(" + O + ")", P = {
|
|
1220
|
+
...a,
|
|
1221
|
+
name: R,
|
|
1222
|
+
blinking: o[a.id],
|
|
1223
|
+
blinkingColors: V || []
|
|
1224
|
+
};
|
|
1225
|
+
createLabelStyle(e, P);
|
|
1226
|
+
}
|
|
1227
|
+
} else {
|
|
1228
|
+
const F = B(a);
|
|
1229
|
+
t.addFeature(F);
|
|
1208
1230
|
}
|
|
1209
1231
|
});
|
|
1210
1232
|
};
|
|
1211
1233
|
return {
|
|
1212
1234
|
render: p,
|
|
1213
|
-
selected:
|
|
1235
|
+
selected: x,
|
|
1214
1236
|
filter: k,
|
|
1215
|
-
blinking:
|
|
1216
|
-
clear:
|
|
1217
|
-
handleShipMapEvent:
|
|
1237
|
+
blinking: v,
|
|
1238
|
+
clear: $,
|
|
1239
|
+
handleShipMapEvent: C
|
|
1218
1240
|
};
|
|
1219
1241
|
}, useLayerManager = (e) => {
|
|
1220
|
-
const
|
|
1221
|
-
|
|
1222
|
-
const r =
|
|
1242
|
+
const l = () => e == null ? void 0 : e.getLayers(), n = ref("vector"), s = () => n.value, c = (o) => {
|
|
1243
|
+
n.value = o;
|
|
1244
|
+
const r = l();
|
|
1223
1245
|
r && (r == null || r.getArray().forEach((p) => {
|
|
1224
1246
|
(p.className_ === "vector" || p.className_ === "satellite") && p.setVisible(p.className_ === o);
|
|
1225
1247
|
}));
|
|
1226
1248
|
}, t = ref(!1);
|
|
1227
1249
|
return {
|
|
1228
|
-
getLayers:
|
|
1250
|
+
getLayers: l,
|
|
1229
1251
|
getGreenTileVisible: () => t.value,
|
|
1230
1252
|
setGreenTileVisible: (o) => {
|
|
1231
1253
|
if (o !== t.value) {
|
|
1232
1254
|
if (o) {
|
|
1233
|
-
const r =
|
|
1255
|
+
const r = l();
|
|
1234
1256
|
if (!r.getArray().find((y) => y.className_ === "greenTile")) {
|
|
1235
1257
|
const y = new TileLayer({
|
|
1236
1258
|
source: new XYZ({ url: BASE_MAP_LINK.greenTile }),
|
|
@@ -1241,53 +1263,53 @@ const createLabelFeatureStyle = (e) => {
|
|
|
1241
1263
|
r.push(y);
|
|
1242
1264
|
}
|
|
1243
1265
|
} else {
|
|
1244
|
-
const r =
|
|
1266
|
+
const r = l(), p = r.getArray().find((y) => y.className_ === "greenTile");
|
|
1245
1267
|
p && r.remove(p);
|
|
1246
1268
|
}
|
|
1247
1269
|
t.value = o;
|
|
1248
1270
|
}
|
|
1249
1271
|
},
|
|
1250
|
-
getShowLayerType:
|
|
1251
|
-
setShowLayerType:
|
|
1272
|
+
getShowLayerType: s,
|
|
1273
|
+
setShowLayerType: c
|
|
1252
1274
|
};
|
|
1253
1275
|
}, usePropsManager = () => {
|
|
1254
1276
|
const e = ref();
|
|
1255
1277
|
return {
|
|
1256
|
-
setProps: (
|
|
1257
|
-
e.value =
|
|
1278
|
+
setProps: (s) => {
|
|
1279
|
+
e.value = s;
|
|
1258
1280
|
},
|
|
1259
1281
|
getProps: () => e.value
|
|
1260
1282
|
};
|
|
1261
1283
|
}, usePositionManager = (e) => {
|
|
1262
|
-
const
|
|
1263
|
-
let
|
|
1264
|
-
const
|
|
1284
|
+
const l = "zh-map-location-layer";
|
|
1285
|
+
let n, s, c = null, t = null;
|
|
1286
|
+
const L = (f) => {
|
|
1265
1287
|
if (!(!f || f.length === 0)) {
|
|
1266
|
-
if (
|
|
1267
|
-
const
|
|
1268
|
-
|
|
1288
|
+
if (s || (s = new VectorSource()), s.clear(), t) {
|
|
1289
|
+
const v = f.find((k) => k.id === t.id);
|
|
1290
|
+
v ? t = v : f.push(t);
|
|
1269
1291
|
}
|
|
1270
|
-
f.forEach((
|
|
1271
|
-
v
|
|
1272
|
-
}),
|
|
1273
|
-
className:
|
|
1274
|
-
source:
|
|
1292
|
+
f.forEach((v) => {
|
|
1293
|
+
m(v);
|
|
1294
|
+
}), n || (n = new VectorLayer({
|
|
1295
|
+
className: l,
|
|
1296
|
+
source: s,
|
|
1275
1297
|
zIndex: 100
|
|
1276
|
-
}), e == null || e.addLayer(
|
|
1298
|
+
}), e == null || e.addLayer(n));
|
|
1277
1299
|
}
|
|
1278
|
-
},
|
|
1279
|
-
const
|
|
1280
|
-
geometry: new Point(fromLonLat([Number(k), Number(
|
|
1300
|
+
}, m = (f) => {
|
|
1301
|
+
const v = e == null ? void 0 : e.getView().getZoom(), [k, x] = f.latLon.split(","), C = new Feature({
|
|
1302
|
+
geometry: new Point(fromLonLat([Number(k), Number(x)]))
|
|
1281
1303
|
});
|
|
1282
|
-
|
|
1283
|
-
}, o = (f,
|
|
1284
|
-
const
|
|
1304
|
+
C.setStyle(o(f, v, f.id === (t == null ? void 0 : t.id))), C.set("loactionData", f), s.addFeature(C);
|
|
1305
|
+
}, o = (f, v, k) => {
|
|
1306
|
+
const x = {
|
|
1285
1307
|
image: new Icon({
|
|
1286
1308
|
src: k && f.selectedPath || f.defaultPath,
|
|
1287
|
-
scale: 0.5 *
|
|
1309
|
+
scale: 0.5 * v / 10
|
|
1288
1310
|
})
|
|
1289
1311
|
};
|
|
1290
|
-
return f.name && (
|
|
1312
|
+
return f.name && (x.text = new Text({
|
|
1291
1313
|
text: f.name,
|
|
1292
1314
|
font: "12px sans-serif",
|
|
1293
1315
|
fill: new Fill({
|
|
@@ -1297,57 +1319,59 @@ const createLabelFeatureStyle = (e) => {
|
|
|
1297
1319
|
color: "#FFFFFF"
|
|
1298
1320
|
}),
|
|
1299
1321
|
offsetY: 30
|
|
1300
|
-
})), new Style(
|
|
1322
|
+
})), new Style(x);
|
|
1301
1323
|
}, r = () => {
|
|
1302
|
-
if (
|
|
1303
|
-
const f =
|
|
1304
|
-
|
|
1305
|
-
|
|
1324
|
+
if (c) {
|
|
1325
|
+
const f = c.get("loactionData").id;
|
|
1326
|
+
s.getFeatures().forEach((v) => {
|
|
1327
|
+
v.get("loactionData").id !== f && s.removeFeature(v);
|
|
1306
1328
|
});
|
|
1307
1329
|
} else
|
|
1308
|
-
|
|
1330
|
+
s.clear();
|
|
1309
1331
|
}, p = () => {
|
|
1310
|
-
|
|
1311
|
-
|
|
1312
|
-
|
|
1313
|
-
|
|
1332
|
+
var x;
|
|
1333
|
+
const f = c.get("loactionData"), v = (x = e == null ? void 0 : e.getView()) == null ? void 0 : x.getZoom();
|
|
1334
|
+
s.getFeatures().forEach((C) => {
|
|
1335
|
+
C.get("loactionData").id === f.id && (C == null || C.setStyle(o(f, v, !1)));
|
|
1336
|
+
}), t = null, c = null;
|
|
1314
1337
|
}, y = (f) => {
|
|
1315
|
-
f ? (
|
|
1316
|
-
},
|
|
1317
|
-
|
|
1318
|
-
|
|
1319
|
-
|
|
1338
|
+
f ? (N(), $(f)) : clearSelectedPort();
|
|
1339
|
+
}, N = () => {
|
|
1340
|
+
var f;
|
|
1341
|
+
if (c) {
|
|
1342
|
+
const v = c.get("loactionData"), k = (f = e == null ? void 0 : e.getView()) == null ? void 0 : f.getZoom();
|
|
1343
|
+
c.setStyle(o(v, k, !1));
|
|
1320
1344
|
}
|
|
1321
|
-
},
|
|
1322
|
-
const
|
|
1323
|
-
t = f,
|
|
1345
|
+
}, $ = (f) => {
|
|
1346
|
+
const v = s.getFeatures();
|
|
1347
|
+
t = f, c = v.find((k) => k.get("loactionData").id === f.id);
|
|
1324
1348
|
};
|
|
1325
1349
|
return {
|
|
1326
|
-
render:
|
|
1350
|
+
render: L,
|
|
1327
1351
|
selected: y,
|
|
1328
1352
|
clearSelected: p,
|
|
1329
1353
|
clear: r
|
|
1330
1354
|
};
|
|
1331
1355
|
}, disableDoubleClickZoom = (e) => {
|
|
1332
|
-
e.getInteractions().forEach((
|
|
1333
|
-
|
|
1356
|
+
e.getInteractions().forEach((l) => {
|
|
1357
|
+
l instanceof DoubleClickZoom && l.setActive(!1);
|
|
1334
1358
|
});
|
|
1335
1359
|
}, enableDoubleClickZoom = (e) => {
|
|
1336
|
-
e.getInteractions().forEach((
|
|
1337
|
-
|
|
1360
|
+
e.getInteractions().forEach((l) => {
|
|
1361
|
+
l instanceof DoubleClickZoom && l.setActive(!0);
|
|
1338
1362
|
});
|
|
1339
|
-
}, changeCursor = (e,
|
|
1340
|
-
const
|
|
1341
|
-
|
|
1342
|
-
}, useDrawLineManager = (e,
|
|
1343
|
-
const
|
|
1344
|
-
|
|
1363
|
+
}, changeCursor = (e, l) => {
|
|
1364
|
+
const n = e.getViewport();
|
|
1365
|
+
n && (n.style.cursor = l);
|
|
1366
|
+
}, useDrawLineManager = (e, l) => {
|
|
1367
|
+
const n = ref([]), s = ref("km"), c = (a) => {
|
|
1368
|
+
s.value = a;
|
|
1345
1369
|
};
|
|
1346
1370
|
let t;
|
|
1347
|
-
const
|
|
1348
|
-
p(), disableDoubleClickZoom(e), changeCursor(e, "crosshair"), e.on("pointermove",
|
|
1371
|
+
const L = ref(!1), m = () => {
|
|
1372
|
+
p(), disableDoubleClickZoom(e), changeCursor(e, "crosshair"), e.on("pointermove", $), e.getViewport().addEventListener("mouseout", () => {
|
|
1349
1373
|
t && t.classList.add("hidden");
|
|
1350
|
-
}),
|
|
1374
|
+
}), v(), L.value = !0;
|
|
1351
1375
|
};
|
|
1352
1376
|
let o, r;
|
|
1353
1377
|
const p = () => {
|
|
@@ -1363,15 +1387,15 @@ const createLabelFeatureStyle = (e) => {
|
|
|
1363
1387
|
}
|
|
1364
1388
|
}), e == null || e.addLayer(r);
|
|
1365
1389
|
};
|
|
1366
|
-
let y,
|
|
1367
|
-
const
|
|
1368
|
-
if (
|
|
1390
|
+
let y, N;
|
|
1391
|
+
const $ = (a) => {
|
|
1392
|
+
if (a.dragging)
|
|
1369
1393
|
return;
|
|
1370
1394
|
let M = "点击选择起点";
|
|
1371
|
-
y && (M = "单击继续,双击结束"), t && (t.innerHTML = M,
|
|
1395
|
+
y && (M = "单击继续,双击结束"), t && (t.innerHTML = M, N.setPosition(a.coordinate), t.classList.remove("hidden"));
|
|
1372
1396
|
};
|
|
1373
1397
|
let f;
|
|
1374
|
-
const
|
|
1398
|
+
const v = () => {
|
|
1375
1399
|
f = new Draw({
|
|
1376
1400
|
source: o,
|
|
1377
1401
|
type: "LineString",
|
|
@@ -1396,108 +1420,108 @@ const createLabelFeatureStyle = (e) => {
|
|
|
1396
1420
|
}),
|
|
1397
1421
|
// 添加条件函数,判断是否应该出发点绘制
|
|
1398
1422
|
condition: (M) => M.originalEvent.target.tagName !== "DIV"
|
|
1399
|
-
}), e == null || e.addInteraction(f),
|
|
1400
|
-
let
|
|
1423
|
+
}), e == null || e.addInteraction(f), A(), H();
|
|
1424
|
+
let a;
|
|
1401
1425
|
f.on("drawstart", function(M) {
|
|
1402
|
-
var
|
|
1426
|
+
var V;
|
|
1403
1427
|
y = M.feature, y.set("randomId", k());
|
|
1404
|
-
let
|
|
1405
|
-
|
|
1406
|
-
const
|
|
1407
|
-
|
|
1428
|
+
let F;
|
|
1429
|
+
a = (V = y.getGeometry()) == null ? void 0 : V.on("change", function(O) {
|
|
1430
|
+
const R = O.target, P = computedDistance(R, s.value);
|
|
1431
|
+
F = R.getLastCoordinate(), x && P && (x.innerHTML = P), C.setPosition(F);
|
|
1408
1432
|
});
|
|
1409
1433
|
}), f.on("drawend", function() {
|
|
1410
|
-
var M,
|
|
1411
|
-
if (
|
|
1434
|
+
var M, F, V;
|
|
1435
|
+
if (x && (x.className = "ol-tooltip ol-tooltip-static ol-tooltip-measure"), x != null && x.innerHTML) {
|
|
1412
1436
|
const O = (y == null ? void 0 : y.get("randomId")) || k();
|
|
1413
|
-
|
|
1437
|
+
n.value.push({ id: O, value: x == null ? void 0 : x.innerHTML }), x.innerHTML = `${x.innerHTML}<div class="ol-tooltip-delete-button" data-id="${O}"><i class="map-iconfont icon-delete"></i></div>`;
|
|
1414
1438
|
}
|
|
1415
1439
|
(M = document.querySelector(".ol-selectable:has(.ol-tooltip-delete-button):last-child .ol-tooltip-delete-button")) == null || M.addEventListener("click", (O) => {
|
|
1416
|
-
var
|
|
1440
|
+
var P;
|
|
1417
1441
|
O.preventDefault(), O.stopPropagation();
|
|
1418
|
-
const
|
|
1419
|
-
|
|
1420
|
-
}),
|
|
1442
|
+
const R = (P = O.target) == null ? void 0 : P.getAttribute("data-id");
|
|
1443
|
+
R && W(R);
|
|
1444
|
+
}), C.setOffset([0, -7]), y = null, x = null, A(), a && unByKey(a), (V = (F = l.getProps()) == null ? void 0 : F.lineDrawEnd) == null || V.call(F, n.value);
|
|
1421
1445
|
});
|
|
1422
1446
|
}, k = () => Math.random().toString(36).substring(2, 9);
|
|
1423
|
-
let
|
|
1424
|
-
const
|
|
1425
|
-
|
|
1426
|
-
element:
|
|
1447
|
+
let x, C;
|
|
1448
|
+
const A = () => {
|
|
1449
|
+
x != null && x.parentNode && x.parentNode.removeChild(x), x = document.createElement("div"), x.className = "ol-tooltip ol-tooltip-measure", C = new Overlay({
|
|
1450
|
+
element: x,
|
|
1427
1451
|
offset: [0, -15],
|
|
1428
1452
|
positioning: "bottom-center",
|
|
1429
1453
|
stopEvent: !1,
|
|
1430
1454
|
insertFirst: !1
|
|
1431
|
-
}), e == null || e.addOverlay(
|
|
1455
|
+
}), e == null || e.addOverlay(C);
|
|
1432
1456
|
}, H = () => {
|
|
1433
|
-
t != null && t.parentNode && t.parentNode.removeChild(t), t = document.createElement("div"), t.className = "ol-tooltip hidden",
|
|
1457
|
+
t != null && t.parentNode && t.parentNode.removeChild(t), t = document.createElement("div"), t.className = "ol-tooltip hidden", N = new Overlay({
|
|
1434
1458
|
element: t,
|
|
1435
1459
|
offset: [15, 0],
|
|
1436
1460
|
positioning: "center-left"
|
|
1437
|
-
}), e == null || e.addOverlay(
|
|
1461
|
+
}), e == null || e.addOverlay(N);
|
|
1438
1462
|
}, B = () => {
|
|
1439
|
-
|
|
1440
|
-
var O,
|
|
1441
|
-
const D = document.querySelectorAll(".ol-tooltip.ol-tooltip-static.ol-tooltip-measure");
|
|
1442
|
-
D[M] && ((z = (O = D[M]) == null ? void 0 : O.parentNode) == null || z.removeChild(D[M]));
|
|
1443
|
-
const N = o.getFeatures();
|
|
1444
|
-
N[M] && o.removeFeature(N[M]);
|
|
1445
|
-
}), c(), enableDoubleClickZoom(e), m.value = !1;
|
|
1446
|
-
}, W = (u) => {
|
|
1447
|
-
var D, N, O, z;
|
|
1448
|
-
const M = l.value.findIndex((F) => F.id === u);
|
|
1449
|
-
if (M !== -1) {
|
|
1450
|
-
l.value.splice(M, 1);
|
|
1463
|
+
n.value.forEach((a, M) => {
|
|
1464
|
+
var O, R;
|
|
1451
1465
|
const F = document.querySelectorAll(".ol-tooltip.ol-tooltip-static.ol-tooltip-measure");
|
|
1452
|
-
F[M] && ((
|
|
1466
|
+
F[M] && ((R = (O = F[M]) == null ? void 0 : O.parentNode) == null || R.removeChild(F[M]));
|
|
1467
|
+
const V = o.getFeatures();
|
|
1468
|
+
V[M] && o.removeFeature(V[M]);
|
|
1469
|
+
}), d(), enableDoubleClickZoom(e), L.value = !1, changeCursor(e, "pointer");
|
|
1470
|
+
}, W = (a) => {
|
|
1471
|
+
var F, V, O, R;
|
|
1472
|
+
const M = n.value.findIndex((P) => P.id === a);
|
|
1473
|
+
if (M !== -1) {
|
|
1474
|
+
n.value.splice(M, 1);
|
|
1475
|
+
const P = document.querySelectorAll(".ol-tooltip.ol-tooltip-static.ol-tooltip-measure");
|
|
1476
|
+
P[M] && ((V = (F = P[M]) == null ? void 0 : F.parentNode) == null || V.removeChild(P[M]));
|
|
1453
1477
|
const Z = o.getFeatures();
|
|
1454
1478
|
Z[M] && o.removeFeature(Z[M]);
|
|
1455
1479
|
}
|
|
1456
|
-
(
|
|
1457
|
-
},
|
|
1458
|
-
if (
|
|
1480
|
+
(R = (O = l.getProps()) == null ? void 0 : O.lineDrawEnd) == null || R.call(O, n.value);
|
|
1481
|
+
}, d = () => {
|
|
1482
|
+
if (n.value = [], document.querySelectorAll(".ol-tooltip.ol-tooltip-static").forEach((a) => {
|
|
1459
1483
|
var M;
|
|
1460
|
-
(M =
|
|
1484
|
+
(M = a == null ? void 0 : a.parentNode) == null || M.removeChild(a);
|
|
1461
1485
|
}), o.clear(), f) {
|
|
1462
|
-
const
|
|
1463
|
-
|
|
1486
|
+
const a = e.getInteractions().getArray().find((M) => getUid(M) === getUid(f));
|
|
1487
|
+
a && e.removeInteraction(a);
|
|
1464
1488
|
}
|
|
1465
|
-
e.removeLayer(r), t != null && t.parentNode && t.parentNode.removeChild(t),
|
|
1489
|
+
e.removeLayer(r), t != null && t.parentNode && t.parentNode.removeChild(t), x != null && x.parentNode && x.parentNode.removeChild(x);
|
|
1466
1490
|
};
|
|
1467
1491
|
return {
|
|
1468
|
-
open:
|
|
1492
|
+
open: m,
|
|
1469
1493
|
close: B,
|
|
1470
1494
|
deleteLine: W,
|
|
1471
|
-
setUnit:
|
|
1472
|
-
getState: () =>
|
|
1495
|
+
setUnit: c,
|
|
1496
|
+
getState: () => L.value
|
|
1473
1497
|
};
|
|
1474
|
-
}, computedDistance = (e,
|
|
1475
|
-
const
|
|
1476
|
-
let
|
|
1477
|
-
switch (
|
|
1498
|
+
}, computedDistance = (e, l) => {
|
|
1499
|
+
const s = getLength(e);
|
|
1500
|
+
let c = "";
|
|
1501
|
+
switch (l) {
|
|
1478
1502
|
case "m":
|
|
1479
|
-
|
|
1503
|
+
c = `${Math.round(s * 100) / 100} m`;
|
|
1480
1504
|
break;
|
|
1481
1505
|
case "km":
|
|
1482
|
-
|
|
1506
|
+
c = `${Math.round(s / 1e3 * 100) / 100} km`;
|
|
1483
1507
|
break;
|
|
1484
1508
|
case "nm":
|
|
1485
|
-
|
|
1509
|
+
c = `${Math.round(s / 1.852 * 100) / 100} nm`;
|
|
1486
1510
|
break;
|
|
1487
1511
|
}
|
|
1488
|
-
return
|
|
1489
|
-
}, useDrawPolygonManager = (e,
|
|
1490
|
-
let
|
|
1491
|
-
const
|
|
1512
|
+
return c;
|
|
1513
|
+
}, useDrawPolygonManager = (e, l) => {
|
|
1514
|
+
let n, s;
|
|
1515
|
+
const c = () => {
|
|
1492
1516
|
t(), changeCursor(e, "crosshair");
|
|
1493
1517
|
}, t = () => {
|
|
1494
|
-
o(),
|
|
1518
|
+
o(), x(), H(), $();
|
|
1495
1519
|
};
|
|
1496
|
-
let
|
|
1520
|
+
let L = null, m = null;
|
|
1497
1521
|
const o = () => {
|
|
1498
|
-
if (
|
|
1499
|
-
const
|
|
1500
|
-
source:
|
|
1522
|
+
if (L && m) return;
|
|
1523
|
+
const d = new VectorSource(), w = new VectorLayer({
|
|
1524
|
+
source: d,
|
|
1501
1525
|
style: new Style({
|
|
1502
1526
|
stroke: new Stroke({
|
|
1503
1527
|
color: "#fbcc33",
|
|
@@ -1505,45 +1529,45 @@ const createLabelFeatureStyle = (e) => {
|
|
|
1505
1529
|
})
|
|
1506
1530
|
})
|
|
1507
1531
|
});
|
|
1508
|
-
|
|
1509
|
-
y && (
|
|
1532
|
+
L = w, m = d, e.on("pointermove", p), e.addLayer(w), e.on(["dblclick"], function(a) {
|
|
1533
|
+
y && (a.stopPropagation(), a.preventDefault());
|
|
1510
1534
|
});
|
|
1511
1535
|
};
|
|
1512
1536
|
let r;
|
|
1513
|
-
const p = (
|
|
1514
|
-
if (
|
|
1515
|
-
const
|
|
1516
|
-
|
|
1537
|
+
const p = (d) => {
|
|
1538
|
+
if (d.dragging) return;
|
|
1539
|
+
const w = r ? "单击继续,双击结束" : "点击选择起点";
|
|
1540
|
+
C && (C.innerHTML = w, A.setPosition(d.coordinate));
|
|
1517
1541
|
};
|
|
1518
|
-
let y,
|
|
1519
|
-
const
|
|
1520
|
-
if (
|
|
1521
|
-
|
|
1522
|
-
const
|
|
1523
|
-
if (!
|
|
1524
|
-
const
|
|
1525
|
-
|
|
1526
|
-
<span class="text">面积:${
|
|
1527
|
-
`),
|
|
1528
|
-
const
|
|
1529
|
-
if (k.setPosition(M),
|
|
1530
|
-
const
|
|
1531
|
-
|
|
1542
|
+
let y, N = !1;
|
|
1543
|
+
const $ = () => {
|
|
1544
|
+
if (n) {
|
|
1545
|
+
C != null && C.parentNode && C.parentNode.removeChild(C);
|
|
1546
|
+
const d = n.getGeometry();
|
|
1547
|
+
if (!d) return;
|
|
1548
|
+
const w = f(d, "nm");
|
|
1549
|
+
v && (v.innerHTML = `
|
|
1550
|
+
<span class="text">面积:${w}${N ? '<span class="error pl-12">超出可以绘画的距离</span>' : ""}</span>
|
|
1551
|
+
`), v && (v.innerHTML += '<span class="delete-icon" ><i class="map-iconfont icon-delete" /></div>');
|
|
1552
|
+
const a = d.getCoordinates(), M = a[0][a[0].length - 2];
|
|
1553
|
+
if (k.setPosition(M), L) {
|
|
1554
|
+
const V = L.getSource();
|
|
1555
|
+
V && n && (V.clear(), V.addFeature(n));
|
|
1532
1556
|
}
|
|
1533
1557
|
setTimeout(() => {
|
|
1534
|
-
var
|
|
1535
|
-
(
|
|
1536
|
-
var O,
|
|
1537
|
-
console.log("delete"), B(), (
|
|
1558
|
+
var V;
|
|
1559
|
+
(V = document.querySelector(".delete-icon")) == null || V.addEventListener("click", () => {
|
|
1560
|
+
var O, R;
|
|
1561
|
+
console.log("delete"), B(), (R = (O = l.getProps()) == null ? void 0 : O.areaDrawEnd) == null || R.call(O, []);
|
|
1538
1562
|
});
|
|
1539
1563
|
}, 0);
|
|
1540
|
-
const
|
|
1541
|
-
e == null || e.getView().setCenter(
|
|
1564
|
+
const F = getCenter(n.getGeometry().getExtent());
|
|
1565
|
+
e == null || e.getView().setCenter(F);
|
|
1542
1566
|
return;
|
|
1543
1567
|
}
|
|
1544
1568
|
y = new Draw({
|
|
1545
1569
|
type: "Polygon",
|
|
1546
|
-
source:
|
|
1570
|
+
source: m,
|
|
1547
1571
|
trace: !0,
|
|
1548
1572
|
style: [new Style({
|
|
1549
1573
|
stroke: new Stroke({
|
|
@@ -1561,29 +1585,29 @@ const createLabelFeatureStyle = (e) => {
|
|
|
1561
1585
|
color: "rgb(51,112,255, 1)"
|
|
1562
1586
|
})
|
|
1563
1587
|
}),
|
|
1564
|
-
geometry: function(
|
|
1565
|
-
const
|
|
1566
|
-
return new MultiPoint(
|
|
1588
|
+
geometry: function(d) {
|
|
1589
|
+
const w = d.getGeometry().getCoordinates();
|
|
1590
|
+
return new MultiPoint(w);
|
|
1567
1591
|
}
|
|
1568
1592
|
})]
|
|
1569
|
-
}), e == null || e.addInteraction(y), y.on("drawstart", (
|
|
1570
|
-
var
|
|
1571
|
-
r =
|
|
1572
|
-
const M =
|
|
1573
|
-
if (
|
|
1593
|
+
}), e == null || e.addInteraction(y), y.on("drawstart", (d) => {
|
|
1594
|
+
var w;
|
|
1595
|
+
r = d.feature, s = (w = r.getGeometry()) == null ? void 0 : w.on("change", (a) => {
|
|
1596
|
+
const M = a.target, F = f(M, "nm"), O = M.getCoordinates()[0], R = new LineString([O[O.length - 2], O[O.length - 1]]), P = computedDistance(R, "nm");
|
|
1597
|
+
if (N = Number(getLength(R) / 1e3) > 150, !F) return;
|
|
1574
1598
|
const Z = '<span class="error pl-4">超出可以绘画的距离</span>';
|
|
1575
|
-
|
|
1599
|
+
v && (v.innerHTML = `
|
|
1576
1600
|
<div class="text">
|
|
1577
|
-
面积:${
|
|
1578
|
-
${
|
|
1601
|
+
面积:${F}
|
|
1602
|
+
${N ? Z : ""}
|
|
1579
1603
|
</div>
|
|
1580
|
-
`),
|
|
1604
|
+
`), C && (C.innerHTML = `
|
|
1581
1605
|
<div class="text">
|
|
1582
|
-
面积:${
|
|
1606
|
+
面积:${F}
|
|
1583
1607
|
</div>
|
|
1584
|
-
<div class="text ${
|
|
1585
|
-
线段 ${O.length - 2}: ${
|
|
1586
|
-
${
|
|
1608
|
+
<div class="text ${N ? "error" : ""}">
|
|
1609
|
+
线段 ${O.length - 2}: ${P}
|
|
1610
|
+
${N ? Z : ""}
|
|
1587
1611
|
|
|
1588
1612
|
</div>
|
|
1589
1613
|
<div>
|
|
@@ -1591,84 +1615,84 @@ const createLabelFeatureStyle = (e) => {
|
|
|
1591
1615
|
</div>
|
|
1592
1616
|
`);
|
|
1593
1617
|
});
|
|
1594
|
-
}), y.on("drawend", (
|
|
1595
|
-
var
|
|
1596
|
-
if (!
|
|
1597
|
-
|
|
1598
|
-
const
|
|
1599
|
-
if (k.setPosition(M),
|
|
1600
|
-
const
|
|
1601
|
-
(O = (
|
|
1618
|
+
}), y.on("drawend", (d) => {
|
|
1619
|
+
var F, V, O, R;
|
|
1620
|
+
if (!d.feature.getGeometry()) return;
|
|
1621
|
+
n = d.feature, v && (v.innerHTML += '<span class="delete-icon"><i class="map-iconfont icon-delete" /></div>'), k.setOffset([10, 0]);
|
|
1622
|
+
const a = d.feature.getGeometry().getCoordinates(), M = a[0][a[0].length - 2];
|
|
1623
|
+
if (k.setPosition(M), C != null && C.parentNode && C.parentNode.removeChild(C), (F = l.getProps()) != null && F.areaDrawEnd) {
|
|
1624
|
+
const P = a[0].map((Z) => transform(Z, projection.mercator, projection.data));
|
|
1625
|
+
(O = (V = l.getProps()) == null ? void 0 : V.areaDrawEnd) == null || O.call(V, P);
|
|
1602
1626
|
}
|
|
1603
1627
|
y && (y.setActive(!1), e == null || e.removeInteraction(y), (e == null ? void 0 : e.getInteractions()).forEach((Z) => {
|
|
1604
1628
|
Z instanceof Draw && (Z.setActive(!1), e == null || e.removeInteraction(Z));
|
|
1605
|
-
})),
|
|
1606
|
-
var
|
|
1607
|
-
B(), (Z = (
|
|
1629
|
+
})), s && unByKey(s), (R = document.querySelector(".delete-icon")) == null || R.addEventListener("click", () => {
|
|
1630
|
+
var P, Z;
|
|
1631
|
+
B(), (Z = (P = l.getProps()) == null ? void 0 : P.areaDrawEnd) == null || Z.call(P, []);
|
|
1608
1632
|
});
|
|
1609
1633
|
});
|
|
1610
|
-
}, f = (
|
|
1611
|
-
const
|
|
1612
|
-
switch (
|
|
1634
|
+
}, f = (d, w) => {
|
|
1635
|
+
const a = getArea(d);
|
|
1636
|
+
switch (w) {
|
|
1613
1637
|
case "km":
|
|
1614
|
-
return
|
|
1638
|
+
return a > 1e4 ? Math.round(a / 1e6 * 100) / 100 + " km<sup>2</sup>" : Math.round(a * 100) / 100 + " m<sup>2</sup>";
|
|
1615
1639
|
case "nm":
|
|
1616
|
-
return
|
|
1640
|
+
return a > 1e4 ? Math.round(a / 1e6 / Math.pow(1.852, 2) * 100) / 100 + " nm<sup>2</sup>" : Math.round(a * 100) / 100 + " m<sup>2</sup>";
|
|
1617
1641
|
}
|
|
1618
1642
|
};
|
|
1619
|
-
let
|
|
1620
|
-
const
|
|
1621
|
-
|
|
1622
|
-
element:
|
|
1643
|
+
let v, k;
|
|
1644
|
+
const x = () => {
|
|
1645
|
+
v != null && v.parentNode && v.parentNode.removeChild(v), v = document.createElement("div"), v.style.display = "flex", v.className = "ol-tooltip ol-tooltip-draw-polygon", k = new Overlay({
|
|
1646
|
+
element: v,
|
|
1623
1647
|
offset: [0, -15],
|
|
1624
1648
|
positioning: "bottom-center",
|
|
1625
1649
|
stopEvent: !1,
|
|
1626
1650
|
insertFirst: !1
|
|
1627
1651
|
}), e == null || e.addOverlay(k);
|
|
1628
1652
|
};
|
|
1629
|
-
let
|
|
1653
|
+
let C, A;
|
|
1630
1654
|
const H = () => {
|
|
1631
|
-
|
|
1632
|
-
element:
|
|
1655
|
+
C != null && C.parentNode && C.parentNode.removeChild(C), C = document.createElement("div"), C.className = "ol-tooltip ol-help-tooltip", A = new Overlay({
|
|
1656
|
+
element: C,
|
|
1633
1657
|
offset: [15, 0],
|
|
1634
1658
|
positioning: "center-left"
|
|
1635
|
-
}), e == null || e.addOverlay(
|
|
1659
|
+
}), e == null || e.addOverlay(A);
|
|
1636
1660
|
}, B = () => {
|
|
1637
|
-
|
|
1661
|
+
m == null || m.clear(), n = null, x(), H(), $();
|
|
1638
1662
|
};
|
|
1639
1663
|
return {
|
|
1640
|
-
open:
|
|
1664
|
+
open: c,
|
|
1641
1665
|
close: () => {
|
|
1642
|
-
|
|
1643
|
-
|
|
1644
|
-
}), y = null),
|
|
1666
|
+
m == null || m.clear(), m = null, L && (e.removeLayer(L), L = null), r = null, y && (y.setActive(!1), (e == null ? void 0 : e.getInteractions()).forEach((w) => {
|
|
1667
|
+
w instanceof Draw && (w.setActive(!1), e == null || e.removeInteraction(w));
|
|
1668
|
+
}), y = null), s && unByKey(s), C != null && C.parentElement && C.parentElement.removeChild(C), v != null && v.parentElement && v.parentElement.removeChild(v), A && e.removeOverlay(A), k && e.removeOverlay(k), changeCursor(e, "pointer");
|
|
1645
1669
|
},
|
|
1646
1670
|
reset: B
|
|
1647
1671
|
};
|
|
1648
1672
|
}, PORT_LAYER_CLASS_NAME = "zh-map-port-layer", usePortManager = (e) => {
|
|
1649
|
-
const
|
|
1650
|
-
let
|
|
1651
|
-
const
|
|
1673
|
+
const l = e.getInstall();
|
|
1674
|
+
let n, s, c = null, t = null;
|
|
1675
|
+
const L = (f, v = !0) => {
|
|
1652
1676
|
if (!(!f || f.length === 0)) {
|
|
1653
|
-
if (
|
|
1654
|
-
const k = f.find((
|
|
1677
|
+
if (s || (s = new VectorSource()), s.clear(), t) {
|
|
1678
|
+
const k = f.find((x) => x.id === t.id);
|
|
1655
1679
|
k ? t = k : f.push(t);
|
|
1656
1680
|
}
|
|
1657
1681
|
f.forEach((k) => {
|
|
1658
|
-
|
|
1659
|
-
}),
|
|
1682
|
+
m(k, v);
|
|
1683
|
+
}), n || (n = new VectorLayer({
|
|
1660
1684
|
className: PORT_LAYER_CLASS_NAME,
|
|
1661
|
-
source:
|
|
1685
|
+
source: s,
|
|
1662
1686
|
zIndex: 100
|
|
1663
|
-
}),
|
|
1687
|
+
}), l.addLayer(n));
|
|
1664
1688
|
}
|
|
1665
|
-
},
|
|
1666
|
-
const k = e.getZoom(), [
|
|
1667
|
-
geometry: new Point(fromLonLat([Number(
|
|
1689
|
+
}, m = (f, v = !0) => {
|
|
1690
|
+
const k = e.getZoom(), [x, C] = f.latLon.split(","), A = new Feature({
|
|
1691
|
+
geometry: new Point(fromLonLat([Number(x), Number(C)]))
|
|
1668
1692
|
});
|
|
1669
|
-
|
|
1670
|
-
}, o = (f,
|
|
1671
|
-
const
|
|
1693
|
+
A.setStyle(o(f, k, f.id === (t == null ? void 0 : t.id), v)), A.set("portData", f), s.addFeature(A);
|
|
1694
|
+
}, o = (f, v, k, x = !0) => {
|
|
1695
|
+
const C = (H) => `<svg width="46" height="46" viewBox="0 0 46 46" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
1672
1696
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M22.6563 44.9304C22.5453 44.8844 22.4445 44.817 22.3595 44.7321C22.3595 44.7321 9.36986 31.7424 9.32952 31.6913C7.09059 29.0791 5.64794 25.8802 5.17255 22.4736C4.69716 19.0671 5.20896 15.5957 6.64728 12.471C8.08561 9.34625 10.3902 6.69909 13.2878 4.84325C16.1855 2.98741 19.5548 2.00068 22.9965 2C26.4381 1.99932 29.8078 2.98473 32.7062 4.83943C35.6046 6.69414 37.9102 9.34039 39.3498 12.4646C40.7893 15.5888 41.3025 19.0599 40.8284 22.4666C40.3544 25.8734 38.913 29.0729 36.6751 31.686C36.6401 31.737 23.6531 44.7321 23.6531 44.7321C23.5682 44.817 23.4674 44.8844 23.3564 44.9304C23.2454 44.9763 23.1265 45 23.0063 45C22.8862 45 22.7673 44.9763 22.6563 44.9304Z" fill="${H}"/>
|
|
1673
1697
|
<g clip-path="url(#clip0_10059_122082)">
|
|
1674
1698
|
<path d="M34.8624 22.8687L32.5874 25.6313L33.4812 25.7125C33.4812 25.7125 30.5562 28.0687 27.9562 28.2312C25.3562 28.3937 24.1374 24.9 24.1374 24.9V19.1312H27.6312V17.425H24.2999V15.15C25.7624 14.6625 26.7374 13.2812 26.7374 11.6562C26.7374 9.625 25.1124 8 23.0812 8H22.9999C20.9687 8 19.3437 9.625 19.3437 11.6562C19.3437 13.2812 20.3999 14.6625 21.7812 15.15V17.425H18.4499V19.1312H21.9437V24.9C21.9437 24.9 20.6437 28.3125 18.0437 28.2312C15.4437 28.0687 12.5187 25.7125 12.5187 25.7125L13.4124 25.6313L11.0562 22.8687L10.2437 26.2812L11.2187 26.0375C11.2187 26.0375 13.1687 29.5313 16.1749 30.8313C19.1812 32.2125 22.1874 33.9187 22.8374 34C23.4874 33.9187 26.4937 32.2125 29.4187 30.8313C32.3437 29.45 34.3749 26.0375 34.3749 26.0375L35.3499 26.2812L34.8624 22.8687ZM23.0812 13.6875C21.9437 13.6875 21.0499 12.7937 21.0499 11.6562C21.0499 10.6 21.9437 9.70625 22.9999 9.70625H23.0812C24.1374 9.70625 25.0312 10.6 25.0312 11.6562C25.1124 12.7937 24.1374 13.6875 23.0812 13.6875Z" fill="white"/>
|
|
@@ -1679,8 +1703,14 @@ const createLabelFeatureStyle = (e) => {
|
|
|
1679
1703
|
</clipPath>
|
|
1680
1704
|
</defs>
|
|
1681
1705
|
</svg>
|
|
1682
|
-
`,
|
|
1683
|
-
return
|
|
1706
|
+
`, A = () => `data:image/svg+xml;utf8,${encodeURIComponent(C(k ? "#FF5733" : "#3370FF"))}`;
|
|
1707
|
+
return !x && !k ? new Style({
|
|
1708
|
+
image: new Icon({
|
|
1709
|
+
src: A(),
|
|
1710
|
+
scale: 0.5 * v / 10
|
|
1711
|
+
}),
|
|
1712
|
+
zIndex: k ? 110 : 100
|
|
1713
|
+
}) : new Style({
|
|
1684
1714
|
text: new Text({
|
|
1685
1715
|
text: f.shortName,
|
|
1686
1716
|
font: "12px sans-serif",
|
|
@@ -1693,111 +1723,107 @@ const createLabelFeatureStyle = (e) => {
|
|
|
1693
1723
|
offsetY: 30
|
|
1694
1724
|
}),
|
|
1695
1725
|
image: new Icon({
|
|
1696
|
-
src:
|
|
1697
|
-
scale: 0.5 *
|
|
1698
|
-
}),
|
|
1699
|
-
zIndex: k ? 110 : 100
|
|
1700
|
-
}) : new Style({
|
|
1701
|
-
image: new Icon({
|
|
1702
|
-
src: _(),
|
|
1703
|
-
scale: 0.5 * w / 10
|
|
1726
|
+
src: A(),
|
|
1727
|
+
scale: 0.5 * v / 10
|
|
1704
1728
|
}),
|
|
1705
1729
|
zIndex: k ? 110 : 100
|
|
1706
1730
|
});
|
|
1707
1731
|
}, r = () => {
|
|
1708
|
-
if (
|
|
1732
|
+
if (c) {
|
|
1709
1733
|
console.log("清除非选中的港口");
|
|
1710
|
-
const f =
|
|
1711
|
-
|
|
1712
|
-
|
|
1734
|
+
const f = c.get("portData").id;
|
|
1735
|
+
s.getFeatures().forEach((v) => {
|
|
1736
|
+
v.get("portData").id !== f && s.removeFeature(v);
|
|
1713
1737
|
});
|
|
1714
1738
|
} else
|
|
1715
|
-
console.log("清除所有港口",
|
|
1739
|
+
console.log("清除所有港口", s), s == null || s.clear();
|
|
1716
1740
|
}, p = (f) => {
|
|
1717
1741
|
if (!f)
|
|
1718
1742
|
return y();
|
|
1719
|
-
(
|
|
1743
|
+
(c == null ? void 0 : c.get("portData").id) !== f.id && (y(), N(f));
|
|
1720
1744
|
}, y = () => {
|
|
1721
|
-
if (
|
|
1722
|
-
const f =
|
|
1723
|
-
|
|
1745
|
+
if (c) {
|
|
1746
|
+
const f = c == null ? void 0 : c.get("portData"), v = e.getZoom();
|
|
1747
|
+
s.getFeatures().forEach((x) => {
|
|
1748
|
+
x.get("portData").id === f.id && (x.setStyle(o(x.get("portData"), v, !1)), c = null);
|
|
1749
|
+
});
|
|
1724
1750
|
}
|
|
1725
|
-
},
|
|
1726
|
-
const
|
|
1727
|
-
t = f,
|
|
1751
|
+
}, N = (f) => {
|
|
1752
|
+
const v = s.getFeatures();
|
|
1753
|
+
t = f, c = v.find((k) => k.get("portData").id === f.id), c == null || c.setStyle(o(f, e.getZoom(), !0));
|
|
1728
1754
|
};
|
|
1729
1755
|
return {
|
|
1730
|
-
render:
|
|
1756
|
+
render: L,
|
|
1731
1757
|
clear: r,
|
|
1732
1758
|
selected: p,
|
|
1733
1759
|
handlePortHover: (f) => {
|
|
1734
|
-
const
|
|
1735
|
-
f && f.get("portData") &&
|
|
1760
|
+
const v = l == null ? void 0 : l.getTargetElement();
|
|
1761
|
+
f && f.get("portData") && v && (v.style.cursor = "pointer");
|
|
1736
1762
|
}
|
|
1737
1763
|
};
|
|
1738
|
-
}, useEventManager = (e,
|
|
1739
|
-
const
|
|
1740
|
-
|
|
1764
|
+
}, useEventManager = (e, l, n, s, c, t) => {
|
|
1765
|
+
const L = e.getInstall();
|
|
1766
|
+
L.on("moveend", () => {
|
|
1741
1767
|
var o, r;
|
|
1742
|
-
const
|
|
1743
|
-
(r = (o =
|
|
1744
|
-
}),
|
|
1745
|
-
const o =
|
|
1746
|
-
|
|
1747
|
-
}),
|
|
1768
|
+
const m = e.getZoom();
|
|
1769
|
+
(r = (o = l.getProps()).mapMoveEnd) == null || r.call(o, m), n.reRenderTrackLine();
|
|
1770
|
+
}), L.on("pointermove", (m) => {
|
|
1771
|
+
const o = L.getEventPixel(m.originalEvent), r = L.forEachFeatureAtPixel(o, (p) => p);
|
|
1772
|
+
s.handleShipMapEvent(r, "hover"), n.handleTrackMapEvent(r, "hover", m), r && c.handlePortHover(r);
|
|
1773
|
+
}), L.on("movestart", () => {
|
|
1748
1774
|
console.log("movestart-----------------------");
|
|
1749
|
-
}),
|
|
1750
|
-
var p, y,
|
|
1775
|
+
}), L.on("click", debounce((m) => {
|
|
1776
|
+
var p, y, N;
|
|
1751
1777
|
if (console.log("1", t.getState()), t.getState()) return;
|
|
1752
|
-
const o =
|
|
1778
|
+
const o = L.getEventPixel(m.originalEvent), r = L.forEachFeatureAtPixel(
|
|
1753
1779
|
o,
|
|
1754
|
-
(
|
|
1755
|
-
if (
|
|
1756
|
-
return
|
|
1780
|
+
($) => {
|
|
1781
|
+
if ($ != null && $.get("shipData") || $ != null && $.get("portData"))
|
|
1782
|
+
return $;
|
|
1757
1783
|
}
|
|
1758
1784
|
);
|
|
1759
1785
|
if (console.log("2", r), !!r) {
|
|
1760
|
-
if (
|
|
1761
|
-
|
|
1786
|
+
if (m.preventDefault(), m.stopPropagation(), r.get("shipData"))
|
|
1787
|
+
s.handleShipMapEvent(r, "click", (p = l.getProps()) == null ? void 0 : p.selectShip);
|
|
1762
1788
|
else if (r.get("portData")) {
|
|
1763
|
-
const
|
|
1764
|
-
|
|
1789
|
+
const $ = r.get("portData");
|
|
1790
|
+
c.selected($), (N = (y = l.getProps()) == null ? void 0 : y.selectPort) == null || N.call(y, $);
|
|
1765
1791
|
}
|
|
1766
1792
|
}
|
|
1767
1793
|
}, 150));
|
|
1768
1794
|
}, useMapController = () => {
|
|
1769
1795
|
const e = reactive([]);
|
|
1770
1796
|
return {
|
|
1771
|
-
createInstance: (
|
|
1797
|
+
createInstance: (s, c) => {
|
|
1772
1798
|
const t = useMapInitializer();
|
|
1773
|
-
t.initMap(
|
|
1774
|
-
const
|
|
1775
|
-
o.setProps(
|
|
1776
|
-
const r = useTrackManager(
|
|
1777
|
-
useEventManager(t, o, r, y,
|
|
1799
|
+
t.initMap(s, c);
|
|
1800
|
+
const L = t.getInstall(), m = useLayerManager(L), o = usePropsManager();
|
|
1801
|
+
o.setProps(c), m.setShowLayerType(c.layerType), m.setGreenTileVisible(c.showGreenLayer);
|
|
1802
|
+
const r = useTrackManager(L), p = useCarTrackManager(L, r), y = useShipManager(L), N = usePositionManager(L), $ = useDrawLineManager(L, o), f = useDrawPolygonManager(L, o), v = usePortManager(t);
|
|
1803
|
+
useEventManager(t, o, r, y, v, $);
|
|
1778
1804
|
const k = () => {
|
|
1779
|
-
const
|
|
1780
|
-
return [
|
|
1781
|
-
},
|
|
1805
|
+
const C = L.getView().calculateExtent(t.getSize()), A = transform([C[0], C[1]], projection.mercator, projection.data), H = transform([C[2], C[3]], projection.mercator, projection.data);
|
|
1806
|
+
return [A[0], A[1], H[0], H[1]];
|
|
1807
|
+
}, x = {
|
|
1782
1808
|
id: Symbol("map-instance"),
|
|
1783
1809
|
innerMap: null,
|
|
1784
1810
|
map: t.getInstall(),
|
|
1785
1811
|
destroy: () => {
|
|
1786
|
-
e.splice(e.indexOf(
|
|
1812
|
+
e.splice(e.indexOf(x), 1);
|
|
1787
1813
|
},
|
|
1788
1814
|
methods: {
|
|
1789
1815
|
...t,
|
|
1790
|
-
layer:
|
|
1816
|
+
layer: m,
|
|
1791
1817
|
ship: y,
|
|
1792
1818
|
track: r,
|
|
1793
1819
|
carTrack: p,
|
|
1794
1820
|
port: {
|
|
1795
|
-
render:
|
|
1796
|
-
clear:
|
|
1797
|
-
selected:
|
|
1821
|
+
render: v.render,
|
|
1822
|
+
clear: v.clear,
|
|
1823
|
+
selected: v.selected
|
|
1798
1824
|
},
|
|
1799
|
-
position:
|
|
1800
|
-
drawLine:
|
|
1825
|
+
position: N,
|
|
1826
|
+
drawLine: $,
|
|
1801
1827
|
drawPolygon: f,
|
|
1802
1828
|
// 子模块
|
|
1803
1829
|
utils: {
|
|
@@ -1807,14 +1833,14 @@ const createLabelFeatureStyle = (e) => {
|
|
|
1807
1833
|
}
|
|
1808
1834
|
}
|
|
1809
1835
|
};
|
|
1810
|
-
return e.push(
|
|
1836
|
+
return e.push(x), x;
|
|
1811
1837
|
},
|
|
1812
|
-
destroyInstance: (
|
|
1813
|
-
const
|
|
1814
|
-
|
|
1838
|
+
destroyInstance: (s) => {
|
|
1839
|
+
const c = e.findIndex((t) => t.id === s);
|
|
1840
|
+
c > -1 && (e[c].destroy(), e.splice(c, 1));
|
|
1815
1841
|
},
|
|
1816
1842
|
destroyAll: () => {
|
|
1817
|
-
e.forEach((
|
|
1843
|
+
e.forEach((s) => s.destroy()), e.splice(0, e.length);
|
|
1818
1844
|
},
|
|
1819
1845
|
getAllInstances: () => [...e]
|
|
1820
1846
|
};
|
|
@@ -1837,18 +1863,18 @@ const createLabelFeatureStyle = (e) => {
|
|
|
1837
1863
|
selectPort: { type: Function, default: () => {
|
|
1838
1864
|
} }
|
|
1839
1865
|
},
|
|
1840
|
-
setup(e, { expose:
|
|
1841
|
-
const
|
|
1866
|
+
setup(e, { expose: l }) {
|
|
1867
|
+
const n = ref(), s = ref(), c = useMapController(), t = ref(), L = e, m = ref({
|
|
1842
1868
|
getInstall() {
|
|
1843
1869
|
}
|
|
1844
1870
|
});
|
|
1845
1871
|
return onMounted(() => {
|
|
1846
1872
|
var o;
|
|
1847
|
-
t.value =
|
|
1873
|
+
t.value = c.createInstance(n.value, L), console.log(" instance.value?.methods", t.value.map), m.value = t.value.methods, (o = s.value) == null || o.setScaleLine(t.value.map, L.scaleLineUnit);
|
|
1848
1874
|
}), onUnmounted(() => {
|
|
1849
1875
|
var o, r;
|
|
1850
|
-
|
|
1851
|
-
}),
|
|
1876
|
+
c.destroyInstance((o = t == null ? void 0 : t.value) == null ? void 0 : o.id), (r = t.value) == null || r.destroy();
|
|
1877
|
+
}), l({
|
|
1852
1878
|
getZoom: () => {
|
|
1853
1879
|
var o;
|
|
1854
1880
|
return (o = t.value) == null ? void 0 : o.methods.getZoom();
|
|
@@ -2056,12 +2082,12 @@ const createLabelFeatureStyle = (e) => {
|
|
|
2056
2082
|
createElementVNode("div", {
|
|
2057
2083
|
id: "map",
|
|
2058
2084
|
ref_key: "zhMapRef",
|
|
2059
|
-
ref:
|
|
2085
|
+
ref: n,
|
|
2060
2086
|
class: "zh-map"
|
|
2061
2087
|
}, null, 512),
|
|
2062
2088
|
createVNode(ScaleLine, {
|
|
2063
2089
|
ref_key: "scaleLineRef",
|
|
2064
|
-
ref:
|
|
2090
|
+
ref: s
|
|
2065
2091
|
}, null, 512),
|
|
2066
2092
|
createVNode(ZoomControl, {
|
|
2067
2093
|
ref: "zoomControlRef",
|
|
@@ -2069,7 +2095,7 @@ const createLabelFeatureStyle = (e) => {
|
|
|
2069
2095
|
}, null, 8, ["map-instance"])
|
|
2070
2096
|
]));
|
|
2071
2097
|
}
|
|
2072
|
-
}), Map$1 = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-
|
|
2098
|
+
}), Map$1 = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-8370bb85"]]), ZhMap = withInstall(Map$1);
|
|
2073
2099
|
export {
|
|
2074
2100
|
ZhMap as Z
|
|
2075
2101
|
};
|