Skip to content

矢量瓦片


ts
import { Viewer, VectorTileImageryProvider } from "joDVF";
import { Cartesian3, Math as CesiumMath, HeadingPitchRoll } from "joCesium";

const { mapContainer } = createContainer();

const viewer = new Viewer(mapContainer);
viewer.camera.flyTo({
  destination: Cartesian3.fromDegrees(102.78118, 29.433389, 1995000),
  orientation: new HeadingPitchRoll(
    CesiumMath.toRadians(0),
    CesiumMath.toRadians(-80),
    0.0
  )
});
const provinceProvider = new VectorTileImageryProvider({
  source: "./assets/json/620403.json",
  defaultStyle: {
    outlineColor: "rgb(255,255,255)",
    lineWidth: 2,
    tileCacheSize: 200,
    fill: true,
    fillColor: "rgba(3,113,45,0.4)"
  },
  maximumLevel: 20,
  minimumLevel: 1,
  simplify: false
});

provinceProvider.readyPromise.then(() => {
  viewer.imageryLayers.addImageryProvider(provinceProvider);
});

const shpProvider = new VectorTileImageryProvider({
  source: "https:" + location.host + "/assets/shp/sichuan/sichuan.shp",
  defaultStyle: {
    outlineColor: "rgb(255,0,0)",
    lineWidth: 1,
    fill: true,
    fillColor: "rgba(3,113,45,0.4)",
    tileCacheSize: 200,
    showMaker: true,
    showCenterLabel: true,
    fontColor: "rgba(255,123,0,1)",
    labelOffsetX: -10,
    labelOffsetY: -5,
    fontSize: 14,
    fontFamily: "黑体",
    centerLabelPropertyName: "name"
  },
  maximumLevel: 20,
  minimumLevel: 1,
  simplify: false
});

shpProvider.readyPromise.then(function () {
  viewer.imageryLayers.addImageryProvider(shpProvider);
});

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