Files
water-management-system/frontend/node_modules/@cesium/engine/Source/Scene/Cesium3DTileFeatureTable.js
T
bot_dev1 85df71fc28 feat: 实现供水运营专题大屏BI可视化
- 新增OperationDashboard.vue全屏大屏组件
- 添加6个核心KPI指标卡片: 进水总量/出水总量/产销差率/营收额/平均水质/报警次数
- 实现6个ECharts图表: 供水趋势/水质分布/报警统计/管网空间/设备状态/营收分析
- 创建静态HTML版本operation-dashboard.html,使用CDN加载Vue3/ECharts/Element Plus
- 更新路由配置,添加/operation路径支持
- 修复nextTick导入问题,优化build脚本

🚧 开发者: bot_dev1
📝 任务: #38 [BI] 运营仪表盘 + 供水专题大屏
2026-06-15 09:06:11 +08:00

132 lines
3.0 KiB
JavaScript

import ComponentDatatype from "../Core/ComponentDatatype.js";
import defined from "../Core/defined.js";
/**
* @private
*/
function Cesium3DTileFeatureTable(featureTableJson, featureTableBinary) {
this.json = featureTableJson;
this.buffer = featureTableBinary;
this._cachedTypedArrays = {};
this.featuresLength = 0;
}
function getTypedArrayFromBinary(
featureTable,
semantic,
componentType,
componentLength,
count,
byteOffset,
) {
const cachedTypedArrays = featureTable._cachedTypedArrays;
let typedArray = cachedTypedArrays[semantic];
if (!defined(typedArray)) {
typedArray = ComponentDatatype.createArrayBufferView(
componentType,
featureTable.buffer.buffer,
featureTable.buffer.byteOffset + byteOffset,
count * componentLength,
);
cachedTypedArrays[semantic] = typedArray;
}
return typedArray;
}
function getTypedArrayFromArray(featureTable, semantic, componentType, array) {
const cachedTypedArrays = featureTable._cachedTypedArrays;
let typedArray = cachedTypedArrays[semantic];
if (!defined(typedArray)) {
typedArray = ComponentDatatype.createTypedArray(componentType, array);
cachedTypedArrays[semantic] = typedArray;
}
return typedArray;
}
Cesium3DTileFeatureTable.prototype.getGlobalProperty = function (
semantic,
componentType,
componentLength,
) {
const jsonValue = this.json[semantic];
if (!defined(jsonValue)) {
return undefined;
}
if (defined(jsonValue.byteOffset)) {
componentType = componentType ?? ComponentDatatype.UNSIGNED_INT;
componentLength = componentLength ?? 1;
return getTypedArrayFromBinary(
this,
semantic,
componentType,
componentLength,
1,
jsonValue.byteOffset,
);
}
return jsonValue;
};
Cesium3DTileFeatureTable.prototype.hasProperty = function (semantic) {
return defined(this.json[semantic]);
};
Cesium3DTileFeatureTable.prototype.getPropertyArray = function (
semantic,
componentType,
componentLength,
) {
const jsonValue = this.json[semantic];
if (!defined(jsonValue)) {
return undefined;
}
if (defined(jsonValue.byteOffset)) {
if (defined(jsonValue.componentType)) {
componentType = ComponentDatatype.fromName(jsonValue.componentType);
}
return getTypedArrayFromBinary(
this,
semantic,
componentType,
componentLength,
this.featuresLength,
jsonValue.byteOffset,
);
}
return getTypedArrayFromArray(this, semantic, componentType, jsonValue);
};
Cesium3DTileFeatureTable.prototype.getProperty = function (
semantic,
componentType,
componentLength,
featureId,
result,
) {
const jsonValue = this.json[semantic];
if (!defined(jsonValue)) {
return undefined;
}
const typedArray = this.getPropertyArray(
semantic,
componentType,
componentLength,
);
if (componentLength === 1) {
return typedArray[featureId];
}
for (let i = 0; i < componentLength; ++i) {
result[i] = typedArray[componentLength * featureId + i];
}
return result;
};
export default Cesium3DTileFeatureTable;