基于 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)
}
});