gisviewer-vue3-arcgis
Version:
在应用中引入私服的包, 项目根目录下 新建文件 .npmrc 在 .npmrc 中对包源进行配置:
225 lines (224 loc) • 6.14 kB
JavaScript
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
};