gisviewer-vue3-arcgis
Version:
在应用中引入私服的包, 项目根目录下 新建文件 .npmrc 在 .npmrc 中对包源进行配置:
195 lines (194 loc) • 5.07 kB
JavaScript
import { Polygon as d } from "@arcgis/core/geometry";
import * as l from "@arcgis/core/geometry/geometryEngine";
import n from "@arcgis/core/Graphic";
import c from "@arcgis/core/layers/GraphicsLayer";
class u {
constructor(e, s) {
this.defaultPointSymbol = {
type: "simple-marker",
style: "circle",
color: "yellow",
size: 10
}, this.view = e, this.overlayLayer = new c({
...s
}), this.view.map.layers.add(this.overlayLayer);
}
addMask(e) {
this.removeMask();
const s = e.maskColor || [100, 100, 100, 0.8], i = e.maskSize || 100;
let r = new d({
rings: [e.geometry.rings[0]]
});
const t = r.centroid, a = l.geodesicBuffer(
t,
i,
"kilometers"
);
let o = l.difference(
a,
r
);
if (e.geometry.rings.length > 1)
for (let y = 1; y < e.geometry.rings.length; y++)
r = new d({
rings: [e.geometry.rings[y]]
}), o = l.difference(
o,
r
);
const h = new n({
geometry: o,
symbol: {
type: "simple-fill",
color: s,
outline: {
style: "long-dash",
color: "white"
}
},
attributes: { type: "mask" }
});
this.overlayLayer.add(h);
}
removeMask() {
const e = this.overlayLayer.graphics.find(
(s) => s.getAttribute("type") === "mask"
);
e && this.overlayLayer.remove(e);
}
/**
* 添加覆盖物
* @param params
*/
addOverlays(e) {
let s = 0, i = 0;
for (const r of e.overlays) {
r.properties ? (r.properties.type || (r.properties.type = e.type), r.properties.id || (r.properties.id = r.id)) : r.properties = { type: e.type, id: r.id };
const t = r.symbol || e.defaultSymbol || this.defaultPointSymbol;
this.addOverlay(
r,
t,
r.properties,
r.visible
).message === "add" ? s++ : i++;
}
return { status: 0, message: `新增${s}, 更新${i}` };
}
/**
* 按type移除覆盖物
* @param types
*/
removeOverlaysByType(e) {
const s = this.overlayLayer.graphics.filter((i) => {
const r = i.getAttribute("type");
return e.includes(r);
});
return this.overlayLayer.graphics.removeMany(s), { status: 0, message: `删除${s.length}` };
}
/**
* 按id移除覆盖物
* @param ids
*/
removeOverlaysById(e) {
const s = this.overlayLayer.graphics.filter((i) => {
const r = i.getAttribute("id");
return e.includes(r);
});
return this.overlayLayer.graphics.removeMany(s), { status: 0, message: `删除${s.length}` };
}
/**
* 按id显示或隐藏覆盖物
* @param ids
* @param isShow
*/
isShowOverlaysByIds(e, s) {
this.overlayLayer.graphics.map((i) => {
const r = i.getAttribute("id");
e.includes(r) ? i.visible = s : i.visible = !s;
});
}
/**
* 显示全部覆盖物
*
* @memberof Overlay
*/
showAllOverlays() {
this.overlayLayer.graphics.forEach((e) => {
e.visible = !0;
});
}
/**
* 删除全部覆盖物
* @returns
*/
removeAllOverlays() {
const e = this.overlayLayer.graphics.length;
return this.overlayLayer.removeAll(), { status: 0, message: `删除${e}` };
}
/**
* 销毁
*
* @memberof Overlay
*/
destroy() {
this.view.map.remove(this.overlayLayer), this.overlayLayer.destroy();
}
removeGraphics(e) {
Array.isArray(e) || (e = [e]), this.overlayLayer.graphics.removeMany(e);
}
/**
* 查找当前点击是否有覆盖物在当前图层
*
* @param {((MouseEvent | __esri.MapViewScreenPoint) &
* (__esri.SceneViewScreenPoint | MouseEvent))} event
* @returns
* @memberof Overlay
*/
async findGraphic(e) {
var r;
return (r = (await this.view.hitTest(e)).results) == null ? void 0 : r.filter(
(t) => t.type === "graphic" && t.graphic.layer === this.overlayLayer
);
}
/**
* 隐藏图层
*
* @memberof Overlay
*/
hideLayer() {
this.overlayLayer.visible = !1;
}
/**
* 显示图层
*
* @memberof Overlay
*/
showLayer() {
this.overlayLayer.visible = !0;
}
/**
* 添加点覆盖物
* @param overlay
* @param symbol
* @param properties
*/
addPoint(e, s, i, r) {
let t, a = !0;
return e.id && (t = this.overlayLayer.graphics.find(
(o) => o.getAttribute("id") === e.id
)), t ? t.visible = r ?? t.visible : (r = r ?? !0, t = new n({
visible: r
}), this.overlayLayer.add(t), a = !1), t.geometry = e.geometry, t.symbol = s, t.attributes = i, { status: 0, message: a ? "add" : "update" };
}
addOverlay(e, s, i, r) {
let t, a = !0;
return e.id && (t = this.overlayLayer.graphics.find(
(o) => o.getAttribute("id") === e.id
)), t ? t.visible = r ?? t.visible : (r = r ?? !0, t = new n({
visible: r
}), this.overlayLayer.add(t), a = !1), t.geometry = e.geometry, t.symbol = s, t.attributes = i, { status: 0, message: a ? "add" : "update" };
}
}
export {
u as default
};