let drConfig = {
|
width: 1000,
|
height: 1000,
|
};
|
|
function createCanvas() {
|
var canvas = document.createElement("canvas");
|
canvas.width = drConfig.width;
|
canvas.height = drConfig.height;
|
return canvas;
|
}
|
function drawHeatMap(datas) {
|
|
let gradient = {
|
'.3': 'blue',
|
'.5': 'green',
|
'.7': 'yellow',
|
'.95': 'red'
|
}
|
let heatmapContainer = document.createElement('div');
|
heatmapContainer.setAttribute('style', 'width:' + drConfig.width + 'px;height:' + drConfig.height + 'px;display:none;');
|
document.body.appendChild(heatmapContainer);
|
|
let heatmapInstance = h337.create({
|
container: heatmapContainer,
|
// 最大透明度
|
maxOpacity: 0.8,
|
// 最小透明度
|
minOpacity: 0.1,
|
// 模糊系数,模糊系数越高,渐变就越平滑
|
blur: 0.85,
|
// 默认半径
|
radius: 7,
|
// 渐变
|
gradient: gradient
|
});
|
|
heatmapInstance.setData(datas);
|
signallingData.canvas.push(heatmapInstance._renderer.canvas);
|
signallingData.heatmap.push(heatmapContainer);
|
return heatmapInstance._renderer.canvas;
|
}
|
|
function pointToPixel(point) {
|
let result = {
|
x: 0, y: 0,
|
};
|
let dx = signallingData.extent.dx;
|
let dy = signallingData.extent.dy;
|
result.x = Math.floor((point[0] - signallingData.extent.minx) * drConfig.width / dx);
|
result.y = Math.floor((signallingData.extent.maxy - point[1]) * drConfig.height / dy);
|
return result;
|
}
|
function coordinateTransformation() {
|
let positions = signallingData.positions;
|
|
for (let i = 0; i < positions.length; i++) {
|
let position = positions[i];
|
let point = pointToPixel(position);
|
signallingData.pixels.push(point);
|
}
|
}
|
function createEntity() {
|
let pArray = [];
|
let extent = signallingData.extent;
|
pArray.push(extent.minx, extent.miny);
|
pArray.push(extent.maxx, extent.miny);
|
pArray.push(extent.maxx, extent.maxy);
|
pArray.push(extent.minx, extent.maxy);
|
let hierarchy = Cesium.Cartesian3.fromDegreesArray(pArray);
|
let entity = viewer.entities.add({
|
id: "signalling",
|
polygon: {
|
hierarchy: new Cesium.PolygonHierarchy(hierarchy),
|
material: new Cesium.ImageMaterialProperty({
|
image: new Cesium.CallbackProperty(function () {
|
return signallingData.canvas[signallingData.selectid];
|
}, false),
|
|
repeat: new Cesium.Cartesian2(1, 1)
|
})
|
}
|
});
|
return entity;
|
}
|
function dataDraw(callback) {
|
if (signallingData.heatmapEntity == null) {
|
coordinateTransformation();
|
let values = signallingData.values;
|
let points = signallingData.pixels;
|
for (let i = 0; i < values.length; i++) {
|
let value = values[i];
|
let datas = [];
|
let vmax = 0;
|
signallingData.count[i] = 0;
|
for (let j = 0; j < value.length; j++) {
|
let point = points[j];
|
if (value[j] != 0) {
|
signallingData.count[i] += value[j];
|
if (vmax < value[j]) {
|
vmax = value[j];
|
}
|
let data = {
|
x: point.x,
|
y: point.y,
|
value: value[j],
|
radius: 7
|
};
|
datas.push(data);
|
}
|
}
|
vmax = 500;
|
let canvas = drawHeatMap({
|
max: vmax,
|
min: 0,
|
data: datas
|
});
|
|
}
|
signallingData.heatmapEntity = createEntity();
|
if (callback) {
|
callback();
|
}
|
}else{
|
setDataRenderVisible(true);
|
}
|
return signallingData.heatmapEntity;
|
}
|
function setDataRenderVisible(show) {
|
try {
|
if (signallingData.heatmapEntity) {
|
signallingData.heatmapEntity.show = show;
|
}
|
} catch (e) { }
|
}
|
function removeDataRender() {
|
try {
|
//let entity = viewer.entities.getById("signalling");
|
viewer.entities.remove(signallingData.heatmapEntity);
|
signallingData.heatmapEntity = null;
|
|
} catch (e) { }
|
try {
|
for (let i = 0; i < signallingData.heatmap.length; i++) {
|
try {
|
document.body.removeChild(signallingData.heatmap[i]);
|
} catch (e) { }
|
}
|
signallingData.heatmap = [];
|
} catch (e) { }
|
}
|