Skip to content

缓冲区分析


ts
import { Viewer, BufferAnalysis } from "joDVF";
import { Pane } from "tweakpane";
import {
  Cartesian3,
  HeadingPitchRoll,
  Math,
  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"
  )
});

viewer.camera.flyTo({
  destination: Cartesian3.fromDegrees(105.414901, 30.365411, 3710),
  orientation: new HeadingPitchRoll(
    Math.toRadians(150),
    Math.toRadians(-50),
    0.0
  )
});

// 参数
const PARAMS = {
  radius: 10
};

const bufferPARAMS = { 缓冲半径: 10 };

const bufferAnalysis = new BufferAnalysis(viewer, {
  radius: PARAMS.radius,
  clampToGround: true
});

addUI();
function addUI() {
  const pane = new Pane({
    container: uiContainer,
    title: "参数"
  });

  pane.addBinding(bufferPARAMS, "缓冲半径");

  // 点缓冲
  const pointBufferBtn = pane.addButton({
    title: "点缓冲"
  });

  pointBufferBtn.on("click", () => {
    bufferAnalysis.pointBuffer();
  });

  // 线缓冲
  const lineBufferBtn = pane.addButton({
    title: "线缓冲"
  });

  lineBufferBtn.on("click", () => {
    bufferAnalysis.lineBuffer();
  });

  // 面缓冲
  const polygonBufferBtn = pane.addButton({
    title: "面缓冲"
  });

  polygonBufferBtn.on("click", () => {
    bufferAnalysis.polygonBuffer();
  });

  // 清除
  const clearBtn = pane.addButton({
    title: "清除"
  });

  clearBtn.on("click", () => {
    bufferAnalysis.clear();
  });

  pane.on("change", (ev: any) => {
    let timer = null;
    if (timer) {
      clearTimeout(timer);
      timer = null;
    }

    timer = setTimeout(() => {
      console.log("changed: " + JSON.stringify(ev.value), ev);
      bufferAnalysis[ev.target.key] = ev.value;
    }, 300);
  });
}

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