基于 SuperMap WebGL 3D 进行封装的 Vue 地图组件以及相应的工具类。
当前主要内容:
Viewer : 地图展示组件
Manager : 功能通用入口
Manager.loader: 场景图层加载
Manager.layer : 图层显隐,管理
Manager.mouse : 鼠标交互事件(含量测)
Manager.query : 图层查询
Manager.tool : 通用工具(坐标转换等)
Manager.three : three 场景对象
$ npm install @dist/sm3d-core
本库位于私服,需先登录或配置auth
http://elb-791125809.cn-northwest-1.elb.amazonaws.com.cn:7799/repository/dist-front/
import Vue from "vue";
import sm3d from "@dist/sm3d-core";
Vue.use(sm3d, {
  // cesiumPath is the path of the Cesium library, such as
  // cesiumPath: './public/Cesium'
  // use online reference for http
  // cesiumPath: 'http://support.supermap.com.cn:8090/webgl/Build'
  // use online reference for https
  cesiumPath:
    "http://elb-zentao-361931552.cn-northwest-1.elb.amazonaws.com.cn:5335/xdata/FellowTravellers/DIST-3D-Loader/tree/master/docs/Cesium",
});
<template>
  <div class="content">
    <sm-viewer @ready="ready"> </sm-viewer>
  </div>
</template>
<script>
import { manager } from "@dist/sm3d-core"
methods: {
  ready: function() {
    // 此时 地图组件viewer 与 入口manager已经初始化完毕
    // let imageLayers = manager.viewer.imageryLayers;
    // let serviceUrl =
    // "http://52.83.134.236:8090/iserver/services/map-mvt-XZQH/restjsr/v1/vectortile/maps/XZQH";
    // manager.viewer.scene.addVectorTilesLayer({ url: serviceUrl};
  },
  test: function() {
      manager.mouse.setHandler(ACTION.POINT, result => {
            manager.mouse.clear();
            manager.mouse.activate();
  }
}
</script>
<style>
.content {
  background-color: #f9f9f9;
  position: absolute;
  top: 0;
  bottom: 0;
  left: 0;
  right: 0;
}
</style>
     <sm-viewer
      @ready="ready"
      :useDefaultRenderLoop='false'
    ></sm-viewer>
      var geometry = new manager.THREE.BoxGeometry(20000, 20000, 20000)
      var material = new manager.THREE.MeshBasicMaterial({ color: 0x00ff00 })
      var cube = new manager.THREE.Mesh(geometry, material)
      let _3DOB = new manager.ThreeObj(cube, { x: 115.23, y: 39.55 })
      manager.three.objs.push(_3DOB)
包含常用 加载场景图层的封装,以及其他类型数据的加载,设置,管理。
加载一个场景下所有图层示例如下:
   manager.layer.addServiceLayer(serviceUrl, () => {
      //图层加载完可调用
   })
包含三维场景中,鼠标点击,绘制等交互操作工具
如点击事件:
  manager.mouse.setHandler(manager.ACTION.POINT, result => {
    // 返回坐标
  })
| ACTION | 值 | 含义 | 
|---|---|---|
| MOUSE_MOVE | 0 | 鼠标移动 | 
| MOUSE_WHEEL | 1 | 鼠标滚轮 | 
| MOUSE_RIGHT | 2 | 鼠标右键 | 
| POINT | 3 | 点击事件/绘制点 | 
| LINE | 4 | 绘制线 | 
| POLYGON | 5 | 绘制面 | 
| DISTANCE | 6 | 测量距离 | 
| AREA | 7 | 测量面积 | 
包含常用数据格式转换,坐标系转换等
  let tool = manager.tool;
  let degree = tool.cartesian3ToDegrees(it);
  let local = tool.convertCooridate(tool.DegreeEPSG4326,tool.MEPSG4529,degree);
  //根据中心点(经纬度) ,生成圆形buffer点集合
  let buffer = tool.centerBuffer(center, num)
封装三维场景中的查询:
let info = {
          dataName: item.name,             //数据集名称
          dataSource: this.curProjectName, //数据源名称
          dataTitle: "BIM",                //服务名称
          url: "",                         //服务地址
          layerName: item.name + "@" + this.curProjectName  //图层名称
 };
let dic = {
        type: "SQL",
        infos: infos,           //服务数据集信息,支持多个数据集
        hasGeometry: false, //是否返回geometry
        alias: false,       //是否直接返回别名
        sql: {
          attributeFilter: queryField + "='" + id + "'"
        }
      };
//let params = manager.query.generateParams(dic);
manager.query.execute( dic).then(res => {
    if (res.length > 0) {
     let feature = res[0].features[0];
     console.log(feature.attributes)
    }
 });