@idmwx/idmui-gl4
Version:
idm webgl4
1,421 lines • 7.76 MB
JavaScript
var KA = Object.defineProperty;
var jA = (o, A, e) => A in o ? KA(o, A, { enumerable: !0, configurable: !0, writable: !0, value: e }) : o[A] = e;
var E0 = (o, A, e) => (jA(o, typeof A != "symbol" ? A + "" : A, e), e);
import N0 from "axios";
import { openBlock as n, createElementBlock as q, withDirectives as L0, createElementVNode as M, vShow as y0, toDisplayString as w, normalizeStyle as s0, createCommentVNode as T, resolveComponent as C, createVNode as h, withCtx as R, mergeProps as H, normalizeClass as Y0, createTextVNode as c0, Fragment as i0, renderList as l0, createBlock as a0, withModifiers as a1 } from "vue";
import D0 from "mapbox-gl";
import { LngLatHelper as C0, TropicalHelper as ZA, LaneHelper as F0 } from "@idm-plugin/geo";
import * as j from "@turf/turf";
import { LayerHelper as M1, CompanyHelper as SA } from "@idm-plugin/tag-nop";
import o0 from "moment";
import HA from "@mapbox/sphericalmercator";
import { LayerHelper as JA } from "@idm-plugin/tag";
import { TidesAssist as p1, Meteo2Assist as e1 } from "@idm-plugin/meteo";
import { useTheme as _A } from "vuetify";
const r0 = (o, A) => {
const e = o.__vccOpts || o;
for (const [z, t] of A)
e[z] = t;
return e;
}, $A = {
name: "IdmWarZone",
props: {
map: {
type: Object
},
zone: {
type: Object
},
beforeLayer: {
type: String
}
},
data() {
return {
source: "war-zone-source",
zoneLayer: "war-zone-layer",
zoneLabelLayer: "war-zone-label-layer"
};
},
watch: {
zone: {
handler() {
this.handleRender();
},
immediate: !0
}
},
methods: {
handleRender() {
this.map ? (this.handleClear(), this.zone && (this.map.addSource(this.source, {
type: "geojson",
data: this.zone
}), this.map.addLayer(
{
id: this.zoneLayer,
type: "fill",
source: this.source,
filter: ["==", "$type", "Polygon"],
paint: {
"fill-outline-color": "silver",
"fill-color": "#f44336",
"fill-opacity": 0.4
// 'fill-color': ['match', ['get', 'val'], 'PiracyArea', '#DF2CF3', 'ConvoyArea', '#FFFF00', 'JWCriskArea', '#DF2CF3', '#ffffff'],
}
},
this.beforeLayer
), this.map.addLayer(
{
id: this.zoneLayer + "-border",
type: "line",
source: this.source,
filter: ["==", "$type", "Polygon"],
paint: {
"line-width": 1,
"line-opacity": 1,
"line-color": "#f44336"
// 'line-color': ['match', ['get', 'val'], 'PiracyArea', '#DF2CF3', 'ConvoyArea', '#FFFF00', 'JWCriskArea', '#DF2CF3', '#ffffff'],
}
},
this.beforeLayer
), this.map.addLayer({
id: this.zoneLabelLayer,
type: "symbol",
source: this.source,
filter: ["==", "$type", "Point"],
layout: {
"symbol-placement": "point",
"icon-size": 0.1,
"icon-image": "identify",
"text-anchor": "top",
"text-field": "{lbl}",
"text-rotation-alignment": "viewport",
"text-size": 10,
"text-offset": [0, -1]
},
paint: {
"icon-opacity": 0.8,
"text-color": "#000",
"text-halo-color": "#fff",
"text-halo-width": 1
}
}, this.beforeLayer))) : setTimeout(() => {
this.handleRender();
}, 500);
},
handleClear() {
this.map.getLayer(this.zoneLayer) && this.map.removeLayer(this.zoneLayer), this.map.getLayer(this.zoneLayer + "-border") && this.map.removeLayer(this.zoneLayer + "-border"), this.map.getLayer(this.zoneLabelLayer) && this.map.removeLayer(this.zoneLabelLayer), this.map.getSource(this.source) && this.map.removeSource(this.source);
}
}
};
function Ae(o, A, e, z, t, a) {
return n(), q("div");
}
const ee = /* @__PURE__ */ r0($A, [["render", Ae]]), oe = {
name: "IdmGmdssArea",
props: {
map: {
type: Object
},
area: {
type: Object
},
beforeLayer: {
type: String
}
},
data() {
return {
source: "gmdss-area-source",
areaLayer: "gmdss-area-layer",
areaLabelLayer: "gmdss-area-label-layer"
};
},
watch: {
area: {
handler() {
this.handleRender();
},
immediate: !0
}
},
methods: {
handleRender() {
this.map ? (this.handleClear(), this.area && (this.map.addSource(this.source, {
type: "geojson",
data: this.area
}), this.map.addLayer(
{
id: this.areaLayer,
type: "fill",
source: this.source,
filter: ["==", "$type", "Polygon"],
paint: {
"fill-outline-color": "silver",
"fill-opacity": 0.5,
"fill-color": [
"match",
["get", "val"],
"AreaI",
"#EB8996",
"AreaII",
"#6F448B",
"AreaIII",
"#3E8BD3",
"AreaIV",
"#5EBCC4",
"AreaV",
"#00AAE7",
"AreaVI",
"#9CCE6D",
"AreaVII",
"#F4AE00",
"AreaVIII",
"#EF9A85",
"AreaIX",
"#00AAA7",
"AreaX",
"#7AC49F",
"AreaXI",
"#DFDFDF",
"AreaXII",
"#FFF974",
"AreaXIII",
"#EF9A85",
"AreaXIV",
"#86A2D1",
"AreaXV",
"#EC8972",
"AreaXVI",
"#EAC2DA",
"AreaXVII",
"#B9C8E7",
"AreaXVIII",
"#BBA1C8",
"AreaXIX",
"#FAE0BD",
"AreaXX",
"#DBECC8",
"AreaXXI",
"#D496AF",
"#ffffff"
]
}
},
this.beforeLayer
), this.map.addLayer({
id: this.areaLabelLayer,
type: "symbol",
source: this.source,
filter: ["==", "$type", "Point"],
layout: {
"symbol-placement": "point",
"icon-size": 0.1,
"icon-image": "identify",
"text-anchor": "top",
"text-field": "{lbl}",
"text-rotation-alignment": "viewport",
"text-size": 12,
"text-offset": [0, -3.5]
},
paint: {
"icon-opacity": 0.8,
"text-opacity": 0.8,
"text-color": "#000"
}
}, this.beforeLayer))) : setTimeout(() => {
this.handleRender();
}, 500);
},
handleClear() {
this.map.getLayer(this.areaLayer) && this.map.removeLayer(this.areaLayer), this.map.getLayer(this.areaLabelLayer) && this.map.removeLayer(this.areaLabelLayer), this.map.getSource(this.source) && this.map.removeSource(this.source);
}
}
};
function te(o, A, e, z, t, a) {
return n(), q("div");
}
const ze = /* @__PURE__ */ r0(oe, [["render", te]]), Me = {
name: "IdmEcaZone",
props: {
map: {
type: Object
},
zone: {
type: Object
},
beforeLayer: {
type: String
},
activeWeatherLayers: {
type: Array
}
},
data() {
return {
source: "eca-zone-source",
zoneLayer: "eca-zone-layer",
zoneLabelLayer: "eca-zone-label-layer"
};
},
watch: {
zone: {
handler() {
this.zone ? this.handleRender() : this.handleClear();
},
immediate: !0
}
},
methods: {
handleRender() {
var o;
this.map ? (this.handleClear(), this.zone && (this.map.getSource(this.source) ? (o = this.map) == null || o.getSource(this.source).setData(this.zone) : (this.map.addSource(this.source, {
type: "geojson",
data: this.zone
}), this.map.addLayer({
id: this.zoneLayer,
type: "fill",
source: this.source,
filter: ["all", ["==", "$type", "Polygon"], ["!=", "disabled", !0]],
paint: {
"fill-outline-color": "silver",
"fill-opacity": 0.3,
"fill-color": "#05f324"
}
}, this.beforeLayer), this.map.addLayer(
{
id: this.zoneLayer + "-border",
type: "line",
source: this.source,
filter: ["all", ["==", "$type", "Polygon"], ["!=", "disabled", !0]],
paint: {
"line-color": "#05f324",
"line-width": 1,
"line-opacity": 1
}
},
this.beforeLayer
), this.map.addLayer({
id: this.zoneLabelLayer,
type: "symbol",
source: this.source,
filter: ["all", ["==", "$type", "Point"], ["!=", "disabled", !0]],
layout: {
"symbol-placement": "point",
// 'icon-size': 0.1,
// 'icon-image': 'identify',
"text-max-width": 16,
"text-justify": "left",
"text-anchor": "top",
"text-field": "{lbl}",
"text-rotation-alignment": "viewport",
"text-size": 10,
"text-offset": [0, -3.5]
},
paint: {
// 'icon-opacity': 0.8,
"text-color": "#000",
"text-halo-color": "#fff",
"text-halo-width": 1
}
}, this.beforeLayer)))) : setTimeout(() => {
this.handleRender();
}, 500);
},
handleClear() {
this.map.getLayer(this.zoneLayer) && this.map.removeLayer(this.zoneLayer), this.map.getLayer(this.zoneLayer + "-border") && this.map.removeLayer(this.zoneLayer + "-border"), this.map.getLayer(this.zoneLabelLayer) && this.map.removeLayer(this.zoneLabelLayer), this.map.getSource(this.source) && this.map.removeSource(this.source);
}
}
};
function ae(o, A, e, z, t, a) {
return n(), q("div");
}
const pe = /* @__PURE__ */ r0(Me, [["render", ae]]);
const ie = {
name: "IdmAlertZone",
props: {
map: {
type: Object
},
zone: {
type: Object
},
beforeLayer: {
type: String
}
},
data() {
return {
source: "alert-zone-source",
polygonLayer: "alert-zone-polygon-layer",
polygonLabelLayer: "alert-zone-polygon-label-layer",
lineLayer: "alert-zone-line-layer",
lineLabelLayer: "alert-zone-line-label-layer",
pointLayer: "alert-zone-point-layer",
showZone: !1,
form: {}
};
},
watch: {
zone: {
handler() {
var o, A;
this.zone ? (this.handleRender(), (o = this.map) == null || o.on("click", [this.polygonLabelLayer, this.lineLabelLayer, this.pointLayer], this.handleClick)) : (this.handleClear(), (A = this.map) == null || A.off("click", [this.polygonLabelLayer, this.lineLabelLayer, this.pointLayer], this.handleClick));
},
immediate: !0
}
},
methods: {
handleClick(o) {
var z;
const A = o.features[0], e = (z = this.zone) == null ? void 0 : z.features.filter((t) => {
var a;
return t.properties.id === ((a = A == null ? void 0 : A.properties) == null ? void 0 : a.id);
})[0];
if (e) {
this.showZone = !0, this.form = { ...e.properties };
const t = document.getElementById("idm-gl4-zone-info");
this.marker ? this.marker.setLngLat([o.lngLat.lng, o.lngLat.lat]) : this.marker = new D0.Marker(t).setLngLat([o.lngLat.lng, o.lngLat.lat]).setOffset([0, 0]).addTo(this.map);
}
},
handleRender() {
var o;
this.map ? (this.handleClear(), this.zone && (this.map.getSource(this.source) ? (o = this.map) == null || o.getSource(this.source).setData(this.zone) : (this.map.addSource(this.source, {
type: "geojson",
data: this.zone
}), this.map.addLayer({
id: this.polygonLayer,
type: "fill",
source: this.source,
filter: ["all", ["==", "$type", "Polygon"], ["!=", "disabled", !0]],
paint: {
"fill-outline-color": "#d57d02",
"fill-opacity": 0.4,
"fill-color": "#d57d02"
}
}, this.beforeLayer), this.map.addLayer({
id: this.polygonLayer + "-border",
type: "line",
source: this.source,
filter: ["all", ["==", "$type", "Polygon"], ["!=", "disabled", !0]],
paint: {
"line-width": 1,
"line-color": "#d57d02"
}
}, this.beforeLayer), this.map.addLayer({
id: this.lineLayer,
type: "line",
source: this.source,
filter: ["all", ["==", "$type", "LineString"], ["!=", "disabled", !0]],
paint: {
"line-color": "#d57d02",
"line-width": 2
}
}, this.beforeLayer), this.map.addLayer({
id: this.polygonLabelLayer,
type: "symbol",
source: this.source,
filter: ["all", ["==", "$type", "Polygon"], ["!=", "disabled", !0]],
layout: {
"symbol-placement": "point",
"icon-image": "alert",
"icon-size": 0.08,
"icon-allow-overlap": !0,
"icon-rotation-alignment": "viewport"
},
paint: {
"icon-opacity": 0.8
}
}, this.beforeLayer), this.map.addLayer({
id: this.lineLabelLayer,
type: "symbol",
source: this.source,
filter: ["all", ["==", "$type", "LineString"], ["!=", "disabled", !0]],
layout: {
"symbol-placement": "line-center",
"icon-image": "alert",
"icon-size": 0.08,
"icon-allow-overlap": !0,
"icon-rotation-alignment": "viewport"
},
paint: {
"icon-opacity": 0.8
}
}, this.beforeLayer), this.map.addLayer({
id: this.pointLayer,
type: "symbol",
source: this.source,
filter: ["all", ["==", "$type", "Point"], ["!=", "disabled", !0]],
layout: {
"symbol-placement": "point",
"icon-image": "alert",
"icon-size": 0.08
},
paint: {
"icon-opacity": 0.8
}
}, this.beforeLayer)))) : setTimeout(() => {
this.handleRender();
}, 500);
},
handleClear() {
this.map.getLayer(this.polygonLayer) && this.map.removeLayer(this.polygonLayer), this.map.getLayer(this.polygonLayer + "-border") && this.map.removeLayer(this.polygonLayer + "-border"), this.map.getLayer(this.polygonLabelLayer) && this.map.removeLayer(this.polygonLabelLayer), this.map.getLayer(this.lineLayer) && this.map.removeLayer(this.lineLayer), this.map.getLayer(this.lineLabelLayer) && this.map.removeLayer(this.lineLabelLayer), this.map.getLayer(this.pointLayer) && this.map.removeLayer(this.pointLayer), this.map.getSource(this.source) && this.map.removeSource(this.source);
}
}
}, be = { id: "idm-gl4-zone-info" }, ce = ["innerHTML"];
function re(o, A, e, z, t, a) {
var p;
return L0((n(), q("div", be, [
M("div", {
class: "iconfont close",
onClick: A[0] || (A[0] = (i) => t.showZone = !1)
}, ""),
M("div", {
class: "rich-context",
innerHTML: (p = t.form) == null ? void 0 : p.name
}, null, 8, ce)
], 512)), [
[y0, t.showZone]
]);
}
const ne = /* @__PURE__ */ r0(ie, [["render", re]]);
const le = {
name: "IdmPort",
props: {
map: {
type: Object
},
port: {
type: Object
},
beforeLayer: {
type: String
},
forecastModel: {
type: String
}
},
emits: ["meteoMore"],
data() {
return {
source: "port-source",
layer: "port-layer",
showPort: !1,
form: {},
marker: void 0
};
},
computed: {
computeLat() {
return function(o) {
return C0.lat2pretty(o, 4).pretty;
};
},
computeLng() {
return function(o) {
return C0.lng2pretty(o, 4).pretty;
};
}
},
watch: {
port: {
handler() {
var o, A;
this.port ? (this.handleRender(), (o = this.map) == null || o.on("click", [this.layer], this.handleClick)) : (this.handleClear(), (A = this.map) == null || A.off("click", [this.layer], this.handleClick));
},
immediate: !0
}
},
methods: {
handleClick(o) {
var z;
const A = o.features[0], e = (z = this.port) == null ? void 0 : z.features.filter((t) => {
var a;
return t.properties.id === ((a = A == null ? void 0 : A.properties) == null ? void 0 : a.id);
})[0];
if (e) {
this.showPort = !0, this.form = { ...e.properties }, this.form.lng = e.geometry.coordinates[0], this.form.lat = e.geometry.coordinates[1];
const t = document.getElementById("port-info");
this.marker ? this.marker.setLngLat([o.lngLat.lng, o.lngLat.lat]) : this.marker = new D0.Marker(t).setLngLat([o.lngLat.lng, o.lngLat.lat]).setOffset([0, -85]).addTo(this.map);
}
},
handleRender() {
var o;
this.map ? this.port && (this.map.getSource(this.source) ? (o = this.map) == null || o.getSource(this.source).setData(this.port) : (this.map.addSource(this.source, {
type: "geojson",
data: this.port
}), this.map.addLayer({
id: this.layer,
type: "symbol",
source: this.source,
filter: ["all", ["==", "$type", "Point"], ["!=", "disabled", !0]],
layout: {
"symbol-placement": "point",
"icon-size": 0.1,
"icon-image": "port",
"text-anchor": "left",
"text-field": "{name}",
"text-rotation-alignment": "viewport",
"text-size": 10,
"text-offset": [1, 0]
},
paint: {
"text-color": "rgba(0, 0, 0, 0.8)",
"text-halo-color": "#fff",
"text-halo-width": 1
}
}, this.beforeLayer))) : setTimeout(() => {
this.handleRender();
}, 500);
},
handleClear() {
this.showPort = !1, this.map.getLayer(this.layer) && this.map.removeLayer(this.layer), this.map.getSource(this.source) && this.map.removeSource(this.source);
},
handleClickMeteo(o) {
o.forecastModel = this.forecastModel, this.$emit("meteoMore", o);
}
}
}, se = {
ref: "idmPortInfo",
id: "port-info"
}, Oe = { class: "port-box" }, de = { class: "flex-start" }, qe = { class: "flex-start" }, me = { class: "flex-start" }, ue = {
class: "flex-start",
style: { "align-items": "flex-start" }
}, ge = { class: "meteo-forecast flex-end" };
function fe(o, A, e, z, t, a) {
return L0((n(), q("div", se, [
M("div", {
class: "close iconfont",
onClick: A[0] || (A[0] = (p) => t.showPort = !1)
}, ""),
M("div", Oe, [
M("div", de, [
A[2] || (A[2] = M("label", null, "Name : ", -1)),
M("span", null, w(t.form.name), 1)
]),
M("div", qe, [
A[3] || (A[3] = M("label", null, "Position : ", -1)),
M("span", null, w(a.computeLat(t.form.lat)) + ", " + w(a.computeLng(t.form.lng)), 1)
]),
M("div", me, [
A[4] || (A[4] = M("label", null, "LoCode : ", -1)),
M("span", null, w(t.form.loCode || "-"), 1)
]),
M("div", ue, [
A[5] || (A[5] = M("label", null, "Region : ", -1)),
M("span", null, w(t.form.zoneName || "-"), 1)
]),
M("div", ge, [
M("span", {
onClick: A[1] || (A[1] = (p) => a.handleClickMeteo(t.form))
}, "Meteo Forecast")
])
])
], 512)), [
[y0, t.showPort]
]);
}
const he = /* @__PURE__ */ r0(le, [["render", fe], ["__scopeId", "data-v-62f79fef"]]), We = {
name: "IdmLoadLine",
props: {
map: {
type: Object
},
line: {
type: Object
},
beforeLayer: {
type: String
}
},
data() {
return {
source: "load-line-source",
lineLayer: "load-line-layer",
lineLabelLayer: "load-line-label-layer"
};
},
watch: {
line: {
handler() {
this.handleRender();
},
immediate: !0
}
},
methods: {
handleRender() {
this.map ? (this.handleClear(), this.line && (this.map.addSource(this.source, {
type: "geojson",
data: this.line
}), this.map.addLayer(
{
id: this.lineLayer,
type: "fill",
source: this.source,
filter: ["==", "$type", "Polygon"],
paint: {
"fill-outline-color": "silver",
"fill-opacity": 0.75,
"fill-color": ["match", ["get", "val"], "LLGreen", "#A0C0C0", "LLRed", "#F5A39D", "LLBlue", "#6B94E4", "#ffffff"]
}
},
this.beforeLayer
), this.map.addLayer({
id: this.lineLabelLayer,
type: "symbol",
source: this.source,
filter: ["==", "$type", "Point"],
layout: {
"symbol-placement": "point",
"text-field": "{lbl} (Length < {shipLength}, {start} - {end})",
"text-rotation-alignment": "viewport",
"text-offset": [0, 1],
"text-size": 10,
"text-allow-overlap": !0
},
paint: {
"text-opacity": 0.8
}
}, this.beforeLayer))) : setTimeout(() => {
this.handleRender();
}, 500);
},
handleClear() {
this.map.getLayer(this.lineLayer) && this.map.removeLayer(this.lineLayer), this.map.getLayer(this.lineLabelLayer) && this.map.removeLayer(this.lineLabelLayer), this.map.getSource(this.source) && this.map.removeSource(this.source);
}
}
};
function Ee(o, A, e, z, t, a) {
return n(), q("div");
}
const Ie = /* @__PURE__ */ r0(We, [["render", Ee]]), Re = {
name: "IdmTimezone",
props: {
map: {
type: Object
},
zone: {
type: Object
},
beforeLayer: {
type: String
}
},
data() {
return {
source: "time-zone-source",
zoneLayer: "time-zone-layer",
zoneLabelLayer: "time-zone-label-layer"
};
},
watch: {
zone: {
handler() {
this.handleRender();
},
immediate: !0
}
},
methods: {
handleRender() {
this.map ? (this.handleClear(), this.zone && (this.map.addSource(this.source, {
type: "geojson",
data: this.zone
}), this.map.addLayer({
id: this.zoneLayer,
type: "fill",
source: this.source,
filter: ["==", "$type", "Polygon"],
paint: {
"fill-outline-color": "silver",
"fill-opacity": 0.5,
"fill-color": [
"match",
["get", "offSet"],
"-11.5",
"rgba(255,0,0,0.4)",
"-11",
"rgba(0,255,0,0.3)",
"-10.5",
"rgba(0,255,0,0.3)",
"-10",
"rgba(0,0,255,0.3)",
"-9.5",
"rgba(0,0,255,0.3)",
"-9",
"rgba(255,0,0,0.4)",
"-8.5",
"rgba(255,0,0,0.4)",
"-8",
"rgba(0,255,0,0.3)",
"-7.5",
"rgba(0,255,0,0.3)",
"-7",
"rgba(0,0,255,0.3)",
"-6.5",
"rgba(0,0,255,0.3)",
"-6",
"rgba(255,0,0,0.4)",
"-5.5",
"rgba(255,0,0,0.4)",
"-5",
"rgba(0,255,0,0.3)",
"-4.5",
"rgba(0,255,0,0.3)",
"-4",
"rgba(0,0,255,0.3)",
"-3.5",
"rgba(0,0,255,0.3)",
"-3",
"rgba(255,0,0,0.4)",
"-2.5",
"rgba(255,0,0,0.4)",
"-2",
"rgba(0,255,0,0.3)",
"-1.5",
"rgba(0,255,0,0.3)",
"-1",
"rgba(0,0,255,0.3)",
"-0.5",
"rgba(0,0,255,0.3)",
"+0",
"rgba(255,0,0,0.4)",
"+0.5",
"rgba(255,0,0,0.4)",
"+1",
"rgba(0,255,0,0.3)",
"+1.5",
"rgba(0,255,0,0.3)",
"+2",
"rgba(0,0,255,0.3)",
"+2.5",
"rgba(0,0,255,0.3)",
"+3",
"rgba(255,0,0,0.4)",
"+3.5",
"rgba(255,0,0,0.4)",
"+4",
"rgba(0,255,0,0.3)",
"+4.5",
"rgba(0,255,0,0.3)",
"+5",
"rgba(0,0,255,0.3)",
"+5.5",
"rgba(0,0,255,0.3)",
"+6",
"rgba(255,0,0,0.4)",
"+6.5",
"rgba(255,0,0,0.4)",
"+7",
"rgba(0,255,0,0.3)",
"+7.5",
"rgba(0,255,0,0.3)",
"+8",
"rgba(0,0,255,0.3)",
"+8.5",
"rgba(0,0,255,0.3)",
"+9",
"rgba(255,0,0,0.4)",
"+9.5",
"rgba(255,0,0,0.4)",
"+10",
"rgba(0,255,0,0.3)",
"+10.5",
"rgba(0,255,0,0.3)",
"+11",
"rgba(0,0,255,0.3)",
"+11.5",
"rgba(0,0,255,0.3)",
"rgba(255,0,0,0.4)"
]
}
}, this.beforeLayer), this.map.addLayer({
id: this.zoneLabelLayer,
type: "symbol",
source: this.source,
filter: ["==", "$type", "Point"],
layout: {
"symbol-placement": "point",
"text-field": "{offSet}",
"text-rotation-alignment": "viewport",
"text-size": 12,
"text-offset": [0, 1]
},
paint: {
"text-opacity": 0.8,
"text-color": "#fff"
}
}, this.beforeLayer))) : setTimeout(() => {
this.handleRender();
}, 500);
},
handleClear() {
this.map.getLayer(this.zoneLayer) && this.map.removeLayer(this.zoneLayer), this.map.getLayer(this.zoneLabelLayer) && this.map.removeLayer(this.zoneLabelLayer), this.map.getSource(this.source) && this.map.removeSource(this.source);
}
}
};
function ve(o, A, e, z, t, a) {
return n(), q("div");
}
const Be = /* @__PURE__ */ r0(Re, [["render", ve]]), Ce = {
name: "IdmVoluntaryReportingArea",
props: {
map: {
type: Object
},
area: {
type: Object
},
beforeLayer: {
type: String
}
},
data() {
return {
source: "vra-source",
areaLayer: "vra-layer",
areaLabelLayer: "vra-label-layer"
};
},
watch: {
area: {
handler() {
this.area ? this.handleRender() : this.handleClear();
},
immediate: !0
}
},
methods: {
handleRender() {
this.map ? (this.handleClear(), this.area && (this.map.addSource(this.source, {
type: "geojson",
data: this.area
}), this.map.addLayer(
{
id: this.areaLayer,
type: "fill",
source: this.source,
filter: ["==", "$type", "Polygon"],
paint: {
"fill-outline-color": "silver",
"fill-opacity": 0.4,
"fill-color": "#9f30f9"
}
},
this.beforeLayer
), this.map.addLayer(
{
id: this.areaLayer + "-border",
type: "line",
source: this.source,
filter: ["==", "$type", "Polygon"],
paint: {
"line-width": 1,
"line-opacity": 1,
"line-color": "#9f30f9"
}
},
this.beforeLayer
), this.map.addLayer({
id: this.areaLabelLayer,
type: "symbol",
source: this.source,
filter: ["==", "$type", "Point"],
layout: {
"symbol-placement": "point",
"icon-size": 0.1,
"icon-image": "identify",
"text-anchor": "top",
"text-field": "{lbl}",
"text-rotation-alignment": "viewport",
"text-size": 10,
"text-offset": [0, -3.5]
},
paint: {
"icon-opacity": 0.8,
"text-color": "#000",
"text-halo-color": "#fff",
"text-halo-width": 1
}
}, this.beforeLayer))) : setTimeout(() => {
this.handleRender();
}, 500);
},
handleClear() {
this.map.getLayer(this.areaLayer) && this.map.removeLayer(this.areaLayer), this.map.getLayer(this.areaLayer + "-border") && this.map.removeLayer(this.areaLayer + "-border"), this.map.getLayer(this.areaLabelLayer) && this.map.removeLayer(this.areaLabelLayer), this.map.getSource(this.source) && this.map.removeSource(this.source);
}
}
};
function Ve(o, A, e, z, t, a) {
return n(), q("div");
}
const we = /* @__PURE__ */ r0(Ce, [["render", Ve]]), xe = {
name: "IdmSpecialArea",
props: {
map: {
type: Object
},
area: {
type: Object
},
beforeLayer: {
type: String
}
},
data() {
return {
source: "special-area-source",
areaLayer: "special-area-layer",
areaLabelLayer: "special-area-label-layer"
};
},
watch: {
area: {
handler() {
this.handleRender();
},
immediate: !0
}
},
methods: {
handleRender() {
this.map ? (this.handleClear(), this.area && (this.area.features.forEach((o) => {
o.geometry.type === "Polygon" && o.geometry.coordinates.forEach((A) => C0.convertToMonotonicLng2(A));
}), this.map.addSource(this.source, {
type: "geojson",
data: this.area
}), this.map.addLayer(
{
id: this.areaLayer,
type: "fill",
source: this.source,
filter: ["==", "$type", "Polygon"],
paint: {
"fill-outline-color": "silver",
"fill-opacity": 0.4,
"fill-color": ["match", ["get", "val"], "DefaultStyle", "rgb(0,0,0)", "JWCriskArea", "rgb(0,0,0)", "rgb(0,0,0)"]
}
},
this.beforeLayer
), this.map.addLayer(
{
id: this.areaLayer + "-border",
type: "line",
source: this.source,
filter: ["==", "$type", "Polygon"],
paint: {
"line-width": 1,
"line-opacity": 0.4,
"line-color": "rgb(0,0,0)"
}
},
this.beforeLayer
), this.map.addLayer({
id: this.areaLabelLayer,
type: "symbol",
source: this.source,
filter: ["==", "$type", "Point"],
layout: {
"symbol-placement": "point",
"icon-size": 0.1,
"icon-image": "identify",
"text-anchor": "top",
"text-field": "{lbl}",
"text-rotation-alignment": "viewport",
"text-size": 10,
"text-offset": [0, -3.5]
},
paint: {
"icon-opacity": 0.8,
"text-color": "#000",
"text-halo-color": "#fff",
"text-halo-width": 1
}
}, this.beforeLayer))) : setTimeout(() => {
this.handleRender();
}, 500);
},
handleClear() {
this.map.getLayer(this.areaLayer) && this.map.removeLayer(this.areaLayer), this.map.getLayer(this.areaLayer + "-border") && this.map.removeLayer(this.areaLayer + "-border"), this.map.getLayer(this.areaLabelLayer) && this.map.removeLayer(this.areaLabelLayer), this.map.getSource(this.source) && this.map.removeSource(this.source);
}
}
};
function Qe(o, A, e, z, t, a) {
return n(), q("div");
}
const Le = /* @__PURE__ */ r0(xe, [["render", Qe]]), ye = {
name: "IdmTerminator",
props: {
map: {
type: Object
},
mapFeather: {
type: String
},
area: {
type: Object
}
},
data() {
return {
source: "terminator-source",
layer: "terminator-layer"
};
},
computed: {
layerColor() {
return ["satellite", "dark"].includes(this.mapFeather) ? "rgba(0, 0, 0, 0.6)" : "rgba(0, 0, 0, 0.2)";
}
},
watch: {
area: {
handler() {
this.handleRender();
},
immediate: !0
}
},
methods: {
handleRender() {
this.map ? (this.handleClear(), this.area && (this.map.addSource(this.source, {
type: "geojson",
data: this.area
}), this.map.addLayer(
{
id: this.layer,
type: "fill",
source: this.source,
filter: ["==", "$type", "Polygon"],
paint: {
"fill-outline-color": "silver",
// "fill-opacity": .5,
"fill-color": this.layerColor
}
},
this.beforeLayer
))) : setTimeout(() => {
this.handleRender();
}, 500);
},
handleClear() {
this.map.getLayer(this.layer) && this.map.removeLayer(this.layer), this.map.getSource(this.source) && this.map.removeSource(this.source);
}
}
};
function Xe(o, A, e, z, t, a) {
return n(), q("div");
}
const Ye = /* @__PURE__ */ r0(ye, [["render", Xe]]), Ne = {
name: "IdmWorld12nm",
props: {
map: {
type: Object
},
show: {
type: Boolean
},
weatherLayers: {
type: Object,
default: () => ({})
},
zoom: {
type: Number,
default: 3
},
left: {
type: String,
default: "10px"
},
bottom: {
type: String,
default: "64px"
},
token: {
type: String,
default: ""
}
},
data() {
return {
layer: "world-12nm-v4-20231025"
};
},
watch: {
show: {
handler() {
this.show ? this.handleRender() : this.handleClear();
},
immediate: !0
}
},
methods: {
handleRender() {
var o;
this.map ? (o = this.map) != null && o.getLayer(this.layer) && (this.map.setLayoutProperty(this.layer, "visibility", "visible"), this.map.setPaintProperty(this.layer, "line-color", "rgb(210,54,83)"), this.map.setPaintProperty(this.layer, "line-width", 2)) : setTimeout(() => {
this.handleRender();
}, 500);
},
handleClear() {
var o;
(o = this.map) != null && o.getLayer(this.layer) && this.map.setLayoutProperty(this.layer, "visibility", "none");
}
}
};
function De(o, A, e, z, t, a) {
return null;
}
const Ue = /* @__PURE__ */ r0(Ne, [["render", De]]);
const Ze = {
name: "IdmWorldMarine",
props: {
map: {
type: Object
},
show: {
type: Boolean
}
},
data() {
return {
labelLayer: "ne-10m-label",
lineLayer: "ne-10m-outline"
};
},
watch: {
show: {
handler() {
this.show ? this.handleRender() : this.handleClear();
},
immediate: !0
}
},
methods: {
handleRender() {
var o, A;
this.map ? ((o = this.map) != null && o.getLayer(this.lineLayer) && (this.map.setLayoutProperty(this.lineLayer, "visibility", "visible"), this.map.setPaintProperty(this.lineLayer, "line-width", 1)), (A = this.map) != null && A.getLayer(this.labelLayer) && this.map.setLayoutProperty(this.labelLayer, "visibility", "visible")) : setTimeout(() => {
this.handleRender();
}, 500);
},
handleClear() {
var o, A;
(o = this.map) != null && o.getLayer(this.lineLayer) && this.map.setLayoutProperty(this.lineLayer, "visibility", "none"), (A = this.map) != null && A.getLayer(this.labelLayer) && this.map.setLayoutProperty(this.labelLayer, "visibility", "none");
}
}
};
function Te(o, A, e, z, t, a) {
return null;
}
const Ge = /* @__PURE__ */ r0(Ze, [["render", Te]]), Fe = {
name: "IdmChinaRoute",
props: {
map: {
type: Object
},
show: {
type: Boolean
}
},
data() {
return {
labelLayer: "china-route-label",
lineLayer: "china-route-line",
fillLayer: "china-route-fill"
};
},
watch: {
show: {
handler() {
this.show ? this.handleRender() : this.handleClear();
},
immediate: !0
}
},
methods: {
handleRender() {
var o, A, e;
this.map ? ((o = this.map) != null && o.getLayer(this.lineLayer) && this.map.setLayoutProperty(this.lineLayer, "visibility", "visible"), (A = this.map) != null && A.getLayer(this.fillLayer) && this.map.setLayoutProperty(this.fillLayer, "visibility", "visible"), (e = this.map) != null && e.getLayer(this.labelLayer) && this.map.setLayoutProperty(this.labelLayer, "visibility", "visible")) : setTimeout(() => {
this.handleRender();
}, 500);
},
handleClear() {
var o, A, e;
(o = this.map) != null && o.getLayer(this.lineLayer) && this.map.setLayoutProperty(this.lineLayer, "visibility", "none"), (A = this.map) != null && A.getLayer(this.fillLayer) && this.map.setLayoutProperty(this.fillLayer, "visibility", "none"), (e = this.map) != null && e.getLayer(this.labelLayer) && this.map.setLayoutProperty(this.labelLayer, "visibility", "none");
}
}
};
function ke(o, A, e, z, t, a) {
return null;
}
const Pe = /* @__PURE__ */ r0(Fe, [["render", ke]]);
const Ke = {
name: "IdmLatLng",
props: {
map: {
type: Object
},
show: {
type: Boolean
},
mapFeather: {
type: String
},
beforeLayer: {
type: String
},
menuToggle: {
type: Object
}
},
data() {
return {
lngLat: void 0,
source: "idm-lat-lng-source",
layer: "idm-lat-lng-layer",
labelLayer: "idm-lat-lng-label-layer",
right: 10
};
},
computed: {
lineColor() {
return ["satellite", "dark"].includes(this.mapFeather) ? "rgba(255, 255, 255, 0.3)" : "rgba(0, 0, 0, 0.3)";
}
},
watch: {
show: {
handler() {
this.handleBind();
},
immediate: !0
},
map: {
handler() {
var o;
this.map && ((o = this.map) == null || o.on("mousemove", this.handleMouseMove));
},
immediate: !0
},
"menuToggle.v": {
handler() {
var o;
this.right = (((o = document.getElementsByClassName("right-bar")[0]) == null ? void 0 : o.clientWidth) || 0) + 10;
},
immediate: !0
}
},
methods: {
handleBind() {
var o, A;
this.show ? ((o = this.map) == null || o.on("zoomend", this.handleZoomEnd), this.handleRender()) : (this.handleClear(), (A = this.map) == null || A.off("zoomend", this.handleZoomEnd));
},
handleMouseMove(o) {
const A = o.lngLat, e = C0.lng2pretty(A.lng, 2), z = C0.lat2pretty(A.lat, 2), t = `[${A.lng.toFixed(4)}, ${A.lat.toFixed(4)}]`;
this.lngLat = { lng: e, lat: z, str: t };
},
handleComputeLatLngs() {
var z;
const o = (z = this.map) == null ? void 0 : z.getZoom();
let A = 30;
o > 4 ? A = 10 : o > 3 && (A = 15);
const e = [];
for (let t = -60; t < 90; t += A)
e.push({
type: "Feature",
geometry: {
type: "LineString",
coordinates: [
[-180, t],
[180, t]
]
}
});
for (let t = -180; t < 180; t += A)
e.push({
type: "Feature",
geometry: {
type: "LineString",
coordinates: [
[t, -90],
[t, 90]
]
}
});
for (let t = 180; t > -180; t -= A)
for (let a = -60; a < 90; a += A)
e.push({
type: "Feature",
geometry: {
type: "Point",
coordinates: [t, a]
},
properties: {
val: `${a > 0 ? a + " N" : a === 0 ? a : a * -1 + " S"}, ${t > 0 ? t + " E" : t * -1 + " W"}`
}
});
return e;
},
handleZoomEnd() {
var A;
const o = this.handleComputeLatLngs();
(A = this.map) == null || A.getSource(this.source).setData(j.featureCollection(o));
},
handleRender() {
if (this.handleClear(), this.map) {
const o = this.handleComputeLatLngs();
this.map.addSource(this.source, {
type: "geojson",
data: {
type: "FeatureCollection",
features: o
}
}), this.map.addLayer({
id: this.layer,
type: "line",
source: this.source,
filter: ["==", "$type", "LineString"],
layout: {
"line-join": "round",
"line-cap": "round"
},
paint: {
"line-color": this.lineColor,
"line-width": 1
}
}, this.beforeLayer), this.map.addLayer({
id: this.labelLayer,
type: "symbol",
source: this.source,
filter: ["==", "$type", "Point"],
layout: {
"symbol-placement": "point",
"text-field": "{val}",
"text-rotation-alignment": "viewport",
"text-offset": [0, 1],
"text-size": 10,
"text-allow-overlap": !0
},
paint: {
"text-opacity": 0.8,
"text-color": this.lineColor
}
}, this.beforeLayer);
}
},
handleClear() {
var o, A, e, z, t, a;
(o = this.map) != null && o.getLayer(this.layer) && ((A = this.map) == null || A.removeLayer(this.layer)), (e = this.map) != null && e.getLayer(this.labelLayer) && ((z = this.map) == null || z.removeLayer(this.labelLayer)), (t = this.map) != null && t.getSource(this.source) && ((a = this.map) == null || a.removeSource(this.source));
}
}
};
function je(o, A, e, z, t, a) {
return t.lngLat ? (n(), q("div", {
key: 0,
class: "idm-lat-lng-tip-gl4 pa-2 text-caption text-right rounded",
style: s0({ right: t.right + "px" })
}, [
M("div", null, w(t.lngLat.lat.pretty), 1),
M("div", null, w(t.lngLat.lng.pretty), 1),
M("div", null, w(t.lngLat.str), 1)
], 4)) : T("", !0);
}
const GA = /* @__PURE__ */ r0(Ke, [["render", je]]), Se = "data:image/png;base64,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