Skip to content

淹没分析


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
  };
}