UNPKG

gisviewer-vue3-arcgis

Version:

在应用中引入私服的包, 项目根目录下 新建文件 .npmrc 在 .npmrc 中对包源进行配置:

225 lines (224 loc) 6.14 kB
import { Polygon as h } from "@arcgis/core/geometry"; import * as n from "@arcgis/core/geometry/geometryEngine"; import d from "@arcgis/core/Graphic"; import c from "@arcgis/core/layers/GraphicsLayer"; class m { constructor(e, t) { this.flashingMap = /* @__PURE__ */ new Map(), this.defaultPointSymbol = { type: "simple-marker", style: "circle", color: "yellow", size: 10 }, this.view = e, this.overlayLayer = new c({ ...t }), this.view.map.layers.add(this.overlayLayer); } addMask(e) { this.removeMask(); const t = e.maskColor || [100, 100, 100, 0.8], r = e.maskSize || 100; let i = new h({ rings: [e.geometry.rings[0]] }); const s = i.centroid, o = n.geodesicBuffer( s, r, "kilometers" ); let l = n.difference( o, i ); if (e.geometry.rings.length > 1) for (let y = 1; y < e.geometry.rings.length; y++) i = new h({ rings: [e.geometry.rings[y]] }), l = n.difference( l, i ); const a = new d({ geometry: l, symbol: { type: "simple-fill", color: t, outline: { style: "long-dash", color: "white" } }, attributes: { type: "mask" } }); this.overlayLayer.add(a); } removeMask() { const e = this.overlayLayer.graphics.find( (t) => t.getAttribute("type") === "mask" ); e && this.overlayLayer.remove(e); } /** * 添加覆盖物 * @param params */ addOverlays(e) { let t = 0, r = 0; e.defaultVisible == null && (e.defaultVisible = !0); for (const i of e.overlays) { i.properties ? (i.properties.type || (i.properties.type = e.type), i.properties.id || (i.properties.id = i.id)) : i.properties = { type: e.type, id: i.id }; const s = i.symbol || e.defaultSymbol || this.defaultPointSymbol, o = i.visible == null ? e.defaultVisible : i.visible; this.addOverlay( i, s, i.properties, o ).message === "add" ? t++ : r++; } return { status: 0, message: `新增${t}, 更新${r}` }; } /** * 按type移除覆盖物 * @param types */ removeOverlaysByType(e) { const t = this.overlayLayer.graphics.filter((r) => { const i = r.getAttribute("type"); return Array.isArray(e) ? e.includes(i) : i === e; }); return t.forEach( (r) => this.stopFlash({ id: r.getAttribute("id") }) ), this.overlayLayer.graphics.removeMany(t), { status: 0, message: `删除${t.length}` }; } /** * 按id移除覆盖物 * @param ids */ removeOverlaysById(e) { const t = this.overlayLayer.graphics.filter((r) => { const i = r.getAttribute("id"); return Array.isArray(e) ? e.includes(i) : i === e; }); return t.forEach( (r) => this.stopFlash({ id: r.getAttribute("id") }) ), this.overlayLayer.graphics.removeMany(t), { status: 0, message: `删除${t.length}` }; } /** * 按id显示或隐藏覆盖物 * @param ids * @param isShow */ isShowOverlaysByIds(e, t) { this.overlayLayer.graphics.map((r) => { const i = r.getAttribute("id"); e.includes(i) ? r.visible = t : r.visible = !t; }); } /** * 显示全部覆盖物 * * @memberof Overlay */ showAllOverlays() { this.overlayLayer.graphics.forEach((e) => { e.visible = !0; }); } /** * 删除全部覆盖物 * @returns */ removeAllOverlays() { this.stopFlash(); const e = this.overlayLayer.graphics.length; return this.overlayLayer.removeAll(), { status: 0, message: `删除${e}` }; } /** * 销毁 * * @memberof Overlay */ destroy() { this.flashingMap.forEach((e, t) => { this.stopFlash({ id: t }); }), this.view.map.remove(this.overlayLayer), this.overlayLayer.destroy(); } removeGraphics(e) { Array.isArray(e) || (e = [e]), this.overlayLayer.graphics.removeMany(e); } /** * 隐藏图层 * * @memberof Overlay */ hideLayer() { this.overlayLayer.visible = !1; } /** * 显示图层 * * @memberof Overlay */ showLayer() { this.overlayLayer.visible = !0; } /** * 按id定位覆盖物并闪烁 * @param params 参数对象 * @param params.id 覆盖物id * @param params.duration 闪烁持续时间(秒),不传则保持闪烁 * @param params.needZoom 是否需要缩放到覆盖物 */ async flashOverlay(e) { const t = this.overlayLayer.graphics.find( (a) => a.getAttribute("id") === e.id ); if (!t) return; this.stopFlash(e); const r = e.duration == null, i = r ? 0 : Math.max(e.duration, 0.1) * 1e3, s = 400, o = t.visible, l = () => { t.visible = !0; const a = setInterval(() => { t.visible = !t.visible; }, s), y = r ? void 0 : setTimeout(() => { this.stopFlash(e); }, i); this.flashingMap.set(e.id, { timer: a, timeout: y, originalVisible: o }); }; e.needZoom === !0 && await this.view.goTo(t), l(); } /** * 停止指定覆盖物闪烁 * @param params 参数对象 * @param params.id 覆盖物id */ stopFlash(e) { const t = e == null ? void 0 : e.id; if (t) { const r = this.flashingMap.get(t); if (!r) return; clearInterval(r.timer), r.timeout && clearTimeout(r.timeout); const i = this.overlayLayer.graphics.find( (s) => s.getAttribute("id") === t ); i && (i.visible = r.originalVisible), this.flashingMap.delete(t); } else this.flashingMap.forEach((r, i) => { clearInterval(r.timer), r.timeout && clearTimeout(r.timeout); }), this.flashingMap.clear(); } addOverlay(e, t, r, i) { let s, o = !0; return e.id && (s = this.overlayLayer.graphics.find( (l) => l.getAttribute("id") === e.id )), s ? s.visible = i : (s = new d({ visible: i }), this.overlayLayer.add(s), o = !1), s.geometry = e.geometry, s.symbol = t, s.attributes = r, { status: 0, message: o ? "add" : "update" }; } } export { m as default };