forked from integrated_whb/integrated_whb_vue
人员实时追踪
parent
75c44cf1ef
commit
5fef270f7e
Binary file not shown.
After Width: | Height: | Size: 303 KiB |
Binary file not shown.
After Width: | Height: | Size: 3.9 KiB |
Binary file not shown.
After Width: | Height: | Size: 3.9 KiB |
Binary file not shown.
After Width: | Height: | Size: 3.8 KiB |
Binary file not shown.
After Width: | Height: | Size: 3.9 KiB |
|
@ -32,6 +32,9 @@ const { open, close } = useWebSocket(
|
|||
if (decodedMsg.msg === "006") {
|
||||
addNewPerson(decodedMsg.data);
|
||||
}
|
||||
if (decodedMsg.msg === "008") {
|
||||
removePerson(decodedMsg.data);
|
||||
}
|
||||
},
|
||||
onDisconnected: () => {
|
||||
if (entityArr && entityArr.children) {
|
||||
|
@ -65,16 +68,16 @@ const getOnlineUser = async () => {
|
|||
|
||||
userList.forEach((item) => {
|
||||
const user = item.split(",");
|
||||
addEntity(user[0], user[5], user[1], user[2], user[3], user[8]);
|
||||
addBillboard(user[0], user[5], user[1], user[2], user[3], user[8]);
|
||||
addEntity(user[0], user[5], user[1], user[2], user[3], user[8], user[6]);
|
||||
addBillboard(user[0], user[5], user[1], user[2], user[3], user[8], user[7]);
|
||||
});
|
||||
entityArr.show(true);
|
||||
billboardArr.show(true);
|
||||
};
|
||||
|
||||
const addEntity = (id, name, lon, lat, height, floor) => {
|
||||
const addEntity = (id, name, lon, lat, height, floor, gltf) => {
|
||||
const obj = new window.CustomCesium.Model(window.$icy, {
|
||||
url: "/src/assets/glb/person_000002_blue.gltf",
|
||||
url: "/src/assets/glb/" + gltf + ".gltf",
|
||||
height: 0,
|
||||
scale: 1,
|
||||
angle: [-90, 0, 0],
|
||||
|
@ -87,6 +90,7 @@ const addEntity = (id, name, lon, lat, height, floor) => {
|
|||
{
|
||||
name: "人物",
|
||||
floor,
|
||||
peoName: name,
|
||||
height,
|
||||
id,
|
||||
lon,
|
||||
|
@ -101,17 +105,18 @@ const addEntity = (id, name, lon, lat, height, floor) => {
|
|||
entityArr.add(enModule);
|
||||
};
|
||||
|
||||
const addBillboard = (id, name, lon, lat, height, floor) => {
|
||||
const addBillboard = (id, name, lon, lat, height, floor, type) => {
|
||||
// 创建广告牌
|
||||
const bulletinBoard = new window.CustomCesium.BulletinBoard(window.$icy);
|
||||
bulletinBoard.loadCanvas(drawCanvas(name, floor), {
|
||||
name: "人物铭牌",
|
||||
floor,
|
||||
peoNamr: name,
|
||||
peoName: name,
|
||||
id: id + "_name",
|
||||
lon,
|
||||
lat,
|
||||
height: Number(height) + 2.05,
|
||||
url: "/src/assets/glb/" + type + ".png",
|
||||
});
|
||||
billboardArr.add(bulletinBoard);
|
||||
};
|
||||
|
@ -119,8 +124,8 @@ const addBillboard = (id, name, lon, lat, height, floor) => {
|
|||
// eslint-disable-next-line no-unused-vars
|
||||
const drawCanvas = (name, floor) => {
|
||||
const canvas = document.createElement("canvas");
|
||||
const width = 70;
|
||||
const height = 20;
|
||||
const width = 160;
|
||||
const height = 46;
|
||||
canvas.width = width;
|
||||
canvas.height = height;
|
||||
const borderRadius = 5; // 圆角半径
|
||||
|
@ -143,7 +148,7 @@ const drawCanvas = (name, floor) => {
|
|||
ctx.fill();
|
||||
|
||||
ctx.fillStyle = "#fff";
|
||||
ctx.font = "normal 12px 'Microsoft YaHei'";
|
||||
ctx.font = "normal 28px 'Microsoft YaHei'";
|
||||
ctx.textAlign = "center";
|
||||
ctx.textBaseline = "middle";
|
||||
ctx.fillText((name || "未知人员") + `(${floor}F)`, width / 2, height / 2);
|
||||
|
@ -153,8 +158,39 @@ const drawCanvas = (name, floor) => {
|
|||
const addNewPerson = (data) => {
|
||||
data.forEach((item) => {
|
||||
const entity = item.split(",");
|
||||
addEntity(entity[0], entity[5], entity[1], entity[2], entity[4]);
|
||||
addBillboard(entity[0], entity[5], entity[1], entity[2], entity[4]);
|
||||
addEntity(
|
||||
entity[0],
|
||||
entity[5],
|
||||
entity[1],
|
||||
entity[2],
|
||||
entity[4],
|
||||
1,
|
||||
entity[6]
|
||||
);
|
||||
addBillboard(
|
||||
entity[0],
|
||||
entity[5],
|
||||
entity[1],
|
||||
entity[2],
|
||||
entity[4],
|
||||
1,
|
||||
entity[7]
|
||||
);
|
||||
});
|
||||
};
|
||||
|
||||
const removePerson = (data) => {
|
||||
data.forEach((item) => {
|
||||
entityArr.children.forEach((e) => {
|
||||
if (e.entity._id === item) {
|
||||
e.destroy();
|
||||
}
|
||||
});
|
||||
billboardArr.children.forEach((e) => {
|
||||
if (e.entity._id === item + "_name") {
|
||||
e.destroy();
|
||||
}
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
|
@ -203,8 +239,6 @@ function peoMovement(moveData) {
|
|||
Number(Number(itData[4]) + 2.05),
|
||||
2000
|
||||
); // 人物铭牌平滑移动
|
||||
console.log(b.entity.floor);
|
||||
console.log(Number(itData[6]));
|
||||
if (Number(itData[6]) !== Number(b.entity.floor)) {
|
||||
b.entity.floor = itData[6];
|
||||
billboardArr.children[m].uopdateImg(
|
||||
|
@ -219,6 +253,19 @@ function peoMovement(moveData) {
|
|||
});
|
||||
}
|
||||
|
||||
export const trackUser = (id, b) => {
|
||||
if (b) {
|
||||
const t = window.$icy.viewer.entities.getById(id);
|
||||
window.$icy.viewer.trackedEntity = t;
|
||||
window.$icy.viewer._selectedEntity = t;
|
||||
t.viewFrom = new window.Cesium.Cartesian3(-30, 60, 30);
|
||||
} else {
|
||||
window.$icy.viewer._selectedEntity = undefined;
|
||||
window.$icy.viewer.trackedEntity = undefined;
|
||||
window.$icy.viewer.camera.lookAtTransform(window.Cesium.Matrix4.IDENTITY);
|
||||
}
|
||||
};
|
||||
|
||||
export const handleFence = async (b) => {
|
||||
if (b) {
|
||||
const { data } = await getFenceList();
|
||||
|
|
Loading…
Reference in New Issue