Appearance
淹没分析
ts
import { Viewer, Flood, DrawHandler, DrawMode, TerrainManager } from "joDVF";
import { Pane } from "tweakpane";
import {
Cartesian3,
HeadingPitchRoll,
SceneMode,
CesiumTerrainProvider
} from "joCesium";
const { mapContainer, uiContainer } = createContainer();
const viewer = new Viewer(mapContainer, {
sceneOptions: SceneMode.SCENE3D,
terrainProvider: await CesiumTerrainProvider.fromUrl(
"/cacheServer/assets.cesium.com/1"
)
});
console.log(TerrainManager.createWorldTerrain());
viewer.camera.flyTo({
destination: new Cartesian3(
-2211829.8331659427,
4938813.600360793,
3365879.7124653924
),
orientation: new HeadingPitchRoll(
0.4002421058189718,
-0.299157026567058,
0.001231284133687005
)
});
viewer.scene.globe.depthTestAgainstTerrain = true;
const scene = viewer.scene;
const flood = new Flood(viewer);
const handler = new DrawHandler(viewer, DrawMode.Polygon);
let positions = [];
let pause = true;
handler.drewEvent.addEventListener((result) => {
positions = result[0];
handler.clear();
debugger;
const maxHeight = flood.addPositionToPrimitive(positions);
console.log(maxHeight, "maxHeight");
});
flood.onChange.addEventListener((result) => {
console.log(result);
});
flood.onFinish.addEventListener(() => {
console.log("stop");
});
addUI();
function addUI() {
const pane = new Pane({
container: uiContainer,
title: "操作"
});
const drawBtn = pane.addButton({
title: "绘制"
});
drawBtn.on("click", () => {
if (flood) flood.clear();
handler.activate();
});
const startBtn = pane.addButton({
title: "开始"
});
startBtn.on("click", () => {
flood.start();
});
const pauseBtn = pane.addButton({
title: "暂停"
});
pauseBtn.on("click", () => {
if (!flood.isPause) {
flood.pause();
pauseBtn.title = "继续";
} else {
flood.continue();
pauseBtn.title = "暂停";
}
});
const stopBtn = pane.addButton({
title: "停止"
});
stopBtn.on("click", () => {
flood.stop();
});
const clearBtn = pane.addButton({
title: "清除"
});
clearBtn.on("click", () => {
if (flood) flood.clear();
});
}
function createContainer() {
const container = document.createElement("div");
container.style.width = "100%";
container.style.height = "100%";
const uiContainer = document.createElement("div");
uiContainer.style.position = "fixed";
uiContainer.style.top = "5px";
uiContainer.style.left = "5px";
document.body.appendChild(container);
document.body.appendChild(uiContainer);
return {
mapContainer: container,
uiContainer
};
}
