唯杰地图 logo唯杰地图
VJMAP
EN

main.js

vjmapext/templates/vite-app/src/main.js 2.0 KB67 行
原文
import vjmap from "vjmap";
import "vjmap/dist/vjmap.min.css";
import vjmapext from "vjmapext";

const { MapCadLayer, LineEnt, CircleEnt, PolylineEnt, TextEnt, VjmapextEvents } = vjmapext;

// ===== 按需修改 =====
const serviceUrl = import.meta.env.VITE_VJMAP_SERVICE_URL ?? "https://vjmap.com/server/api/v1";
const accessToken = import.meta.env.VITE_VJMAP_TOKEN ?? "";

async function main() {
  // 空白 CAD 画布(不打开已有地图,直接建一块 CAD 坐标范围)
  const svc = new vjmap.Service(serviceUrl, accessToken);
  const mapExtent = vjmap.GeoBounds.fromArray([-1000, -1000, 1000, 1000]);
  const prj = new vjmap.GeoProjection(mapExtent);

  const map = new vjmap.Map({
    container: "map",
    style: svc.rasterBlankStyle(0, 24), // 空白底图
    center: prj.toLngLat(mapExtent.center()),
    zoom: 1,
    renderWorldCopies: false,
  });
  map.attach(svc, prj);
  await map.onLoad();

  // 挂 CAD 绘图层 + 工具栏
  const mapcadLayer = new MapCadLayer();
  map.addControl(mapcadLayer); // addControl 即 onAdd,无需 ready
  mapcadLayer.createUI({ theme: "dark" }); // 内置工具栏;不需要可去掉

  // 标题
  const title = new TextEnt([-900, 850], "vjmapext 空白地图绘图示例", 45);
  title.color = 0xffffff;
  mapcadLayer.addEntity(title);

  // 一些实体
  const axis = new LineEnt([-600, 0], [600, 0]);
  axis.color = 0x445566;
  mapcadLayer.addEntity(axis);

  const orbit = new CircleEnt([0, 0], 300);
  orbit.color = 0x3a4a6a;
  mapcadLayer.addEntity(orbit);

  const pl = new PolylineEnt(
    [
      [-400, -200],
      [0, 200],
      [400, -200],
    ],
    true // 闭合
  );
  pl.color = 0x00ccff;
  pl.lineWidth = 2;
  mapcadLayer.addEntity(pl);

  // 命令式绘图:等用户点两点画一条线
  // await mapcadLayer.executeCommand("LINE");
  mapcadLayer.eventBus.on(VjmapextEvents.CommandEnded, (e) =>
    console.log("命令结束", e)
  );
}

// vite 默认构建 target 不支持顶层 await,包一层 async main
main().catch(console.error);